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

145 lines
5.7 KiB

  1. <template>
  2. <div>
  3. <div v-for="(item, index) in formConfig" :key="index" class="step-form-package">
  4. <div v-for="(sItem, key) in item.config" class="step-item" :key="key">
  5. <template v-if="sItem.type === 'input'">
  6. <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" @blur="onBlur(key, $event)"
  7. :item="sItem" v-model="formFields[key]" :field-key="prefixKey + '_' + key"
  8. @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
  9. :orange-bg="orangeBgFields[key]" />
  10. </template>
  11. <template v-else-if="sItem.type === 'inputNumber'">
  12. <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  13. type="inputNumber" @blur="onBlur(key, $event)" :item="sItem"
  14. @input="onInputNumberChange(key, $event)" v-model="formFields[key]" @copy="onCopy(sItem, key)"
  15. :error="errors[key]" @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" />
  16. </template>
  17. <template v-else-if="sItem.type === 'select'">
  18. <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  19. type="select" @blur="onBlur(key, $event)" :item="sItem" v-model="formFields[key]"
  20. @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
  21. :orange-bg="orangeBgFields[key]" />
  22. </template>
  23. <!-- 仪器 -->
  24. <template v-else-if="sItem.type === 'instrument'">
  25. <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  26. type="clickable" @clickable="handleClickInstrument(key,'instrument')" :error="errors[key]"
  27. @update:error="errors[key] = false" @resetRecord="resetRecord(key)" :item="getClickableItem(sItem)"
  28. :value="formFields[key]" />
  29. </template>
  30. <!-- 仪器 -->
  31. <template v-else-if="sItem.type === 'regent'">
  32. <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  33. type="clickable" @clickable="handleClickInstrument(key,'regent')" :error="errors[key]"
  34. @update:error="errors[key] = false" @resetRecord="resetRecord(key)" :item="getClickableItem(sItem)"
  35. :value="formFields[key]" />
  36. </template>
  37. <template v-else-if="sItem.type === 'text'">
  38. <span>{{ sItem.label }}</span>
  39. </template>
  40. <template v-else-if="sItem.type === 'span'">
  41. <span>{{ formFields[key] }}</span>
  42. </template>
  43. </div>
  44. </div>
  45. </div>
  46. </template>
  47. <script>
  48. import HandleFormItem from '@/components/Template/HandleFormItem.vue'
  49. import formPackageMixins from '@/components/Template/mixins/formPackageMixins.js'
  50. import { isShowOther } from "@/utils/formPackageCommon.js";
  51. import { EventBus } from "@/utils/eventBus";
  52. import { getuuid } from "@/utils/index.js";
  53. export default {
  54. inject: ['templateFillType','templateData'],
  55. components: {
  56. HandleFormItem,
  57. },
  58. mixins: [formPackageMixins],
  59. props: {
  60. formConfig: {
  61. type: Array,
  62. default: []
  63. },
  64. formData: {
  65. type: Object,
  66. value: () => ({})
  67. },
  68. //主要标识当前表单属于哪个模块,用于传给后端
  69. fieldItemLabel: {
  70. type: String,
  71. default: "",
  72. },
  73. prefixKey: {
  74. type: String,
  75. default: ""
  76. }
  77. },
  78. mounted() {
  79. EventBus.$on("onReagentSubmit",this.onReagentSubmit)
  80. },
  81. unmounted() {
  82. EventBus.$off("onReagentSubmit",this.onReagentSubmit)
  83. },
  84. data() {
  85. return {
  86. formFields: {},//表单绑定字段
  87. allFieldsConfig: {},//包含config的所有字段,主要用于校验表单是否填写
  88. errors: {},//存储表单错误信息,用于标红提示
  89. orangeBgFields: {},// 存储需要橙色背景的字段
  90. isShowOther,
  91. currentClickKey: "",//当前点击的字段key
  92. uuid:getuuid(),
  93. }
  94. },
  95. methods: {
  96. // 处理选择试剂提交
  97. onReagentSubmit(data){
  98. if(data.uuid !== this.uuid) return;
  99. this.formFields[this.currentClickKey] = data.selectedId;
  100. },
  101. getClickableItem(sItem) {
  102. return {
  103. ...sItem,
  104. type:"clickable"
  105. }
  106. },
  107. handleClickInstrument(key,type) {
  108. this.currentClickKey = key;
  109. if(type === 'regent'){
  110. EventBus.$emit("showSelectReagentDialog",{
  111. studyFormId:this.templateData.id,
  112. uuid:this.uuid,
  113. })
  114. }else if(type === 'instrument'){
  115. EventBus.$emit("showSelectInstrumentDialog",{
  116. studyFormId:this.templateData.id,
  117. uuid:this.uuid,
  118. })
  119. }
  120. },
  121. onSelectReagentSubmit(reagent){
  122. this.formFields[this.currentClickKey] = reagent
  123. },
  124. }
  125. }
  126. </script>
  127. <style lang="scss" scoped>
  128. .step-form-package {
  129. display: flex;
  130. align-items: center;
  131. font-size: 14px;
  132. }
  133. .step-row {
  134. min-width: 180px;
  135. }
  136. .step-item {
  137. display: flex;
  138. align-items: center;
  139. margin-left: 5px;
  140. }
  141. </style>