SpecimenOutboundForm.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <template>
  2. <Dialog :title="dialogTitle" v-model="dialogVisible">
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. label-width="140px"
  8. v-loading="formLoading"
  9. >
  10. <el-form-item label="标本ID" prop="infoId">
  11. <el-input v-model="formData.infoId" placeholder="请输入标本ID" />
  12. </el-form-item>
  13. <el-form-item label="中文名称" prop="chineseName">
  14. <el-input v-model="formData.chineseName" placeholder="请输入中文名称" />
  15. </el-form-item>
  16. <el-form-item label="标本编号" prop="specimenNumber">
  17. <el-input v-model="formData.specimenNumber" placeholder="请输入标本编号" />
  18. </el-form-item>
  19. <el-form-item label="申请人或申请单位" prop="applicantName">
  20. <el-input v-model="formData.applicantName" placeholder="请输入申请人或申请单位" />
  21. </el-form-item>
  22. <el-form-item label="申请日期" prop="applicationDate">
  23. <el-date-picker
  24. v-model="formData.applicationDate"
  25. type="date"
  26. value-format="x"
  27. placeholder="选择申请日期"
  28. />
  29. </el-form-item>
  30. <el-form-item label="申请出库的用途" prop="applicationUsage">
  31. <el-input v-model="formData.applicationUsage" placeholder="请输入申请出库的用途" />
  32. </el-form-item>
  33. <el-form-item label="附件上传" prop="attachments">
  34. <el-upload v-model="formData.attachments" placeholder="请输入附件上传" >
  35. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  36. <div class="el-upload__text"> 将文件拖到此处,或 <em>点击上传</em></div>
  37. </el-upload>
  38. </el-form-item>
  39. <!-- <el-form-item label="审批状态" prop="status">-->
  40. <!-- <el-select v-model="formData.status" placeholder="请选择审批状态">-->
  41. <!-- <el-option label="请选择字典生成" value="" />-->
  42. <!-- </el-select>-->
  43. <!-- </el-form-item>-->
  44. <!-- <el-form-item label="备注信息" prop="remarks">-->
  45. <!-- <el-input v-model="formData.remarks" placeholder="请输入备注信息" />-->
  46. <!-- </el-form-item>-->
  47. <!-- <el-form-item label="流程实例的编号" prop="processInstanceId">-->
  48. <!-- <el-input v-model="formData.processInstanceId" placeholder="请输入流程实例的编号" />-->
  49. <!-- </el-form-item>-->
  50. <!-- <el-form-item label="出库员" prop="operator">-->
  51. <!-- <el-input v-model="formData.operator" placeholder="请输入出库员" />-->
  52. <!-- </el-form-item>-->
  53. <!-- <el-form-item label="出库时间" prop="outgoingTime">-->
  54. <!-- <el-date-picker-->
  55. <!-- v-model="formData.outgoingTime"-->
  56. <!-- type="date"-->
  57. <!-- value-format="x"-->
  58. <!-- placeholder="选择出库时间"-->
  59. <!-- />-->
  60. <!-- </el-form-item>-->
  61. <!-- <el-form-item label="退还人" prop="returner">-->
  62. <!-- <el-input v-model="formData.returner" placeholder="请输入退还人" />-->
  63. <!-- </el-form-item>-->
  64. <!-- <el-form-item label="点收人" prop="receiver">-->
  65. <!-- <el-input v-model="formData.receiver" placeholder="请输入点收人" />-->
  66. <!-- </el-form-item>-->
  67. <el-form-item label="退还日期" prop="returnDate">
  68. <el-date-picker
  69. v-model="formData.returnDate"
  70. type="date"
  71. value-format="x"
  72. placeholder="选择退还日期"
  73. />
  74. </el-form-item>
  75. <!-- <el-form-item label="标本情况" prop="specimenCondition">-->
  76. <!-- <el-input v-model="formData.specimenCondition" placeholder="请输入标本情况" />-->
  77. <!-- </el-form-item>-->
  78. <!-- <el-form-item label="标本状态(已出库、已回库、出库审批中)" prop="sampleStatus">-->
  79. <!-- <el-select v-model="formData.sampleStatus" placeholder="请选择标本状态(已出库、已回库、出库审批中)">-->
  80. <!-- <el-option label="请选择字典生成" value="" />-->
  81. <!-- </el-select>-->
  82. <!-- </el-form-item>-->
  83. </el-form>
  84. <template #footer>
  85. <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
  86. <el-button @click="dialogVisible = false">取 消</el-button>
  87. </template>
  88. </Dialog>
  89. </template>
  90. <script setup lang="ts">
  91. import { SpecimenOutboundApi, SpecimenOutboundVO } from '@/api/museums/specimenoutbound'
  92. import { UploadFilled } from '@element-plus/icons-vue'
  93. /** 标本出库回库信息 表单 */
  94. defineOptions({ name: 'SpecimenOutboundForm' })
  95. const { t } = useI18n() // 国际化
  96. const message = useMessage() // 消息弹窗
  97. const dialogVisible = ref(false) // 弹窗的是否展示
  98. const dialogTitle = ref('') // 弹窗的标题
  99. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  100. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  101. const formData = ref({
  102. id: undefined,
  103. infoId: undefined,
  104. chineseName: undefined,
  105. specimenNumber: undefined,
  106. applicantName: undefined,
  107. applicationDate: undefined,
  108. applicationUsage: undefined,
  109. attachments: undefined,
  110. status: undefined,
  111. remarks: undefined,
  112. processInstanceId: undefined,
  113. operator: undefined,
  114. outgoingTime: undefined,
  115. returner: undefined,
  116. receiver: undefined,
  117. returnDate: undefined,
  118. specimenCondition: undefined,
  119. sampleStatus: undefined
  120. })
  121. const formRules = reactive({
  122. infoId: [{ required: true, message: '关联到总表中的标本ID不能为空', trigger: 'blur' }],
  123. chineseName: [{ required: true, message: '中文名称不能为空', trigger: 'blur' }],
  124. specimenNumber: [{ required: true, message: '申请出库的标本编号不能为空', trigger: 'blur' }],
  125. applicantName: [{ required: true, message: '申请人或申请单位不能为空', trigger: 'blur' }],
  126. applicationUsage: [{ required: true, message: '申请出库的用途不能为空', trigger: 'blur' }],
  127. operator: [{ required: true, message: '出库员不能为空', trigger: 'blur' }],
  128. returner: [{ required: true, message: '退还人不能为空', trigger: 'blur' }],
  129. receiver: [{ required: true, message: '点收人不能为空', trigger: 'blur' }],
  130. returnDate: [{ required: true, message: '退还日期不能为空', trigger: 'blur' }]
  131. })
  132. const formRef = ref() // 表单 Ref
  133. /** 打开弹窗 */
  134. const open = async (type: string, id?: number) => {
  135. dialogVisible.value = true
  136. dialogTitle.value = t('action.' + type)
  137. formType.value = type
  138. resetForm()
  139. // 修改时,设置数据
  140. if (id) {
  141. formLoading.value = true
  142. try {
  143. formData.value = await SpecimenOutboundApi.getSpecimenOutbound(id)
  144. } finally {
  145. formLoading.value = false
  146. }
  147. }
  148. }
  149. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  150. /** 提交表单 */
  151. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  152. const submitForm = async () => {
  153. // 校验表单
  154. await formRef.value.validate()
  155. // 提交请求
  156. formLoading.value = true
  157. try {
  158. const data = formData.value as unknown as SpecimenOutboundVO
  159. if (formType.value === 'create') {
  160. await SpecimenOutboundApi.createSpecimenOutbound(data)
  161. message.success(t('common.createSuccess'))
  162. } else {
  163. await SpecimenOutboundApi.updateSpecimenOutbound(data)
  164. message.success(t('common.updateSuccess'))
  165. }
  166. dialogVisible.value = false
  167. // 发送操作成功的事件
  168. emit('success')
  169. } finally {
  170. formLoading.value = false
  171. }
  172. }
  173. /** 重置表单 */
  174. const resetForm = () => {
  175. formData.value = {
  176. id: undefined,
  177. infoId: undefined,
  178. chineseName: undefined,
  179. specimenNumber: undefined,
  180. applicantName: undefined,
  181. applicationDate: undefined,
  182. applicationUsage: undefined,
  183. attachments: undefined,
  184. status: undefined,
  185. remarks: undefined,
  186. processInstanceId: undefined,
  187. operator: undefined,
  188. outgoingTime: undefined,
  189. returner: undefined,
  190. receiver: undefined,
  191. returnDate: undefined,
  192. specimenCondition: undefined,
  193. sampleStatus: undefined
  194. }
  195. formRef.value?.resetFields()
  196. }
  197. </script>