InitiativeProcessInstance.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <Dialog
  3. v-model="dialogVisible"
  4. title="修改申请"
  5. width="800"
  6. ref="initiativeFormRef"
  7. v-loading="formLoading">
  8. <!-- 编辑表单 -->
  9. <div v-if="formType !== 'view'">
  10. <div style="margin-bottom: 20px;color: red;font-size: 20px">
  11. 申请驳回原因:{{outboundData.processInstanceId}}
  12. </div>
  13. <div v-if="someType !== 'view'">
  14. <el-form
  15. ref="initiativeFormRef"
  16. :model="outboundData"
  17. :rules="formRules"
  18. label-width="140px"
  19. v-loading="formLoading"
  20. v-if="outboundData"
  21. >
  22. <div style="margin-bottom: 20px;margin-left: 70px;font-size: 18px; font-weight: bold">请重新申请</div>
  23. <!-- 点击添加的时候扩展一栏,即formData.specimenNumber的长度+1-->
  24. <el-button type="primary"
  25. style="float: right"
  26. @click="removeSpecimenNumber">-</el-button>
  27. <el-button type="primary"
  28. style="float: right"
  29. @click="addSpecimenNumber">+</el-button>
  30. <el-form-item label="标本编号" prop="number" label-width="150px">
  31. <el-input v-model="outboundData.number[0]" placeholder="请输入标本编号" label-width="150px"/>
  32. </el-form-item>
  33. <el-form-item
  34. v-for="(item, index) in outboundData.number.slice(1)"
  35. :key="index"
  36. :label="`标本编号 ${index + 2}`"
  37. prop="number"
  38. label-width="150px"
  39. >
  40. <el-input v-model="outboundData.number[index + 1]" placeholder="请输入标本编号" />
  41. </el-form-item>
  42. <el-form-item label="申请人或申请单位" prop="applicantName" label-width="150px">
  43. <el-input v-model="outboundData.applicantName" placeholder="请输入申请人或申请单位" label-width="150px"/>
  44. </el-form-item>
  45. <el-form-item label="申请日期" prop="applicationDate" label-width="150px">
  46. <el-date-picker
  47. v-model="outboundData.applicationDate"
  48. type="date"
  49. value-format="x"
  50. placeholder="选择申请日期"
  51. />
  52. </el-form-item>
  53. <el-form-item label="申请出库的用途" prop="applicationUsage" label-width="150px">
  54. <el-input v-model="outboundData.applicationUsage" placeholder="请输入申请出库的用途" label-width="150px"/>
  55. </el-form-item>
  56. <el-form-item label="附件上传" prop="attachments" label-width="150px">
  57. <UploadImg v-model="outboundData.attachments" />
  58. </el-form-item>
  59. <el-form-item label="预计领取日期" prop="outgoingTime" label-width="150px">
  60. <el-date-picker
  61. v-model="outboundData.expectedCollectionTime"
  62. type="date"
  63. value-format="x"
  64. placeholder="选择领取日期"
  65. />
  66. </el-form-item>
  67. <el-form-item label="退还日期" prop="returnDate" label-width="150px">
  68. <el-date-picker
  69. v-model="outboundData.returnDate"
  70. type="date"
  71. value-format="x"
  72. placeholder="选择退还日期"
  73. label-width="150px"
  74. />
  75. </el-form-item>
  76. </el-form>
  77. </div>
  78. </div>
  79. <template #footer>
  80. <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
  81. <el-button @click="dialogVisible = false">取 消</el-button>
  82. </template>
  83. </Dialog>
  84. </template>
  85. <script setup lang="ts">
  86. import {ref, reactive, onMounted} from "vue";
  87. import {SpecimenOutboundApi, SpecimenOutboundVO} from '@/api/museums/specimenoutbound'
  88. // import {useRoute} from 'vue-router';
  89. import { useI18n } from 'vue-i18n';
  90. defineOptions({name: 'InitiativeProcessInstance'})
  91. const formLoading = ref(false) // 表单的加载中
  92. const dialogVisible = ref(false) // 弹窗的是否展示
  93. const formType = ref('')
  94. // const {query} = useRoute() // 查询参数
  95. const someType = ref('')
  96. // 国际化和消息提示
  97. const { t } = useI18n();
  98. const message = useMessage();
  99. const formRef = ref() // 表单 Ref
  100. const initiativeFormRef = ref() // 表单 Ref
  101. const outboundData = ref({
  102. id: undefined,
  103. infoId: undefined,
  104. chineseName: [],
  105. number: [''],
  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. expectedCollectionTime:undefined,
  121. })
  122. const formRules = reactive({
  123. infoId: [{ required: true, message: '关联到总表中的标本ID不能为空', trigger: 'blur' }],
  124. chineseName: [{ required: true, message: '中文名称不能为空', trigger: 'blur' }],
  125. number: [{ required: true, message: '申请出库的标本编号不能为空', trigger: 'blur' }],
  126. applicantName: [{ required: true, message: '申请人或申请单位不能为空', trigger: 'blur' }],
  127. applicationUsage: [{ required: true, message: '申请出库的用途不能为空', trigger: 'blur' }],
  128. returnDate: [{ required: true, message: '退还日期不能为空', trigger: 'blur' }],
  129. expectedCollectionTime: [{ required: true, message: '预计领取日期不能为空', trigger: 'blur' }]
  130. })
  131. /**增减标本编号**/
  132. const addSpecimenNumber = () => {
  133. outboundData.value.number.push(''); // 向数组中添加一个新的空字符串
  134. };
  135. const removeSpecimenNumber = () => {
  136. if (outboundData.value.number.length > 0) { // 确保至少保留一个输入框
  137. outboundData.value.number.pop(); // 从数组中移除最后一个元素
  138. }
  139. };
  140. /** 打开弹窗 */
  141. // let formData= ref(null)
  142. const open = async (type: string, id?: number) => {
  143. dialogVisible.value = true
  144. formType.value = type
  145. resetForm();
  146. if (id) {
  147. formLoading.value = true
  148. try {
  149. if (type === 'view' || type === 'someType') {
  150. let res = await SpecimenOutboundApi.getSpecimenOutbound(id);
  151. // console.log(res)
  152. outboundData.value = res
  153. }
  154. } finally {
  155. formLoading.value = false
  156. }
  157. }
  158. }
  159. defineExpose({open}) // 提供 open 方法,用于打开弹窗
  160. /** 提交表单 */
  161. const emit = defineEmits(['success'])
  162. const submitForm = async () => {
  163. // 校验表单
  164. await formRef.value.validate()
  165. // 提交请求
  166. formLoading.value = true;
  167. try {
  168. const data = outboundData.value as unknown as SpecimenOutboundVO
  169. console.log(data)
  170. if (formType.value === 'someType') {
  171. await SpecimenOutboundApi.alterSpecimenOutbound(data);
  172. message.success(t('修改出库申请成功'));
  173. }
  174. dialogVisible.value = false;
  175. emit('success')
  176. } finally {
  177. formLoading.value = false;
  178. }
  179. };
  180. /** 标本搜索选择 */
  181. // 重置表单的方法
  182. const resetForm = () => {
  183. outboundData.value = {
  184. id: undefined,
  185. infoId: undefined,
  186. chineseName: undefined,
  187. number: undefined,
  188. applicantName: undefined,
  189. applicationDate: undefined,
  190. applicationUsage: undefined,
  191. attachments: undefined,
  192. status: undefined,
  193. remarks: undefined,
  194. processInstanceId: undefined,
  195. operator: undefined,
  196. outgoingTime: undefined,
  197. returner: undefined,
  198. receiver: undefined,
  199. returnDate: undefined,
  200. specimenCondition: undefined,
  201. sampleStatus: undefined
  202. }
  203. initiativeFormRef.value?.resetFields();
  204. }///
  205. // const handleClose = (index: number) => {
  206. // outboundData.specimenNumber.value.splice(index, 1); // 删除指定索引的标签
  207. // };
  208. //
  209. // const handleInputEnter = () => {
  210. // if (specimenNumber.value.trim() !== '') {
  211. // outboundData.specimenNumber.value.push(specimenNumber.value); // 添加新的标本编号
  212. // specimenNumber.value = ''; // 清空输入框
  213. // }
  214. // };
  215. // // 在组件加载时获取数据
  216. onMounted(async () => {
  217. console.log(1)
  218. // await fetchData()
  219. await submitForm()
  220. })
  221. </script>