feat:待审数据

This commit is contained in:
houjunxiang
2025-11-11 20:51:08 +08:00
parent fb41fa9a03
commit 970a8b8eae
11 changed files with 416 additions and 651 deletions

View File

@@ -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个input1个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)