feat:待审数据
This commit is contained in:
@@ -34,10 +34,10 @@
|
||||
<u-col span="3">
|
||||
<u-dropdown style="height: 35px">
|
||||
<u-dropdown-item
|
||||
v-model="curParameterClassify"
|
||||
v-model="curParameterKey"
|
||||
:title="curParameterTitle"
|
||||
height="70vh"
|
||||
:options="optionParameterClassify"
|
||||
:options="fieldGroup"
|
||||
@change="parameterClassifyChange"
|
||||
></u-dropdown-item>
|
||||
</u-dropdown>
|
||||
@@ -123,37 +123,38 @@
|
||||
:style="{ height: fields.open ? collaHeights[groupIndex] + 'px' : '0' }"
|
||||
> -->
|
||||
<up-collapse ref="collapseRef" :value="activeCollapses">
|
||||
<up-collapse-item v-for="(fields, groupIndex) in fieldGroup" :title="fields.title">
|
||||
<view
|
||||
class="form-item-my"
|
||||
v-for="(field, fieldIndex) in fields.fields"
|
||||
@click="fieldClick(field, groupIndex + '-' + fieldIndex)"
|
||||
:key="groupIndex + '-' + fieldIndex"
|
||||
v-show="field.hidden != 1"
|
||||
:class="{
|
||||
'selected-field': groupFieldIndex === groupIndex + '-' + fieldIndex,
|
||||
'disabled-field': !field.isEdit
|
||||
}"
|
||||
>
|
||||
<template v-for="(fields, groupIndex) in currentGroup">
|
||||
<up-collapse-item v-if="fields.label !== '全部'" :title="fields.label">
|
||||
<view
|
||||
:class="['label-my', { 'label-high-light': field.highlight == 1 }]"
|
||||
v-html="field.title"
|
||||
></view>
|
||||
<view class="content-my">
|
||||
<!--
|
||||
class="form-item-my"
|
||||
v-for="(field, fieldIndex) in fields.fields"
|
||||
@click="fieldClick(field, groupIndex + '-' + fieldIndex)"
|
||||
:key="groupIndex + '-' + fieldIndex"
|
||||
v-show="field.hidden != 1"
|
||||
:class="{
|
||||
'selected-field': groupFieldIndex === groupIndex + '-' + fieldIndex,
|
||||
'disabled-field': !field.isEdit
|
||||
}"
|
||||
>
|
||||
<view
|
||||
:class="['label-my', { 'label-high-light': field.highlight == 1 }]"
|
||||
v-html="field.title"
|
||||
></view>
|
||||
<view class="content-my">
|
||||
<!--
|
||||
如果是select,渲染2个组件:1个input、1个picker.
|
||||
field.valueText用于显示picker选中的文本
|
||||
1,键盘输入,2、天平,3、自动计算,4、文本输入
|
||||
-->
|
||||
<u-input
|
||||
border="bottom"
|
||||
style="width: 120px"
|
||||
v-if="field.fillingWay == 'input'"
|
||||
v-model="field.value"
|
||||
placeholder="请输入"
|
||||
/>
|
||||
<u-input
|
||||
border="bottom"
|
||||
style="width: 120px"
|
||||
v-if="field.fillingWay == 'input'"
|
||||
v-model="field.value"
|
||||
placeholder="请输入"
|
||||
/>
|
||||
|
||||
<!-- <view v-if="field.type === 'select'" class="x-bc select-my" @click="field.showPicker = true">
|
||||
<!-- <view v-if="field.type === 'select'" class="x-bc select-my" @click="field.showPicker = true">
|
||||
<text v-if="field.valueText">{{ field.valueText }}</text>
|
||||
<text v-else>请选择</text>
|
||||
<u-icon name="arrow-down" size="20"></u-icon>
|
||||
@@ -166,18 +167,21 @@
|
||||
@cancel="field.showPicker = false"
|
||||
@confirm="event => dicPickerConfirm(event, field)"
|
||||
/> -->
|
||||
<!--普通输入框 使用文本显示-->
|
||||
<view class="content-my-text" v-if="field.dataType != 'select' && field.fillingWay != 'input'">
|
||||
<text v-if="!field.value" class="content-my-text-placeholder">{{
|
||||
!field.fillingWay || field.fillingWay == 'calculate' ? '计算值' : '请输入'
|
||||
}}</text>
|
||||
<text v-else :class="['content-my-text-value', { 'field-high-light': field.highlight == 1 }]">{{
|
||||
field.value
|
||||
}}</text>
|
||||
<!--普通输入框 使用文本显示-->
|
||||
<view class="content-my-text" v-if="field.dataType != 'select' && field.fillingWay != 'input'">
|
||||
<text v-if="!field.value" class="content-my-text-placeholder">{{
|
||||
!field.fillingWay || field.fillingWay == 'calculate' ? '计算值' : '请输入'
|
||||
}}</text>
|
||||
<text
|
||||
v-else
|
||||
:class="['content-my-text-value', { 'field-high-light': field.highlight == 1 }]"
|
||||
>{{ field.value }}</text
|
||||
>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</up-collapse-item>
|
||||
</up-collapse-item>
|
||||
</template>
|
||||
</up-collapse>
|
||||
<!-- </view>
|
||||
</view> -->
|
||||
@@ -202,13 +206,20 @@
|
||||
import { ref, reactive, computed, nextTick, watch, getCurrentInstance } from 'vue'
|
||||
import { onLoad, onBackPress, onShow, onHide, onUnload } from '@dcloudio/uni-app'
|
||||
import request from '@/nx/request'
|
||||
import { calcAnalysisValue, handleRoundFiveNumber, calcRowAnalysisValue, math } from '@/nx/helper/calcAnalysisValue'
|
||||
import {
|
||||
calcAnalysisValue,
|
||||
handleRoundFiveNumber,
|
||||
calcRowAnalysisValue,
|
||||
math,
|
||||
groupByField
|
||||
} from '@/nx/helper/calcAnalysisValue'
|
||||
import { number } from 'mathjs'
|
||||
import AuncelSelectPopup from '@/components/sample/auncel-select-popup.vue'
|
||||
import { getTenantId } from '@/defaultBaseUrl'
|
||||
import { useScreenOrientation } from '@/nx/hooks/useScreenOrientation'
|
||||
import nx from '@/nx'
|
||||
import { getDataSourceTypeShow } from '../common'
|
||||
import tools from '@/nx/utils/tools'
|
||||
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
||||
@@ -238,11 +249,9 @@ let selectedField = ref({})
|
||||
const groupFieldIndex = ref('') //分组的索引
|
||||
const curSample = ref({})
|
||||
const curParameterTitle = ref('选择字段分类')
|
||||
const curParameterKey = ref('')
|
||||
const curParameterClassify = ref('')
|
||||
const curParameterKey = ref('all')
|
||||
const conAssayTaskId = ref('')
|
||||
const busSubCSampleId = ref('')
|
||||
const optionParameterClassify = ref([])
|
||||
let fieldGroup = ref([])
|
||||
const collaHeights = ref([])
|
||||
const cupNumKey = '杯号'
|
||||
@@ -262,17 +271,6 @@ const confirmWeightDisabled = computed(() => {
|
||||
}
|
||||
return true
|
||||
})
|
||||
// 当前样品数据
|
||||
const currentSampleData = computed(() => {
|
||||
if (sampleDataList.value.length > 0) {
|
||||
return sampleDataList.value[currentSampleIndex.value]
|
||||
}
|
||||
return {}
|
||||
})
|
||||
// 当前操作字段索引
|
||||
const currentFieldKey = computed(() => {
|
||||
return selectedField.value.fieldIndex
|
||||
})
|
||||
|
||||
const userInfo = computed(() => nx.$store('user').userInfo)
|
||||
|
||||
@@ -304,24 +302,17 @@ const navRightClick = () => {
|
||||
})
|
||||
}
|
||||
|
||||
const parameterClassifyChange = (v, a) => {
|
||||
const groupIndex = ref(0)
|
||||
const parameterClassifyChange = v => {
|
||||
curParameterKey.value = v
|
||||
optionParameterClassify.value.forEach((item, index) => {
|
||||
if (item.value === v) {
|
||||
groupIndex.value = index
|
||||
curParameterTitle.value = item.label
|
||||
}
|
||||
})
|
||||
if (v === '') groupIndex.value = 0
|
||||
if (groupIndex.value > 0) groupIndex.value--
|
||||
//自动选中字段
|
||||
groupFieldIndex.value = groupIndex.value + '-'
|
||||
curParameterTitle.value = currentGroup.value[0].label
|
||||
groupFieldIndex.value = ''
|
||||
selectedField.value = {}
|
||||
collapseRef.value.init()
|
||||
autoNextField()
|
||||
}
|
||||
|
||||
const fieldClick = (field, key) => {
|
||||
if (field.fillingWay == 'input' || !field.fillingWay || field.fillingWay == 'calculate') return
|
||||
if (!field.isEdit || field.fillingWay === 'input') return
|
||||
selectedField.value = field
|
||||
groupFieldIndex.value = key
|
||||
if (myKeyboard.value) {
|
||||
@@ -331,7 +322,7 @@ const fieldClick = (field, key) => {
|
||||
let decimalPosition = field.decimalPosition
|
||||
if (decimalPosition == null || decimalPosition < -1) decimalPosition = -1
|
||||
numKeyboardParam.decimal = decimalPosition
|
||||
if (field.fillingWay == 'keyboard') {
|
||||
if (field.fillingWay == 'collect') {
|
||||
listenDeviceData()
|
||||
} else {
|
||||
closeDeviceListener()
|
||||
@@ -346,7 +337,7 @@ const autoNextField = () => {
|
||||
const indexV = groupFieldIndex.value.split('-')
|
||||
groupIndex = number(indexV[0])
|
||||
fieldIndex = indexV[1] === '' ? -1 : number(indexV[1])
|
||||
const group = fieldGroup.value[groupIndex]
|
||||
const group = currentGroup.value[groupIndex]
|
||||
const fields = group.fields
|
||||
if (fields.length > fieldIndex + 1) {
|
||||
//切换到下一个字段
|
||||
@@ -366,6 +357,15 @@ const autoNextSample = () => {
|
||||
|
||||
//手动切换样品
|
||||
const switchSample = async (index, autoFlag) => {
|
||||
if (!autoFlag) {
|
||||
const shouldContinue = await tools.showPromiseModal(
|
||||
'提示',
|
||||
`请确认样品【${currentSampleData.value.sampleCode}】数据已经保存,是否继续?`
|
||||
)
|
||||
if (!shouldContinue) {
|
||||
return // 用户点了取消,直接退出
|
||||
}
|
||||
}
|
||||
//重置天平归0
|
||||
weightDataIsToZero.value = false
|
||||
if (index === currentSampleIndex.value) return
|
||||
@@ -378,10 +378,6 @@ const switchSample = async (index, autoFlag) => {
|
||||
}
|
||||
// 将菜单菜单活动item垂直居中
|
||||
scrollTop.value = index * menuItemHeight.value + menuItemHeight.value / 2 - menuHeight.value / 2 - 50
|
||||
//修改当前选中的groupFieldIndex
|
||||
// if (typeof groupFieldIndex.value !== 'undefined' && groupFieldIndex.value.indexOf('-') > 0) {
|
||||
// groupFieldIndex.value = groupFieldIndex.value.split('-')[0] + '-'
|
||||
// }
|
||||
uni.showLoading({ title: '加载中...' })
|
||||
setValueToField()
|
||||
autoGenerateCupNum()
|
||||
@@ -422,7 +418,6 @@ const getDetailFieldsAndStatus = autoSelectNextField => {
|
||||
const taskDetailId = currentSampleData.value.id
|
||||
//读取回收率配置
|
||||
loadConRecoveryList()
|
||||
optionParameterClassify.value = arr //字段分类
|
||||
conAssayTaskId.value = res.additionalProperties.conAssayTaskId
|
||||
busSubCSampleId.value = res.additionalProperties.busSubCSampleId
|
||||
const detail = res.additionalProperties.taskDetail
|
||||
@@ -623,6 +618,7 @@ const saveAuncelData = () => {
|
||||
//自动跳转下一个字段
|
||||
setTimeout(() => {
|
||||
autoNextField()
|
||||
weightDataIsToZero.value = false
|
||||
}, 100)
|
||||
}
|
||||
const dynamicFormData = {}
|
||||
@@ -662,7 +658,7 @@ const saveDetail = async () => {
|
||||
}))
|
||||
} else {
|
||||
const datas = sampleDataList.value[currentSampleIndex.value]
|
||||
params.assayTaskAnalysisDataList = [{ datas, analysisType: activeAssayTypeKey.value }]
|
||||
params.assayTaskAnalysisDataList = [{ datas: [datas], analysisType: activeAssayTypeKey.value }]
|
||||
}
|
||||
|
||||
await nx.$api.assayTask.saveBatchSmpleAndQcAnalysis(params)
|
||||
@@ -836,16 +832,30 @@ let conRangeElementAnalysisList = []
|
||||
const currentAssayType = computed(() => {
|
||||
return assayGroups.value.find(item => item.value === activeAssayTypeKey.value)
|
||||
})
|
||||
// 当前样品数据
|
||||
const currentSampleData = computed(() => {
|
||||
if (sampleDataList.value.length > 0) {
|
||||
return sampleDataList.value[currentSampleIndex.value]
|
||||
}
|
||||
return {}
|
||||
})
|
||||
watch(
|
||||
() => currentAssayType.value,
|
||||
() => {
|
||||
sampleDataList.value = currentAssayType.value.tableData
|
||||
fieldGroup.value = [{ open: true, fields: currentAssayType.value.columns, title: '样品分析' }]
|
||||
fieldGroup.value = groupByField(currentAssayType.value.columns)
|
||||
setValueToField()
|
||||
// getDomHeight()
|
||||
activeCollapses.value = fieldGroup.value.map((_, index) => index)
|
||||
}
|
||||
)
|
||||
const currentGroup = computed(() => {
|
||||
if (!currentAssayType.value || curParameterKey.value === 'all') {
|
||||
return fieldGroup.value
|
||||
} else {
|
||||
return fieldGroup.value.filter(g => g.value === curParameterKey.value)
|
||||
}
|
||||
})
|
||||
const collapseRef = ref()
|
||||
const activeCollapses = ref([])
|
||||
function handleAssayTypeChange({ index, value }) {
|
||||
@@ -853,6 +863,9 @@ function handleAssayTypeChange({ index, value }) {
|
||||
activeAssayTypeIndex.value = index
|
||||
currentSampleIndex.value = 0
|
||||
groupFieldIndex.value = ''
|
||||
selectedField.value = {}
|
||||
curParameterKey.value = 'all'
|
||||
curParameterTitle.value = '选择字段分类'
|
||||
collapseRef.value.init()
|
||||
}
|
||||
// 获取任务指派单数据
|
||||
@@ -864,7 +877,7 @@ async function getSampleAnalysisByTaskId() {
|
||||
assayGroups.value = assayTaskAnalysisDataList.map(group => {
|
||||
// 必须深拷贝 datas!防止多个表格共享引用
|
||||
const tableData = JSON.parse(JSON.stringify(group.datas || []))
|
||||
const columns = group.columns || []
|
||||
const columns = group.columns.filter(item => item.paramNo) || []
|
||||
|
||||
return {
|
||||
value: group.analysisType,
|
||||
@@ -1112,7 +1125,6 @@ onLoad(param => {
|
||||
lockOrientation('landscape')
|
||||
if (param.currentTaskId) {
|
||||
taskId.value = param.currentTaskId
|
||||
// getAssayTaskSampleList(taskId.value)
|
||||
getSampleAnalysisByTaskId()
|
||||
}
|
||||
loadFieldApiData(fieldGroup.value)
|
||||
|
||||
Reference in New Issue
Block a user