From fb41fa9a03456f228c2b0a81fe5002cdfd47dbd8 Mon Sep 17 00:00:00 2001 From: houjunxiang Date: Tue, 11 Nov 2025 09:58:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- defaultBaseUrl.js | 4 +- nx/api/assayTask.js | 21 ++ nx/helper/calcAnalysisValue.js | 40 ++- nx/index.js | 4 +- pages/analysis/auncel/auncel-status.vue | 1 + .../analysis/sample/components/task-item.vue | 4 +- pages/analysis/sample/sample-work-detail.vue | 334 ++++++++++++------ .../analysis/sample/sample-work-edit-task.vue | 10 +- pages/analysis/sample/sample-work-list.vue | 42 +-- 9 files changed, 311 insertions(+), 149 deletions(-) diff --git a/defaultBaseUrl.js b/defaultBaseUrl.js index 2b93ff5..fa8c8e4 100644 --- a/defaultBaseUrl.js +++ b/defaultBaseUrl.js @@ -1,6 +1,6 @@ // 在此不用配置接口前缀 const isDev = process.env.NODE_ENV === 'development' -const BaseUrl = isDev ? 'http://192.168.26.116:888/admin-api' : 'http://172.33.199.28:8088/api' +const BaseUrl = isDev ? 'http://192.168.26.190:48080/admin-api' : 'http://172.33.199.28:8088/api' // const BaseUrl = isDev ? 'http://localhost:9999' : '' const upgradeBaseUrl = 'http://172.33.199.28:8088' @@ -31,5 +31,5 @@ export function getUpgradeBaseUrl() { } export function getWebSocketUrl() { // return uni.getStorageSync('base_url').replace('/api', '') + '/ws' - return 'ws://192.168.26.178:8330' + return 'ws://192.168.26.190:8330' } diff --git a/nx/api/assayTask.js b/nx/api/assayTask.js index 3e4dee1..fc878cb 100644 --- a/nx/api/assayTask.js +++ b/nx/api/assayTask.js @@ -30,6 +30,14 @@ const getSampleAnalysisByTaskId = businessAssayTaskId => { params: { businessAssayTaskId } }) } +// 质控样 +const batchSampleAndQcAnalysisByTaskId = businessAssayTaskId => { + return request({ + url: '/qms/bus/sample/analysis/batchSampleAndQcAnalysisByTaskId', + method: 'GET', + params: { businessAssayTaskId } + }) +} // 获取指派单动态配置项 const getDynamicBaseFormSchema = params => { return request({ @@ -161,6 +169,17 @@ const saveDetailValue = data => { } }) } +// 批量保存任务 +const saveBatchSmpleAndQcAnalysis = data => { + return request({ + url: '/qms/bus/sample/analysis/saveBatchSmpleAndQcAnalysis', + method: 'POST', + data, + custom: { + showSuccess: true + } + }) +} // 提交任务明细-停用 const submitTaskDetail = params => { @@ -256,6 +275,8 @@ export default { getAssayTaskList, getAssayTaskDataList, getSampleAnalysisByTaskId, + batchSampleAndQcAnalysisByTaskId, + saveBatchSmpleAndQcAnalysis, getDynamicBaseFormSchema, getAssayTaskDetailListByTaskNo, getAssayTaskDetailById, diff --git a/nx/helper/calcAnalysisValue.js b/nx/helper/calcAnalysisValue.js index e95e760..6dc70c6 100644 --- a/nx/helper/calcAnalysisValue.js +++ b/nx/helper/calcAnalysisValue.js @@ -4,8 +4,9 @@ math.config({ number: 'BigNumber', precision: 64 }) +export { math } /* - * 计算分析值*/ + * 计算当前样品分析值*/ export function calcAnalysisValue(group) { try { for (const g of group) { @@ -57,6 +58,43 @@ export function calcAnalysisValue(group) { } } +// 根据样品和配置列计算分析值 +export function calcRowAnalysisValue(row, columnObj, dynamicsColumns) { + if (!columnObj.paramNo) return + for (let i = 0; i < dynamicsColumns.length; i++) { + let curItem = dynamicsColumns[i] + if (curItem.fieldIndex === columnObj.fieldIndex) continue + + let param = columnObj.fieldIndex.charAt(0) === 'p' ? 'p' + columnObj.paramNo : 'e' + columnObj.paramNo + if (curItem.formula && curItem.formula.includes(param)) { + let formula = curItem.formula + let formulas = formula.split('|') + let formulaVal = '' + formulas.forEach(f => { + if (f.charAt(0) === 'p') { + let o = dynamicsColumns.find(i => 'p' + i.paramNo === f) + formulaVal += row[o.fieldIndex]?.value ? row[o.fieldIndex].value : 0 + } else if (f.charAt(0) === 'e') { + let o = dynamicsColumns.find(i => 'e' + i.paramNo === f) + formulaVal += row[o.fieldIndex]?.value ? row[o.fieldIndex].value : 0 + } else { + formulaVal += f + } + }) + let v + if (formulaVal.startsWith('Get')) { + formulaVal = formulaVal.replace(')', ",'" + row.conBaseSampleId + "')") + v = eval(formulaVal) + } else { + v = math.evaluate(formulaVal).toString() + v = isFinite(v) ? v : 0 + } + + row[curItem.fieldIndex].value = handleRoundFiveNumber(Number(v), row[curItem.fieldIndex].decimalPosition) + calcRowAnalysisValue(row, curItem, dynamicsColumns) + } + } +} const findFieldInGroup = function (paramNo, group, p) { for (const g of group) { for (const f of g.fields) { diff --git a/nx/index.js b/nx/index.js index 83f9efe..8d12d89 100644 --- a/nx/index.js +++ b/nx/index.js @@ -1,5 +1,6 @@ import $router from '@/nx/router' import $helper from '@/nx/helper' +import $test from '@/nx/helper/test' import $store from '@/nx/store' import $measure from '@/nx/helper/measure' import $print from '@/nx/helper/print' @@ -21,7 +22,8 @@ const nx = { $measure, $print, $dayjs: dayjs, - $api + $api, + $test } // 加载Nx底层依赖 diff --git a/pages/analysis/auncel/auncel-status.vue b/pages/analysis/auncel/auncel-status.vue index 9f37a60..1a07855 100644 --- a/pages/analysis/auncel/auncel-status.vue +++ b/pages/analysis/auncel/auncel-status.vue @@ -48,6 +48,7 @@ onMounted(() => { } } nx.$measure.setRegData(JSON.stringify(regData)) + nx.$measure.open() // 监听 WebSocket 数据 diff --git a/pages/analysis/sample/components/task-item.vue b/pages/analysis/sample/components/task-item.vue index d5d803c..260d6e7 100644 --- a/pages/analysis/sample/components/task-item.vue +++ b/pages/analysis/sample/components/task-item.vue @@ -3,7 +3,7 @@ - + {{ seq }} @@ -72,7 +72,7 @@ const taskStyle = task => { } .seq { position: absolute; - top: 9px; + top: 12px; left: 12px; color: #fff; font-size: 11px; diff --git a/pages/analysis/sample/sample-work-detail.vue b/pages/analysis/sample/sample-work-detail.vue index a107f6d..b7d80a4 100644 --- a/pages/analysis/sample/sample-work-detail.vue +++ b/pages/analysis/sample/sample-work-detail.vue @@ -9,28 +9,30 @@ - - 待化验样品 - + - {{ currentSample.sampleCode }} + {{ currentSampleData.sampleCode }} 数据采集或录入 - - 样品详情 - - - - - - - + + + + + + - + {{ currentAuncel.code }} @@ -103,11 +110,10 @@ - - - + + + + 保存样品数据 @@ -192,10 +199,10 @@