From 495c6915cebf6569f96465b45a8d3623426878ef Mon Sep 17 00:00:00 2001
From: luojie <125330818@qq.com>
Date: Thu, 2 Apr 2026 16:51:44 +0800
Subject: [PATCH] =?UTF-8?q?feat:[=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86][upd?=
=?UTF-8?q?ate]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/Template/HandleFormItem.vue | 15 +-
.../Template/StepComponents/CdmdComp.vue | 252 +++++++++++++++++++++
src/components/Template/StepComponents/JcbComp.vue | 2 +
.../Template/StepComponents/xbjzpz/cdmd.vue | 4 +
src/components/Template/StepFormPackage.vue | 5 +
src/components/Template/mixins/stepMixins.js | 32 +--
.../business/comps/template/comps/dl/DL016.vue | 167 +++++++-------
.../comps/template/formConfig/sp/SP0020.js | 18 +-
8 files changed, 387 insertions(+), 108 deletions(-)
create mode 100644 src/components/Template/StepComponents/CdmdComp.vue
diff --git a/src/components/Template/HandleFormItem.vue b/src/components/Template/HandleFormItem.vue
index bf6bd51..fc36ed9 100644
--- a/src/components/Template/HandleFormItem.vue
+++ b/src/components/Template/HandleFormItem.vue
@@ -404,7 +404,7 @@ export default {
return false;
},
getFlexClass() {
- const noFlexArr = ["radio", "checkboxTag", "fqyq","button"]
+ const noFlexArr = ["radio", "checkboxTag", "fqyq", "button"]
return noFlexArr.includes(this.type) ? '' : 'flex1'
},
getDecimalDigits() {
@@ -657,7 +657,7 @@ export default {
// 点击按钮
handleClickButton(item) {
this.inputValue = `button-${new Date().getTime()}`;
- if(item.noSign){//不需要签名的直接emit
+ if (item.noSign) {//不需要签名的直接emit
this.$emit("clickButton", item);
return;
}
@@ -1152,7 +1152,7 @@ export default {
if (!this.isFieldsRecord) {//是否需要记录修改记录
this.$emit("blur", this.inputValue);
this.$emit('input', this.inputValue);
- this.$emit("change", this.inputValue,"change");
+ this.$emit("change", this.inputValue, "change");
return;
}
// 值发生了变化,需要弹出密码输入框
@@ -1891,6 +1891,15 @@ export default {
box-shadow: 0 0 6px #ffc3c3 !important;
}
+ .el-checkbox__label {
+ white-space: normal;
+ }
+
+ .checkbox-tree-item .el-checkbox {
+ display: flex;
+ align-items: center;
+ }
+
.checkbox-item {
margin-right: 16px;
display: flex;
diff --git a/src/components/Template/StepComponents/CdmdComp.vue b/src/components/Template/StepComponents/CdmdComp.vue
new file mode 100644
index 0000000..cc062ff
--- /dev/null
+++ b/src/components/Template/StepComponents/CdmdComp.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+ | 第{{ index }}次 |
+ 稀释倍数 |
+ 1 |
+ 细胞密度(个/mL) |
+
+ 公式
+ |
+
+
+
+ | 左上格(个) |
+ 右上格(个) |
+ 左下格(个) |
+ 右下格(个) |
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+ 注意:当前仅支持最多10次测定,如需更多次数请调整参数。
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Template/StepComponents/JcbComp.vue b/src/components/Template/StepComponents/JcbComp.vue
index 275226a..c54ade9 100644
--- a/src/components/Template/StepComponents/JcbComp.vue
+++ b/src/components/Template/StepComponents/JcbComp.vue
@@ -61,6 +61,8 @@ export default {
bodyType: "jcb",
bodyKey: "clpClick",
bodyFillType: "preFill",
+ bodySubType: 'span',
+ bodySubKey: 'bh',
},
{
label: '时间',
diff --git a/src/components/Template/StepComponents/xbjzpz/cdmd.vue b/src/components/Template/StepComponents/xbjzpz/cdmd.vue
index 3f29db1..125a662 100644
--- a/src/components/Template/StepComponents/xbjzpz/cdmd.vue
+++ b/src/components/Template/StepComponents/xbjzpz/cdmd.vue
@@ -75,10 +75,14 @@ export default {
fillType: "actFill",
type: "inputNumber",
},
+ cdmds:{
+ type:"cdmd"
+ },
text6:{
label: "个/mL。",
type: "text",
},
+
}
}]
return config
diff --git a/src/components/Template/StepFormPackage.vue b/src/components/Template/StepFormPackage.vue
index 56340b2..e698525 100644
--- a/src/components/Template/StepFormPackage.vue
+++ b/src/components/Template/StepFormPackage.vue
@@ -56,6 +56,9 @@
onJcbUpdate(data,key)" :type = "sItem.type" :ref="'jcbComp_'+key" :stepIndex="stepIndex" :prefixKey="prefixKey+'_'+index" @resetRecord = "resetRecord" :item="sItem" :formData="formData[key]" />
+
+ onJcbUpdate(data,key)" :type = "sItem.type" :ref="'cdmdComp_'+key" :stepIndex="stepIndex" :prefixKey="prefixKey+'_'+index" :item="sItem" :formData="formData[key]" />
+
{{sItem.otherLabel ? $t(sItem.otherLabel) : $t("template.common.other") }}
@@ -74,6 +77,7 @@
import HandleFormItem from '@/components/Template/HandleFormItem.vue'
import formPackageMixins from '@/components/Template/mixins/formPackageMixins.js'
import JcbComp from '@/components/Template/StepComponents/JcbComp.vue'
+import CdmdComp from '@/components/Template/StepComponents/CdmdComp.vue'
import ZLSubPackage from '@/components/Template/StepComponents/ZLSubPackage.vue'
import { isShowOther } from "@/utils/formPackageCommon.js";
import { EventBus } from "@/utils/eventBus";
@@ -85,6 +89,7 @@ export default {
HandleFormItem,
ZLSubPackage,
JcbComp,
+ CdmdComp,
},
mixins: [formPackageMixins],
props: {
diff --git a/src/components/Template/mixins/stepMixins.js b/src/components/Template/mixins/stepMixins.js
index 139e8a0..3160df4 100644
--- a/src/components/Template/mixins/stepMixins.js
+++ b/src/components/Template/mixins/stepMixins.js
@@ -74,15 +74,17 @@ export default {
commonHandleJcbUpdate() {
this.localFormData = this.formData;
if (!this.formData.jcb && this.templateFillType === 'actFill') {
- const qbData = this.getQbData();
- this.localFormData = { ...this.localFormData, jcb: qbData };
- justUpdateFilledFormData();
+ setTimeout(() => {
+ const qbData = this.getQbData();
+ this.localFormData = { ...this.localFormData, jcb: qbData };
+ justUpdateFilledFormData();
+ }, 3000);
}
},
//获取取板数据
getQbData() {
let qbData = [];
- if (this.templateSn === "LBA003") {//只有lba003才会有取板步骤,所以检测板数据从取板数据里面获取;
+ if (this.templateSn === "LBA003" || this.templateSn === "ADA003") {//只有lba003才会有取板步骤,所以检测板数据从取板数据里面获取;
const stepData = this.getStepData() || [];
const filterData = stepData.filter((item) => item.type === "qb");
const allQbData = [];
@@ -92,12 +94,12 @@ export default {
allQbData.push(...parseData);
})
qbData = [...new Map(allQbData.map(item => [item.mc, item])).values()]
- } else if (this.templateSn === "LBA002") {//lba002没有取板步骤,所以检测板数据从检测板数据里面获取;
- const {stepTableFormData=[]} = this.getJcbData() || {};
- qbData = JSON.parse(JSON.stringify(stepTableFormData));
+ } else if (this.templateSn === "LBA002" || this.templateSn === "ADA002") {//lba002没有取板步骤,所以检测板数据从检测板数据里面获取;
+ const { stepTableFormData = [] } = this.getJcbData() || {};
+ qbData = stepTableFormData;
}
- return { stepTableFormData: qbData }
+ return { stepTableFormData: JSON.parse(JSON.stringify(qbData)) }
},
//回填编号 preField 前缀 updateField 需要更新的字段
async handleBackfillCode(preField, updateField) {
@@ -163,16 +165,16 @@ export default {
let maxVolume, maxVolumeUnit;
if (this.getMybh || this.getMybhByIndex) {//某些表单的步骤需要分装表单上的数据
let result = {};
- if(this.getMybh){
+ if (this.getMybh) {
result = this.getMybh()
- }else if(this.getMybhByIndex){
- result = this.getMybhByIndex(this.formIndex,this.formType)
+ } else if (this.getMybhByIndex) {
+ result = this.getMybhByIndex(this.formIndex, this.formType)
}
const { mybh, mybhOptions = [], maxVolume: max, maxVolumeUnit: unit } = result
- if ((!mybh && !mybhOptions.length) || !max || !unit) {
- this.$message.warning('请先填写分装数据')
- return
- }
+ // if ((!mybh && !mybhOptions.length) || !max || !unit) {
+ // this.$message.warning('请先填写分装数据')
+ // return
+ // }
options = mybhOptions
fields.push(mybh)
maxVolume = max || ''
diff --git a/src/views/business/comps/template/comps/dl/DL016.vue b/src/views/business/comps/template/comps/dl/DL016.vue
index 564c9de..9a633cc 100644
--- a/src/views/business/comps/template/comps/dl/DL016.vue
+++ b/src/views/business/comps/template/comps/dl/DL016.vue
@@ -11,18 +11,16 @@
-
+
-
-
-
+
+
+
@@ -49,10 +47,10 @@ import TableOpertaionDelete from "@/components/Template/operation/TableOpertaion
export default {
name: "DL016",
- dicts: [
- 'business_dl_qsxjbltj','business_tjdw','business_nddw'
- ],
- components: { BaseInfoFormPackage, LineLabel, TableList, Step, CustomTable,TableOpertaionDelete },
+ dicts: [
+ 'business_dl_qsxjbltj', 'business_tjdw', 'business_nddw'
+ ],
+ components: { BaseInfoFormPackage, LineLabel, TableList, Step, CustomTable, TableOpertaionDelete },
mixins: [templateMixin],
props: {
fillType: {
@@ -61,13 +59,13 @@ export default {
},
},
computed: {
- // 表格数据
- tableFormData() {
- return {
- stepTableFormData: this.formData.stepTableFormData || [],
- headerSelectFields: {}
- }
- },
+ // 表格数据
+ tableFormData() {
+ return {
+ stepTableFormData: this.formData.stepTableFormData || [],
+ headerSelectFields: {}
+ }
+ },
// 备注表单配制
remarkConig() {
return [
@@ -132,7 +130,7 @@ export default {
}
]
},
- // 细胞信息
+ // 细胞信息
swypyjInfoFormConfig() {
return [
{
@@ -142,16 +140,16 @@ export default {
label: 'template.dl.dl016.qxbd',
type: 'qxbd',
fillType: 'actFill',
- qxbdType:'DL014',
- filledCodes:['bdmc','bdbh'],
+ qxbdType: 'DL014',
+ filledCodes: ['bdmc', 'bdbh'],
},
- bltj: {
+ bltj: {
label: 'template.dl.dl016.bltj',
type: 'select',
fillType: 'preFill',
options: this.getDictOptions('business_dl_qsxjbltj'),
otherCode: 'bltjOther',
- showOtherLabel:false
+ showOtherLabel: false
},
}
}
@@ -166,7 +164,7 @@ export default {
bodyType: "input",
bodyFillType: "actFill",
width: 180,
- bodyDisabled: true,
+ bodyDisabled: true,
},
{
label: "template.dl.dl016.xybh",
@@ -183,20 +181,20 @@ export default {
// width: 180,
// bodyFillType: "actFill",
// bodyMaxlength: 10,
- // headerSelectKey: 'qsxjjrldw',
- // fillType: "actFill",
- // headerOptions: this.getDictOptions('business_nddw'),
- // bodyType: 'inputNumber',
- label: "template.dl.dl016.qsxjjrl",
- prop: 'qsxjjrl',
- width: 280,
- headerSelectKey: 'qsxjjrldw',
- fillType: "preFill",
- headerOptions: this.getDictOptions('business_tjdw'),
- bodyType: 'inputNumber',
- bodyFillType: 'actFill',
- copyFrom: 'ysqyl',
- compareTo: 'ysqyl',
+ // headerSelectKey: 'qsxjjrldw',
+ // fillType: "actFill",
+ // headerOptions: this.getDictOptions('business_nddw'),
+ // bodyType: 'inputNumber',
+ label: "template.dl.dl016.qsxjjrl",
+ prop: 'qsxjjrl',
+ width: 280,
+ headerSelectKey: 'qsxjjrldw',
+ fillType: "preFill",
+ headerOptions: this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ copyFrom: 'ysqyl',
+ compareTo: 'ysqyl',
}
]
},
@@ -207,69 +205,69 @@ export default {
};
},
methods: {
- onRegentSubmit(e) {
- const { selectInfo, key, rowIndex } = e
- const { row } = selectInfo
- if (key === 'qxbd') {
- try {
- // 解析前序表单的内容
- const bdnr = JSON.parse(row.bdnr)
- // 获取剂量组列表数据
- const stepTableFormData = bdnr.jlzTableData || []
+ onRegentSubmit(e) {
+ const { selectInfo, key, rowIndex } = e
+ const { row } = selectInfo
+ if (key === 'qxbd') {
+ try {
+ // 解析前序表单的内容
+ const bdnr = JSON.parse(row.bdnr)
+ // 获取剂量组列表数据
+ const stepTableFormData = bdnr.jlzTableData || []
- if (stepTableFormData.length === 0) {
- // 清空当前的换液情况列表数据
- this.$set(this.formData, 'stepTableFormData', [])
- this.$message.warning('前序表单中没有剂量组数据')
- return
- }
+ if (stepTableFormData.length === 0) {
+ // 清空当前的换液情况列表数据
+ this.$set(this.formData, 'stepTableFormData', [])
+ this.$message.warning('前序表单中没有剂量组数据')
+ return
+ }
- // 从剂量组数据中提取剂量组别和悬液编号
- const itemData = stepTableFormData.map(item => ({
- jlzb: item.jlzb || '', // 剂量组别
- xybh: item.xybh || '', // 悬液编号
- qsxjjrl: '', //
- }))
- // 使用 $set 更新 formData,触发 CustomTable 的响应式更新
- this.$set(this.formData, 'stepTableFormData', itemData)
+ // 从剂量组数据中提取剂量组别和悬液编号
+ const itemData = stepTableFormData.map(item => ({
+ jlzb: item.jlzb || '', // 剂量组别
+ xybh: item.xybh || '', // 悬液编号
+ qsxjjrl: '', //
+ }))
+ // 使用 $set 更新 formData,触发 CustomTable 的响应式更新
+ this.$set(this.formData, 'stepTableFormData', itemData)
- this.$message.success(`已从前序表单加载 ${itemData.length} 条剂量组数据`)
- } catch (error) {
- console.error('解析前序表单数据失败:', error)
- this.$message.error('解析前序表单数据失败')
- }
- }
- },
- //选择table header下拉框也要更新体积
- onHeaderSelectChange(data){
- const {key, headerSelectFields,dataSource=[]} = data;
+ this.$message.success(`已从前序表单加载 ${itemData.length} 条剂量组数据`)
+ } catch (error) {
+ console.error('解析前序表单数据失败:', error)
+ this.$message.error('解析前序表单数据失败')
+ }
+ }
+ },
+ //选择table header下拉框也要更新体积
+ onHeaderSelectChange(data) {
+ const { key, headerSelectFields, dataSource = [] } = data;
const keys = [
'targetStartSolutionVolumeUnit',
'targetDiluentVolumeUnit',
'targetSolutionConcentrationUnit',
'targetSolutionVolumeUnit',
]
- if(keys.includes(key)){
- const {targetStartSolution,subTargetStartSolution} = this.$refs.swypyjInfoRef?.getFilledFormData();
+ if (keys.includes(key)) {
+ const { targetStartSolution, subTargetStartSolution } = this.$refs.swypyjInfoRef?.getFilledFormData();
const params = {
subTargetStartSolution,
headerSelectFields
}
- this.batchUpdateTargetStartSolutionVolume(dataSource,targetStartSolution,params)
+ this.batchUpdateTargetStartSolutionVolume(dataSource, targetStartSolution, params)
}
},
- beforeSaveRecord(data){
+ beforeSaveRecord(data) {
const formFields = this.$refs.swypyjInfoRef?.getFilledFormData();
- this.onCommonVerifyNdException(formFields,data);
+ this.onCommonVerifyNdException(formFields, data);
},
//获取已填写的表单数据
getFilledFormData() {
- return this.getFilledFormDataByRefs(["baseInfoRef", "swypyjInfoRef", "qcxjjyqkTableRef", "stepRef","remarkRef"])
+ return this.getFilledFormDataByRefs(["baseInfoRef", "swypyjInfoRef", "qcxjjyqkTableRef", "stepRef", "remarkRef"])
},
//获取填写完成的表单数据
async getFormData() {
- let content = await this.validFormFields(["baseInfoRef", "swypyjInfoRef", "qcxjjyqkTableRef", "stepRef","remarkRef"]);
- return content;
+ let content = await this.validFormFields(["baseInfoRef", "swypyjInfoRef", "qcxjjyqkTableRef", "stepRef", "remarkRef"]);
+ return content;
},
getResource() {
//使用的试剂、仪器
@@ -292,5 +290,4 @@ export default {
}
};
-
+
diff --git a/src/views/business/comps/template/formConfig/sp/SP0020.js b/src/views/business/comps/template/formConfig/sp/SP0020.js
index 65749d1..094f1e5 100644
--- a/src/views/business/comps/template/formConfig/sp/SP0020.js
+++ b/src/views/business/comps/template/formConfig/sp/SP0020.js
@@ -31,14 +31,22 @@ const getOptions = (sn) => {
{ label: '精密度与准确性', value: '精密度与准确性' },
{ label: '检测限', value: '检测限' },
{ label: '提取精密度', value: '提取精密度' },
- { label: '提取前样品稳定性', value: '提取前样品稳定性' },
- { label: '提取后样品稳定性', value: '提取后样品稳定性' },
- { label: 'cDNA样品稳定性', value: 'cDNA样品稳定性' },
+ { label: '提取前样品冰浴放置稳定性', value: '提取前样品冰浴放置稳定性' },
+ { label: '提取前样品反复冻融稳定性', value: '提取前样品反复冻融稳定性' },
+ { label: '提取前样品长期冻存稳定性', value: '提取前样品长期冻存稳定性' },
{ label: '方法适用性', value: '方法适用性' },
{ label: '基因组DNA残留测定', value: '基因组DNA残留测定' },
{ label: '稀释线性', value: '稀释线性' },
- { label: '反复动态稳定性', value: '反复动态稳定性' },
- { label: '标准工作液稳定性', value: '标准工作液稳定性' }
+ { label: '提取前组织样品裂解液中冰浴放置稳定性', value: '提取前组织样品裂解液中冰浴放置稳定性' },
+ { label: '标准工作液稳定性', value: '标准工作液稳定性' },
+ { label: '提取前组织样品裂解液中反复冻融稳定性', value: '提取前组织样品裂解液中反复冻融稳定性' },
+ { label: '提取前组织样品裂解液中长期冻存稳定性', value: '提取前组织样品裂解液中长期冻存稳定性' },
+ { label: '提取后样品室温(10~30℃)放置稳定性', value: '提取后样品室温(10~30℃)放置稳定性' },
+ { label: '提取后样品2~8℃放置稳定性', value: '提取后样品2~8℃放置稳定性' },
+ { label: '提取后样品反复冻融稳定性', value: '提取后样品反复冻融稳定性' },
+ { label: '提取后样品长期冻存稳定性', value: '提取后样品长期冻存稳定性' },
+ { label: 'cDNA样品室温(10~30℃)放置稳定性', value: 'cDNA样品室温(10~30℃)放置稳定性' },
+ { label: 'cDNA样品2~8℃放置稳定性', value: 'cDNA样品2~8℃放置稳定性' }
]
}