华西海圻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.

183 lines
5.0 KiB

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