华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
6.9 KiB

3 months ago
3 months ago
  1. <template>
  2. <div class="template-table">
  3. <component ref="templateComponent" :sn = "sn" :is="getTemplateComponent()" :templateData="templateData" :fillType="fillType">
  4. </component>
  5. <SubPackageDialog ref = "subPackageDialogRef"></SubPackageDialog>
  6. <TagPrintDialog ref = "tagPrintDialogRef"></TagPrintDialog>
  7. <SelectReagentDialog ref="selectReagentDialogRef"/>
  8. <SelectInstrumentDialog ref="selectInstrumentDialogRef"/>
  9. <SelectMixReagentDialog ref="selectMixReagentDialogRef"/>
  10. </div>
  11. </template>
  12. <script>
  13. import { EventBus } from "@/utils/eventBus";
  14. import SubPackageDialog from "./dialog/SubPackageDialog.vue";//分装弹窗
  15. import TagPrintDialog from "./dialog/PrintTagDialog.vue";//标签打印弹窗
  16. import SelectReagentDialog from "./dialog/SelectReagentDialog.vue";//选择试剂弹窗
  17. import SelectInstrumentDialog from "./dialog/SelectInstrumentDialog.vue";//选择仪器弹窗
  18. import SelectMixReagentDialog from "./dialog/SelectMixReagentDialog.vue";//选择试剂/供试品/给药制剂弹窗
  19. //色谱
  20. import SWYPFXRYPZB from "./comps/sp/SWYPFXRYPZB.vue";
  21. import SWYPFXCBYPZB from "./comps/sp/SWYPFXCBYPZB.vue";
  22. import SWYPBQGZYZBB from "./comps/sp/SWYPBQGZYZBB.vue";
  23. import SWYPNBGZYZBB from "./comps/sp/SWYPNBGZYZBB.vue";
  24. //色谱生物样品分析方法学样品制备表-10个类似
  25. import ZQDYJMD from "./comps/sp/SWYPFXFFXYPZBB/ZQDYJMD.vue";
  26. import QXWDX from "./comps/sp/SWYPFXFFXYPZBB/QXWDX.vue";
  27. import CBYHGZYWDX from "./comps/sp/SWYPFXFFXYPZBB/CBYHGZYWDX.vue";
  28. import Recovery from "./comps/sp/SWYPFXFFXYPZBB/Recovery.vue";
  29. import RXJZXY from "./comps/sp/SWYPFXFFXYPZBB/RXJZXY.vue";
  30. import JZXY from "./comps/sp/SWYPFXFFXYPZBB/JZXY.vue";
  31. import XZXHTYX from "./comps/sp/SWYPFXFFXYPZBB/XZXHTYX.vue";
  32. import ZDYBS from "./comps/sp/SWYPFXFFXYPZBB/ZDYBS.vue";
  33. import XSKKX from "./comps/sp/SWYPFXFFXYPZBB/XSKKX.vue";
  34. import CBYDB from "./comps/sp/SWYPFXFFXYPZBB/CBYDB.vue";
  35. import SWYPFXFFXZKPZB from "./comps/sp/SWYPFXFFXZKPZB.vue";
  36. import Demo from "./comps/sp/Demo.vue";
  37. //供试品
  38. import SYWZPZJHB from "./comps/gsp/SYWZPZJHB.vue";
  39. import MJYLQSQD from "./comps/gsp/MJYLQSQD.vue";
  40. export default {
  41. name: "TemplateTable",
  42. components: {
  43. SubPackageDialog,TagPrintDialog,SelectReagentDialog,SelectInstrumentDialog,SelectMixReagentDialog,
  44. //供试品
  45. MJYLQSQD, SYWZPZJHB,
  46. //色谱
  47. SWYPFXRYPZB, Demo, SWYPFXCBYPZB, SWYPBQGZYZBB, SWYPNBGZYZBB,ZQDYJMD,QXWDX,CBYHGZYWDX,Recovery,RXJZXY,JZXY,XZXHTYX,ZDYBS,XSKKX,CBYDB,SWYPFXFFXZKPZB
  48. },
  49. props: {
  50. sn: {
  51. type: String,
  52. default: '',
  53. },
  54. fillType: {
  55. type: String,
  56. default: 'preFill',
  57. },
  58. templateData: {
  59. type: Object,
  60. default: () => { },
  61. },
  62. emitName: {
  63. type: String,
  64. default: 'onModifyRecord',
  65. },
  66. },
  67. computed: {
  68. templateComponentMap() {
  69. if (!this.componentMap) {
  70. this.componentMap = {
  71. //色谱
  72. 'SP001': 'SWYPFXRYPZB',
  73. 'SP002': 'SWYPFXCBYPZB',
  74. 'SP003': 'SWYPBQGZYZBB',
  75. 'SP004': 'SWYPNBGZYZBB',
  76. 'SP005': 'SWYPNBGZYZBB',
  77. 'SP006': 'SWYPNBGZYZBB',
  78. 'SP008': 'ZQDYJMD',
  79. 'SP009': 'Recovery',
  80. 'SP010': 'QXWDX',
  81. 'SP011': 'CBYHGZYWDX',
  82. 'SP012': 'RXJZXY',
  83. 'SP013': 'JZXY',
  84. 'SP014': 'XZXHTYX',
  85. 'SP015': 'ZDYBS',
  86. 'SP016': 'XSKKX',
  87. 'SP017': 'CBYDB',
  88. 'SP018': 'SWYPFXFFXZKPZB',
  89. //供试品
  90. 'SYWZPZJHB': 'SYWZPZJHB',
  91. 'MJYLQSQD': 'MJYLQSQD',
  92. }
  93. }
  94. return this.componentMap || "Demo"
  95. }
  96. },
  97. watch: {
  98. sn: {
  99. immediate: true,
  100. handler(v) {
  101. console.log(v, "sn")
  102. }
  103. },
  104. templateData: {
  105. immediate: true,
  106. deep: true,
  107. handler(v) {
  108. if (v) {
  109. if (v.zdxgjl) {
  110. this.zdxgjl = JSON.parse(v.zdxgjl) || [];
  111. }
  112. if (v.fhyjjl) {
  113. this.fhyjjl = JSON.parse(v.fhyjjl) || [];
  114. }
  115. if (v.zdgxjl) {
  116. this.fieldCheckObj = JSON.parse(v.zdgxjl) || {};
  117. }
  118. }
  119. }
  120. }
  121. },
  122. provide() {
  123. return {
  124. //分发给子组件的fillType
  125. templateData: this.templateData,
  126. templateFillType: this.fillType,
  127. getZdxgjl: () => this.zdxgjl ,
  128. getFhyjjl: () => this.fhyjjl,
  129. getFieldCheckObj: () => this.fieldCheckObj,
  130. //更新提交记录
  131. updateZdxgjl: (data) => {
  132. this.zdxgjl.unshift(data);
  133. },
  134. //更新复核意见记录
  135. updateFhyjjl: (data) => {
  136. this.fhyjjl.unshift(data);
  137. },
  138. //替换复核意见记录
  139. replaceFhyjjl: (data) => {
  140. this.fhyjjl = data;
  141. },
  142. //更新字段检查对象
  143. updateFieldCheckObj: (data) => {
  144. this.fieldCheckObj = { ...this.fieldCheckObj, ...data };
  145. },
  146. }
  147. },
  148. data() {
  149. return {
  150. info: {},
  151. zdxgjl: [],
  152. fhyjjl: [],
  153. fieldCheckObj: {},
  154. };
  155. },
  156. mounted() {
  157. EventBus.$on('onModifyRecord', (data) => {
  158. this.$emit(this.emitName, data)
  159. });
  160. //分装弹窗
  161. EventBus.$on("showSubPackageDialog",(data)=>{
  162. this.$refs.subPackageDialogRef.show(data)
  163. })
  164. //标签打印弹窗
  165. EventBus.$on("showTagPrintDialog",(data)=>{
  166. this.$refs.tagPrintDialogRef.show(data)
  167. })
  168. //选择仪器弹窗
  169. EventBus.$on("showSelectInstrumentDialog",(data)=>{
  170. this.$refs.selectInstrumentDialogRef.show(data.studyFormId,data)
  171. })
  172. //选择试剂弹窗
  173. EventBus.$on("showSelectReagentDialog",(data)=>{
  174. this.$refs.selectReagentDialogRef.show(data.studyFormId,data)
  175. })
  176. //选择试剂/供试品/给药制剂弹窗
  177. EventBus.$on("showSelectMixReagentDialog",(data)=>{
  178. this.$refs.selectMixReagentDialogRef.show(data.studyFormId,data)
  179. })
  180. },
  181. beforeDestroy() {
  182. // 记得移除监听,避免内存泄漏
  183. EventBus.$off('onModifyRecord');
  184. EventBus.$off("showSubPackageDialog");
  185. EventBus.$off("showTagPrintDialog");
  186. EventBus.$off("showSelectReagentDialog");
  187. EventBus.$off("showSelectInstrumentDialog");
  188. EventBus.$off("showSelectMixReagentDialog");
  189. },
  190. methods: {
  191. async getFormData() {
  192. if(this.fillType === "actFill"){
  193. //检查是否有未填写的复核意见
  194. const flag = this.fhyjjl.every((item)=>!!item.content && !!item.reply)
  195. console.log(this.fhyjjl,flag,"flag")
  196. if(!flag){
  197. this.$message.error("疑问项还未回复,请回复后再提交");
  198. return;
  199. }
  200. }
  201. return await this.$refs.templateComponent.getFormData();
  202. },
  203. getResource() {
  204. return this.$refs.templateComponent.getResource();
  205. },
  206. getFilledFormData() {
  207. return this.$refs.templateComponent.getFilledFormData();
  208. },
  209. getTemplateComponent() {
  210. return this.templateComponentMap[this.sn]
  211. },
  212. }
  213. };
  214. </script>
  215. <style rel="stylesheet/scss" lang="scss">
  216. .template-table {
  217. background: #fff;
  218. padding: 10px 10px;
  219. width: 100%;
  220. }
  221. </style>