<template>
|
|
<div class="template-table">
|
|
<component ref="templateComponent" :sn="sn" :is="getTemplateComponent()" :templateData="templateData"
|
|
:fillType="fillType">
|
|
</component>
|
|
<SubPackageDialog ref="subPackageDialogRef"></SubPackageDialog>
|
|
<TagPrintDialog ref="tagPrintDialogRef"></TagPrintDialog>
|
|
<SelectReagentDialog ref="selectReagentDialogRef" />
|
|
<SelectInstrumentDialog ref="selectInstrumentDialogRef" />
|
|
<SelectMixReagentDialog ref="selectMixReagentDialogRef"/>
|
|
<EditSign ref="editSignRef" @cancel="handleEditSignCancel" @callback="handleEditSignCallback" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { EventBus } from "@/utils/eventBus";
|
|
import { debounce } from 'lodash-es'
|
|
import SubPackageDialog from "./dialog/SubPackageDialog.vue";//分装弹窗
|
|
import TagPrintDialog from "./dialog/PrintTagDialog.vue";//标签打印弹窗
|
|
import SelectReagentDialog from "./dialog/SelectReagentDialog.vue";//选择试剂弹窗
|
|
import SelectInstrumentDialog from "./dialog/SelectInstrumentDialog.vue";//选择仪器弹窗
|
|
import SelectMixReagentDialog from "./dialog/SelectMixReagentDialog.vue";//选择试剂/供试品/给药制剂弹窗
|
|
import EditSign from "./dialog/EditSign.vue";//电子签名弹窗
|
|
|
|
//色谱
|
|
import SP001 from "./comps/sp/SP001.vue";
|
|
import SP003 from "./comps/sp/SP003.vue";
|
|
import SP00456 from "./comps/sp/SP00456.vue";
|
|
import SP007 from "./comps/sp/SP007.vue";
|
|
//色谱生物样品分析方法学样品制备表-10个类似
|
|
import SP008 from "./comps/sp/SP008.vue";
|
|
import SP009 from "./comps/sp/SP009.vue";
|
|
import SP0019 from "./comps/sp/SP0019.vue";
|
|
import SP0020 from "./comps/sp/SP0020.vue";
|
|
import SP0021 from "./comps/sp/SP0021.vue";
|
|
|
|
import Demo from "./comps/sp/Demo.vue";
|
|
//供试品
|
|
import GSP001 from "./comps/gsp/GSP001.vue";
|
|
import GSP002 from "./comps/gsp/GSP002.vue";
|
|
import GSP003 from "./comps/gsp/GSP003.vue";
|
|
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 SYWZPZJHB from "./comps/gsp/SYWZPZJHB.vue";
|
|
import MJYLQSQD from "./comps/gsp/MJYLQSQD.vue";
|
|
import DMYPPZJLB from "./comps/gsp/DMYPPZJLB.vue";
|
|
|
|
// PCR
|
|
//PCR001-使用SP001
|
|
import PCR002 from "./comps/pcr/PCR002.vue";
|
|
import PCR003 from "./comps/pcr/PCR003.vue";
|
|
import PCR004 from "./comps/pcr/PCR004.vue";
|
|
import PCR005 from "./comps/pcr/PCR005.vue";
|
|
import PCR007 from "./comps/pcr/PCR007.vue";
|
|
import PCR008 from "./comps/pcr/PCR008.vue";
|
|
import PCR009 from "./comps/pcr/PCR009.vue";
|
|
import PCR010 from "./comps/pcr/PCR010.vue";
|
|
import PCR011 from "./comps/pcr/PCR011.vue";
|
|
import PCR012 from "./comps/pcr/PCR012.vue";
|
|
|
|
//LBA
|
|
// LBA001-使用SP001
|
|
import LBA002 from "./comps/lba/LBA002.vue";
|
|
import LBA003 from "./comps/lba/LBA003.vue";
|
|
import LBA004 from "./comps/lba/LBA004.vue";
|
|
import LBA005 from "./comps/lba/LBA005.vue";
|
|
import LBA006 from "./comps/lba/LBA006.vue";
|
|
import LBA007 from "./comps/lba/LBA007.vue";
|
|
import LBA008 from "./comps/lba/LBA008.vue";
|
|
|
|
//ADA
|
|
// ADA001-使用SP001
|
|
// ADA002-使用LBA002
|
|
// ADA003-使用LBA003
|
|
// ADA004-使用LBA004
|
|
// ADA005-使用LBA005
|
|
// ADA006-使用LBA006
|
|
// ADA007-使用LBA007
|
|
|
|
//样品
|
|
// YP001-使用SP001
|
|
import YP002 from "./comps/yp/YP002.vue";
|
|
import YP003 from "./comps/yp/YP003.vue";
|
|
import YP004 from "./comps/yp/YP004.vue";
|
|
import YP005 from "./comps/yp/YP005.vue";
|
|
|
|
//细胞
|
|
import XB001 from "./comps/xb/XB001.vue";
|
|
|
|
//动技
|
|
import DJ001 from "./comps/dj/DJ001.vue";
|
|
import DJ002 from "./comps/dj/DJ002.vue";
|
|
import DJ003 from "./comps/dj/DJ003.vue";
|
|
|
|
//病理
|
|
import BL001 from "./comps/bl/BL001.vue";
|
|
import BL002 from "./comps/bl/BL002.vue";
|
|
|
|
//毒理
|
|
// DL001-SYWZPZJHB
|
|
// DL002-使用SP001
|
|
import DL003 from './comps/dl/DL003.vue'
|
|
import DL004 from './comps/dl/DL004.vue'
|
|
import DL005 from './comps/dl/DL005.vue'
|
|
import DL006 from './comps/dl/DL006.vue'
|
|
import DL007 from './comps/dl/DL007.vue'
|
|
import DL008 from './comps/dl/DL008.vue'
|
|
import DL009 from './comps/dl/DL009.vue'
|
|
import DL010 from './comps/dl/DL010.vue'
|
|
import DL011 from './comps/dl/DL011.vue'
|
|
import DL012 from './comps/dl/DL012.vue'
|
|
import DL013 from './comps/dl/DL013.vue'
|
|
import DL014 from './comps/dl/DL014.vue'
|
|
import DL015 from './comps/dl/DL015.vue'
|
|
import DL016 from "./comps/dl/DL016.vue";
|
|
import DL017 from "./comps/dl/DL017.vue";
|
|
import DL018 from "./comps/dl/DL018.vue";
|
|
import DL019 from "./comps/dl/DL019.vue";
|
|
import DL020 from "./comps/dl/DL020.vue";
|
|
import DL021 from "./comps/dl/DL021.vue";
|
|
import DL022 from "./comps/dl/DL022.vue";
|
|
import DL023 from "./comps/dl/DL023.vue";
|
|
import DL024 from "./comps/dl/DL024.vue";
|
|
|
|
|
|
export default {
|
|
name: "TemplateTable",
|
|
components: {
|
|
Demo,
|
|
SubPackageDialog, TagPrintDialog, SelectReagentDialog, SelectInstrumentDialog, SelectMixReagentDialog, EditSign,
|
|
//试验物质配制计划表/麻精药领取申请单/毒麻药品配制记录表
|
|
MJYLQSQD, SYWZPZJHB, DMYPPZJLB,
|
|
//供试品
|
|
GSP001,GSP002, GSP003,GSP004,GSP005,GSP009, GSP010,
|
|
//色谱
|
|
SP001, SP003, SP00456,SP007, SP008, SP009,SP0019,SP0020,SP0021,
|
|
// PCR
|
|
PCR002, PCR003, PCR004, PCR005,PCR007, PCR008, PCR009,PCR010, PCR011, PCR012,
|
|
//LBA
|
|
LBA002,
|
|
LBA003,
|
|
LBA004,
|
|
LBA005,
|
|
LBA006,
|
|
LBA007,
|
|
LBA008,
|
|
//样品
|
|
YP002,
|
|
YP003,
|
|
YP004,
|
|
YP005,
|
|
// 毒理
|
|
DL003,
|
|
DL004,
|
|
DL005,
|
|
DL006,
|
|
DL007,
|
|
DL008,
|
|
DL009,
|
|
DL010,
|
|
DL011,
|
|
DL012,
|
|
DL013,
|
|
DL014,
|
|
DL015,
|
|
DL016,
|
|
DL017,
|
|
DL018,
|
|
DL019,
|
|
DL020,
|
|
DL021,
|
|
DL022,
|
|
DL023,
|
|
DL024,
|
|
//细胞
|
|
XB001,
|
|
//动技
|
|
DJ001,
|
|
DJ002,
|
|
DJ003,
|
|
//病理
|
|
BL001,
|
|
BL002
|
|
},
|
|
data() {
|
|
return {
|
|
componentMap: null,
|
|
}
|
|
},
|
|
methods: {
|
|
getTemplateComponent() {
|
|
if (!this.sn) return 'Demo';
|
|
let componentName = this.componentMap[this.sn] || 'Demo';
|
|
return componentName;
|
|
},
|
|
handleEditSignCancel(e) {
|
|
EventBus.$emit('edit-sign-cancel', e);
|
|
},
|
|
|
|
},
|
|
props: {
|
|
sn: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
fillType: {
|
|
type: String,
|
|
default: 'preFill',
|
|
},
|
|
templateData: {
|
|
type: Object,
|
|
default: () => { },
|
|
},
|
|
emitName: {
|
|
type: String,
|
|
default: 'onModifyRecord',
|
|
},
|
|
},
|
|
computed: {
|
|
|
|
templateComponentMap() {
|
|
if (!this.componentMap) {
|
|
this.componentMap = {
|
|
//色谱
|
|
'SP001': 'SP001',
|
|
'SP002': 'SP001',
|
|
'SP003': 'SP003',
|
|
'SP004': 'SP00456',
|
|
'SP005': 'SP00456',
|
|
'SP006': 'SP00456',
|
|
'SP007': 'SP007',
|
|
'SP008': 'SP008',
|
|
'SP009': 'SP009',
|
|
'SP010': 'SP008',
|
|
'SP011': 'SP008',
|
|
'SP012': 'SP008',
|
|
'SP013': 'SP008',
|
|
'SP014': 'SP008',
|
|
'SP015': 'SP008',
|
|
'SP016': 'SP008',
|
|
'SP017': 'SP008',
|
|
'SP018': 'SP008',
|
|
'SP019': 'SP0019',
|
|
'SP020': 'SP0020',
|
|
'SP021': 'SP0021',
|
|
//供试品
|
|
|
|
'GSP001': 'GSP001',
|
|
'GSP002': 'GSP002',
|
|
'GSP003': 'GSP003',
|
|
'GSP004': 'GSP004',
|
|
'GSP005': 'GSP005',
|
|
'GSP006': 'GSP002',
|
|
'GSP008': 'GSP002',
|
|
'GSP009': 'GSP009',
|
|
'GSP010': 'GSP010',
|
|
'GSP011': 'GSP009',
|
|
'GSP012': 'GSP002',
|
|
'GSP013': 'GSP002',
|
|
'GSP014': 'GSP002',
|
|
//试验物质配制计划表/麻精药领取申请单/毒麻药品配制记录表
|
|
'SYWZPZJHB': 'SYWZPZJHB',
|
|
'MJYLQSQD': 'MJYLQSQD',
|
|
'DMYPPZJLB': 'DMYPPZJLB',
|
|
//PCR
|
|
'PCR001': 'SP001',
|
|
'PCR002': 'PCR002',
|
|
'PCR003': 'PCR003',
|
|
'PCR004': 'PCR004',
|
|
'PCR005': 'PCR005',
|
|
'PCR006': 'SP0020',
|
|
'PCR007': 'PCR007',
|
|
'PCR008': 'PCR008',
|
|
'PCR009': 'PCR009',
|
|
'PCR010': 'PCR010',
|
|
'PCR011': 'PCR011',
|
|
'PCR012': 'PCR012',
|
|
'PCR013': 'SP00456',
|
|
//LBA
|
|
'LBA001': 'SP001',
|
|
'LBA002': 'LBA002',
|
|
'LBA003': 'LBA003',
|
|
'LBA004': 'LBA004',
|
|
'LBA005': 'SP00456',
|
|
'LBA006': 'LBA006',
|
|
'LBA007': 'SP00456',
|
|
'LBA008': 'LBA008',
|
|
//ADA
|
|
'ADA001': 'SP001',
|
|
'ADA002': 'LBA002',
|
|
'ADA003': 'LBA003',
|
|
'ADA004': 'LBA004',
|
|
'ADA005': 'SP00456',
|
|
'ADA006': 'LBA006',
|
|
'ADA007': 'SP00456',
|
|
//样品
|
|
'YP001': 'SP001',
|
|
'YP002': 'YP002',
|
|
'YP003': 'YP003',
|
|
'YP004': 'YP004',
|
|
'YP005': 'YP005',
|
|
//细胞
|
|
'XB001': 'XB001',
|
|
//动技
|
|
'DJ001': 'DJ001',
|
|
'DJ002': 'DJ002',
|
|
'DJ003': 'DJ003',
|
|
//病理
|
|
'BL001': 'BL001',
|
|
'BL002': 'BL002',
|
|
//毒理
|
|
//DL001-SYWZPZJHB
|
|
'DL002': 'SP001',
|
|
'DL003': 'DL003',
|
|
'DL004': 'DL004',
|
|
'DL005': 'DL005',
|
|
'DL006': 'DL006',
|
|
'DL007': 'DL007',
|
|
'DL008': 'DL008',
|
|
'DL009': 'DL009',
|
|
'DL010': 'DL010',
|
|
'DL011': 'DL011',
|
|
'DL012': 'DL012',
|
|
'DL013': 'DL013',
|
|
'DL014': 'DL014',
|
|
'DL015': 'DL015',
|
|
'DL016': 'DL016',
|
|
'DL017': 'DL017',
|
|
'DL018': 'DL018',
|
|
'DL019': 'DL019',
|
|
'DL020': 'DL020',
|
|
'DL021': 'DL021',
|
|
'DL022': 'DL022',
|
|
'DL023': 'DL023',
|
|
'DL024': 'DL024',
|
|
}
|
|
}
|
|
return this.componentMap || "Demo"
|
|
}
|
|
},
|
|
watch: {
|
|
sn: {
|
|
immediate: true,
|
|
handler(v) {
|
|
console.log(v, "sn")
|
|
}
|
|
},
|
|
templateData: {
|
|
immediate: true,
|
|
deep: true,
|
|
handler(v) {
|
|
if (v) {
|
|
if (v.zdxgjl) {
|
|
this.zdxgjl = JSON.parse(v.zdxgjl) || [];
|
|
}
|
|
if (v.fhyjjl) {
|
|
this.fhyjjl = JSON.parse(v.fhyjjl) || [];
|
|
}
|
|
if (v.zdgxjl) {
|
|
this.fieldCheckObj = JSON.parse(v.zdgxjl) || {};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
provide() {
|
|
return {
|
|
//分发给子组件的fillType
|
|
templateData: this.templateData,
|
|
templateFillType: this.fillType,
|
|
getZdxgjl: () => this.zdxgjl,
|
|
getFhyjjl: () => this.fhyjjl,
|
|
getFieldCheckObj: () => this.fieldCheckObj,
|
|
//更新提交记录
|
|
updateZdxgjl: (data) => {
|
|
this.zdxgjl.unshift(data);
|
|
},
|
|
//更新复核意见记录
|
|
updateFhyjjl: (data) => {
|
|
this.fhyjjl.unshift(data);
|
|
},
|
|
//替换复核意见记录
|
|
replaceFhyjjl: (data) => {
|
|
this.fhyjjl = data;
|
|
},
|
|
//更新字段检查对象
|
|
updateFieldCheckObj: (data) => {
|
|
this.fieldCheckObj = { ...this.fieldCheckObj, ...data };
|
|
},
|
|
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
info: {},
|
|
zdxgjl: [],
|
|
fhyjjl: [],
|
|
fieldCheckObj: {},
|
|
currentEditSignUuid: null, // 当前请求EditSign的HandleFormItem的uuid
|
|
latestParams: {},//用于存储最新的params
|
|
hasCustomTable: false,//是否有自定义表格
|
|
};
|
|
},
|
|
created() {
|
|
this.debouncedEmit = debounce(this.emitToParent, 100)
|
|
},
|
|
mounted() {
|
|
EventBus.$on('onModifyRecord', this.handleModyfyRecord);
|
|
//分装弹窗
|
|
EventBus.$on("showSubPackageDialog", (data) => {
|
|
this.$refs.subPackageDialogRef.show(data)
|
|
})
|
|
//标签打印弹窗
|
|
EventBus.$on("showTagPrintDialog", (data) => {
|
|
this.$refs.tagPrintDialogRef.show(data)
|
|
})
|
|
//选择仪器弹窗
|
|
EventBus.$on("showSelectInstrumentDialog", (data) => {
|
|
this.$refs.selectInstrumentDialogRef.show(data.studyFormId, data)
|
|
})
|
|
//选择试剂弹窗
|
|
EventBus.$on("showSelectReagentDialog", (data) => {
|
|
this.$refs.selectReagentDialogRef.show(data.studyFormId, data)
|
|
})
|
|
//选择试剂/供试品/给药制剂弹窗
|
|
EventBus.$on("showSelectMixReagentDialog", (data) => {
|
|
this.$refs.selectMixReagentDialogRef.show(data.studyFormId, data,this.templateData.studyId)
|
|
})
|
|
EventBus.$on("hideSelectMixReagentDialog", (data) => {
|
|
this.$refs.selectMixReagentDialogRef.hide()
|
|
})
|
|
//显示电子签名弹窗
|
|
EventBus.$on("showEditSignDialog", (data) => {
|
|
this.currentEditSignUuid = data.uuid;
|
|
this.$refs.editSignRef.show();
|
|
})
|
|
},
|
|
beforeDestroy() {
|
|
// 记得移除监听,避免内存泄漏
|
|
EventBus.$off('onModifyRecord');
|
|
EventBus.$off("showSubPackageDialog");
|
|
EventBus.$off("showTagPrintDialog");
|
|
EventBus.$off("showSelectReagentDialog");
|
|
EventBus.$off("showSelectInstrumentDialog");
|
|
EventBus.$off("showSelectMixReagentDialog");
|
|
EventBus.$off("showEditSignDialog");
|
|
EventBus.$off("hideSelectMixReagentDialog");
|
|
this.debouncedEmit.cancel()
|
|
},
|
|
methods: {
|
|
handleModyfyRecord(data) {
|
|
const { source } = data;
|
|
if (source === "customTable") {
|
|
this.latestParams = data;
|
|
// delete this.latestParams.source
|
|
this.hasCustomTable = true
|
|
// 取消之前的等待
|
|
this.debouncedEmit.cancel()
|
|
this.emitToParent()
|
|
}else if(!source && !this.hasCustomTable){
|
|
this.latestParams = data
|
|
this.debouncedEmit()
|
|
}
|
|
},
|
|
emitToParent() {
|
|
if (this.latestParams) {
|
|
console.log(this.latestParams,"this.latestParams")
|
|
this.$emit(this.emitName, this.latestParams)
|
|
}
|
|
},
|
|
// 处理电子签名取消事件
|
|
handleEditSignCancel() {
|
|
if (this.currentEditSignUuid) {
|
|
EventBus.$emit('onEditSignCancel', { uuid: this.currentEditSignUuid });
|
|
EventBus.$emit('onFormEditSignCancel', { uuid: this.currentEditSignUuid });
|
|
this.currentEditSignUuid = null;
|
|
}
|
|
},
|
|
// 处理电子签名确认回调事件
|
|
handleEditSignCallback(data) {
|
|
if (this.currentEditSignUuid) {
|
|
EventBus.$emit('onEditSignCallback', { uuid: this.currentEditSignUuid, data });
|
|
this.currentEditSignUuid = null;
|
|
}
|
|
},
|
|
async getFormData() {
|
|
if (this.fillType === "actFill") {
|
|
//检查是否有未填写的复核意见
|
|
const flag = this.fhyjjl.every((item) => !!item.content && !!item.reply)
|
|
console.log(this.fhyjjl, flag, "flag")
|
|
if (!flag) {
|
|
this.$message.error("疑问项还未回复,请回复后再提交");
|
|
return;
|
|
}
|
|
}
|
|
return await this.$refs.templateComponent.getFormData();
|
|
},
|
|
getResource() {
|
|
return this.$refs.templateComponent.getResource();
|
|
},
|
|
getYqResource() {
|
|
return this.$refs.templateComponent.getYqResource();
|
|
},
|
|
getJcbList() {
|
|
return this.$refs.templateComponent.getJcbList();
|
|
},
|
|
getXbxj() {
|
|
return this.$refs.templateComponent.getXbxj();
|
|
},
|
|
getFilledFormData() {
|
|
return this.$refs.templateComponent.getFilledFormData();
|
|
},
|
|
getTemplateComponent() {
|
|
return this.templateComponentMap[this.sn]
|
|
},
|
|
}
|
|
};
|
|
</script>
|
|
<style rel="stylesheet/scss" lang="scss">
|
|
.template-table {
|
|
background: #fff;
|
|
padding: 10px 10px;
|
|
width: 100%;
|
|
}
|
|
</style>
|