From 54489501c1a2d9799fb106422a4195e1b3b958af Mon Sep 17 00:00:00 2001
From: luojie <125330818@qq.com>
Date: Sun, 15 Mar 2026 21:26:59 +0800
Subject: [PATCH] =?UTF-8?q?feat:[=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86][sp0?=
=?UTF-8?q?21]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../business/comps/template/TemplateTable.vue | 4 +-
.../business/comps/template/comps/gsp/GSP015.vue | 333 +++++++++++++++++++++
.../comps/template/formConfig/gsp/gsp015.js | 324 ++++++++++++++++++++
.../comps/template/mixins/templateMixin.js | 1 +
4 files changed, 661 insertions(+), 1 deletion(-)
create mode 100644 src/views/business/comps/template/comps/gsp/GSP015.vue
create mode 100644 src/views/business/comps/template/formConfig/gsp/gsp015.js
diff --git a/src/views/business/comps/template/TemplateTable.vue b/src/views/business/comps/template/TemplateTable.vue
index f8257a1..6da29db 100644
--- a/src/views/business/comps/template/TemplateTable.vue
+++ b/src/views/business/comps/template/TemplateTable.vue
@@ -43,6 +43,7 @@ import GSP004 from "./comps/gsp/GSP004.vue";
import GSP005 from "./comps/gsp/GSP005.vue";
import GSP009 from "./comps/gsp/GSP009.vue";
import GSP010 from "./comps/gsp/GSP010.vue";
+import GSP015 from "./comps/gsp/GSP015.vue";
//试验物质配制计划表/麻精药领取申请单/毒麻药品配制记录表
import SYWZPZJHB from "./comps/gsp/SYWZPZJHB.vue";
@@ -135,7 +136,7 @@ export default {
//试验物质配制计划表/麻精药领取申请单/毒麻药品配制记录表
MJYLQSQD, SYWZPZJHB, DMYPPZJLB,
//供试品
- GSP001,GSP002, GSP003,GSP004,GSP005,GSP009, GSP010,
+ GSP001,GSP002, GSP003,GSP004,GSP005,GSP009, GSP010,GSP015,
//色谱
SP001, SP003, SP00456,SP007, SP008, SP009,SP0019,SP0020,SP0021,
// PCR
@@ -259,6 +260,7 @@ export default {
'GSP008': 'GSP002',
'GSP009': 'GSP009',
'GSP010': 'GSP010',
+ 'GSP015': 'GSP015',
'GSP011': 'GSP009',
'GSP012': 'GSP002',
'GSP013': 'GSP002',
diff --git a/src/views/business/comps/template/comps/gsp/GSP015.vue b/src/views/business/comps/template/comps/gsp/GSP015.vue
new file mode 100644
index 0000000..c749b2b
--- /dev/null
+++ b/src/views/business/comps/template/comps/gsp/GSP015.vue
@@ -0,0 +1,333 @@
+
+
+
+
+

{{ formData.bdmc }}

+
+
+
+
+
+
+
+
新增
+
导出
+
+
+
新增
+
导出
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/business/comps/template/formConfig/gsp/gsp015.js b/src/views/business/comps/template/formConfig/gsp/gsp015.js
new file mode 100644
index 0000000..7f213c9
--- /dev/null
+++ b/src/views/business/comps/template/formConfig/gsp/gsp015.js
@@ -0,0 +1,324 @@
+export const getBaseInfoFormConfig = ($this) => {
+ return [
+ {
+ type: 'cardItem',
+ config: {
+ studyMc: {
+ label: 'template.common.testName',
+ type: 'input',
+ disabled: true
+ },
+ studySn: {
+ label: 'template.common.testNumber',
+ type: 'input',
+ disabled: true
+ }
+ }
+ },
+ {
+ type: 'conditionItem',
+ label: 'template.common.testConfigurationConditions',
+ config: {
+ pre: {
+ label: 'template.common.preFill',
+ type: 'select',
+ multiple: true,
+ fillType: 'preFill',
+ options: $this.getDictOptions('business_pztj'),
+ otherCode: 'preOther'
+ },
+ act: {
+ label: 'template.common.actualFill',
+ type: 'select',
+ fillType: 'actFill',
+ otherCode: 'actOther',
+ multiple: true,
+ compareTo: 'pre',
+ options: $this.getDictOptions('business_pztj')
+ }
+ }
+ },
+ {
+ type: 'cellItem',
+ label: 'template.common.configurationTime',
+ config: {
+ startDate: {
+ label: 'template.common.startTime',
+ type: 'input'
+ },
+ endDate: {
+ label: 'template.common.endTime',
+ type: 'input'
+ }
+ }
+ }
+ ]
+}
+
+//备注
+export const getRemarkFormConfig = ($this) => {
+ return [
+ {
+ type: 'cellItem',
+ config: {
+ remark: {
+ label: '',
+ type: 'textarea',
+ fillType: 'actFill',
+ span: 1,
+ placeholder: 'template.common.remarkPlaceholder',
+ maxlength: 1000,
+ rows: 5
+ }
+ }
+ }
+ ]
+}
+
+export const getYbsmFormConfig = ($this) => {
+ return [
+ {
+ type: 'step',
+ config: {
+ qysj: {
+ label: '取样时间',
+ type: 'input',
+ fillType: 'actFill',
+ maxlength: 50
+ },
+ xsy: {
+ label: "template.sp.sp003.xsy",
+ type: "input",
+ fillType: "preFill",
+ subType: "sj",
+ subKey: "subSolution",
+ subFillType: "actFill",
+ maxlength: 20,
+ }
+ }
+ }
+ ]
+}
+
+//取样table
+export const getQyTableColumns = ($this) => {
+ return [
+ {
+ label: '取样编号',
+ prop: 'qybh',
+ width: 280,
+ bodyType: 'input',
+ bodyFillType: 'preFill',
+ bodySubType: 'span',
+ bodySubKey: 'qybhcode',
+ },
+ {
+ label: '制剂编号',
+ prop: 'zjbh',
+ width: 280,
+ bodyType: 'gsp',
+ bodyFillType: 'actFill',
+ },
+ {
+ label: '预设制剂浓度',
+ prop: 'yszjnd',
+ width: 280,
+ headerSelectKey: 'yszjnddw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_nddw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'preFill',
+ headerSelectTo: 'sjzjnddw',
+ },
+ {
+ label: '实际制剂浓度',
+ prop: 'sjzjnd',
+ width: 280,
+ headerSelectKey: 'sjzjnddw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_nddw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ copyFrom: 'yszjnd',
+ compareTo: 'yszjnd',
+ },
+ {
+ label: '制剂状态',
+ prop: 'zjzt',
+ width: 180,
+ bodyType: 'input',
+ bodyFillType: 'actFill',
+ },
+ {
+ label: '预设取样位置',
+ prop: 'ysqywz',
+ width: 180,
+ bodyType: 'select',
+ options: $this.getDictOptions('business_qywz'),
+ bodyFillType: 'actFill',
+ },
+ {
+ label: '预设取样位置',
+ prop: 'sjqywz',
+ width: 180,
+ bodyType: 'select',
+ options: $this.getDictOptions('business_qywz'),
+ bodyFillType: 'actFill',
+ compareTo: 'ysqywz',
+ },
+ {
+ label: '预设取样量',
+ prop: 'ysqyl',
+ width: 280,
+ headerSelectKey: 'ysqyldw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'preFill',
+ headerSelectTo: 'sjqydw',
+ },
+ {
+ label: '实际取样量',
+ prop: 'sjqyl',
+ width: 280,
+ headerSelectKey: 'sjqydw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ copyFrom: 'ysqyldw',
+ compareTo: 'ysqyldw',
+ },
+ ]
+}
+
+//进样table
+export const getJyTableColumns = ($this) => {
+ return [
+ {
+ label: '进样编号',
+ prop: 'jybh',
+ width: 280,
+ bodyType: 'input',
+ bodyFillType: 'preFill',
+ bodySubType: 'span',
+ bodySubKey: 'jybhcode',
+ },
+ {
+ label: '取样编号',
+ prop: 'qybh',
+ width: 280,
+ bodyType: 'gsp',
+ bodyFillType: 'actFill',
+ },
+ {
+ label: '取样浓度',
+ prop: 'qynd',
+ width: 280,
+ headerSelectKey: 'qynddw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_nddw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ },
+ {
+ label: '取样体积',
+ prop: 'qytj',
+ width: 280,
+ headerSelectKey: 'qytjdw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ },
+ {
+ label: '标定体积',
+ prop: 'bdtj',
+ width: 280,
+ headerSelectKey: 'bdtjdw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'preFill',
+ },
+ {
+ label: '进样体积',
+ prop: 'jytj',
+ width: 280,
+ headerSelectKey: 'jytjdw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ },
+ {
+ label: '稀释倍数',
+ prop: 'xsbs',
+ width: 280,
+ headerSelectKey: 'jytjdw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ bodySubType: "inputNumber",
+ bodySubKey: "xsbsxsd",
+ bodySubFillType: "preFill",
+ showBodySub: $this.fillType === "preFill",
+ bodyDisabled: true,
+ bodyPrecisionKey: "xsbsxsd",
+ },
+ {
+ label: '终体积',
+ prop: 'ztj',
+ width: 280,
+ headerSelectKey: 'ztjdw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_tjdw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ bodySubType: "inputNumber",
+ bodySubKey: "ztjxsd",
+ bodySubFillType: "preFill",
+ showBodySub: $this.fillType === "preFill",
+ bodyDisabled: true,
+ bodyPrecisionKey: "ztjxsd",
+ },
+ {
+ label: '实际进样浓度',
+ prop: 'sjjynd',
+ width: 280,
+ headerSelectKey: 'sjjynddw',
+ fillType: "preFill",
+ headerOptions: $this.getDictOptions('business_nddw'),
+ bodyType: 'inputNumber',
+ bodyFillType: 'actFill',
+ bodySubType: "inputNumber",
+ bodySubKey: "sjjyndsd",
+ bodySubFillType: "preFill",
+ showBodySub: $this.fillType === "preFill",
+ bodyDisabled: true,
+ bodyPrecisionKey: "sjjyndsd",
+ },
+
+ ]
+}
+
+export const getEcFormConfig = ($this) => {
+ return [
+ {
+ type: "step",
+ config: {
+ xsy: {
+ label: 'template.sp.sp00456.xsy',
+ labelWidth: 80,
+ type: 'input',
+ fillType: 'preFill',
+ subType: 'sj',
+ subKey: 'subXsy',
+ subFillType: 'actFill',
+ maxlength: 20
+ },
+ }
+ }
+ ]
+}
diff --git a/src/views/business/comps/template/mixins/templateMixin.js b/src/views/business/comps/template/mixins/templateMixin.js
index d025db7..8c00ded 100644
--- a/src/views/business/comps/template/mixins/templateMixin.js
+++ b/src/views/business/comps/template/mixins/templateMixin.js
@@ -59,6 +59,7 @@ export default {
'business_cjdd', // 采集地点
'business_zpdd', // 制片地点
'business_cjbw', // 制片部位
+ 'business_qywz', // 取样位置
],
props: {
templateData: {