| | |
| | | |
| | | import { computed, ref } from "vue"; |
| | | |
| | | import { useVbenModal } from "@vben/common-ui"; |
| | | import { confirm, useVbenModal } from "@vben/common-ui"; |
| | | import { |
| | | BarcodeBizTypeEnum, |
| | | MesProWorkOrderStatusEnum, |
| | | } from "@vben/constants"; |
| | | |
| | | import { Button, message, Popconfirm, Tabs } from "ant-design-vue"; |
| | | import { Button, message, Tabs } from "ant-design-vue"; |
| | | |
| | | import { useVbenForm } from "#/adapter/form"; |
| | | import { |
| | |
| | | wrapperClass: "grid-cols-3", |
| | | }); |
| | | |
| | | /** 重新挂载 schema 并按表单态控制底部确认按钮 */ |
| | | /** 重新挂载 schema 并按表单态控制底部按钮 */ |
| | | function applySchema() { |
| | | formApi.setState({ schema: useFormSchema(formType.value, formApi) }); |
| | | modalApi.setState({ showConfirmButton: isEditable.value }); |
| | | const showBtn = isEditable.value || isConfirm.value || isFinish.value; |
| | | modalApi.setState({ |
| | | showConfirmButton: showBtn, |
| | | confirmText: isConfirm.value || canConfirm.value |
| | | ? '确认' |
| | | : isFinish.value |
| | | ? '完成' |
| | | : undefined, |
| | | }); |
| | | } |
| | | |
| | | /** 查看订单条码 */ |
| | |
| | | formData.value.code, |
| | | formData.value.name |
| | | ); |
| | | } |
| | | |
| | | /** 确认订单:编辑态有修改时先保存,再确认 */ |
| | | async function handleConfirm() { |
| | | const { valid } = await formApi.validate(); |
| | | if (!valid || !formData.value?.id) { |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | if (isEditable.value) { |
| | | const current = JSON.stringify(await formApi.getValues()); |
| | | if (current !== originalSnapshot.value) { |
| | | const data = |
| | | (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder; |
| | | await updateWorkOrder({ ...formData.value, ...data }); |
| | | originalSnapshot.value = current; |
| | | } |
| | | } |
| | | await confirmWorkOrder(formData.value.id); |
| | | message.success("订单已确认"); |
| | | await modalApi.close(); |
| | | emit("success"); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | } |
| | | |
| | | /** 完成订单 */ |
| | | async function handleFinish() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | await finishWorkOrder(formData.value.id); |
| | | message.success("订单已完成"); |
| | | await modalApi.close(); |
| | | emit("success"); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | } |
| | | |
| | | /** 从 BOM 物料行预填子订单:复用当前订单上下文,进入新增态 */ |
| | |
| | | |
| | | const [Modal, modalApi] = useVbenModal({ |
| | | async onConfirm() { |
| | | // ---- 确认订单模式 ---- |
| | | if (isConfirm.value || canConfirm.value) { |
| | | const { valid } = await formApi.validate(); |
| | | if (!valid || !formData.value?.id) return; |
| | | try { |
| | | await confirm('确认要完成订单编制吗?确认后将不能更改。'); |
| | | } catch { |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | // 编辑态有修改时先保存 |
| | | if (isEditable.value) { |
| | | const current = JSON.stringify(await formApi.getValues()); |
| | | if (current !== originalSnapshot.value) { |
| | | const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder; |
| | | await updateWorkOrder({ ...formData.value, ...data }); |
| | | originalSnapshot.value = current; |
| | | } |
| | | } |
| | | await confirmWorkOrder(formData.value.id); |
| | | message.success('订单已确认'); |
| | | await modalApi.close(); |
| | | emit('success'); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | return; |
| | | } |
| | | // ---- 完成订单模式 ---- |
| | | if (isFinish.value) { |
| | | if (!formData.value?.id) return; |
| | | try { |
| | | await confirm('确认要完成该订单吗?'); |
| | | } catch { |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | await finishWorkOrder(formData.value.id); |
| | | message.success('订单已完成'); |
| | | await modalApi.close(); |
| | | emit('success'); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | return; |
| | | } |
| | | // ---- 保存(新增 / 编辑)---- |
| | | if (!isEditable.value) { |
| | | await modalApi.close(); |
| | | return; |
| | | } |
| | | const { valid } = await formApi.validate(); |
| | | if (!valid) { |
| | | return; |
| | | } |
| | | if (!valid) return; |
| | | modalApi.lock(); |
| | | // 提交表单 |
| | | const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder; |
| | | try { |
| | | if (formData.value?.id) { |
| | |
| | | status: MesProWorkOrderStatusEnum.PREPARE, |
| | | }; |
| | | formType.value = "update"; |
| | | // 创建成功后切换编辑态,重挂 schema 让「订单状态」字段显现 |
| | | applySchema(); |
| | | await formApi.setValues(formData.value); |
| | | } |
| | |
| | | </Tabs> |
| | | </template> |
| | | <template #prepend-footer> |
| | | <div class="flex flex-auto items-center gap-2"> |
| | | <Popconfirm v-if="canConfirm || isConfirm" |
| | | title="确认要完成订单编制吗?确认后将不能更改。" |
| | | @confirm="handleConfirm"> |
| | | <Button type="primary">确认</Button> |
| | | </Popconfirm> |
| | | <Popconfirm v-if="isFinish" |
| | | title="确认要完成该订单吗?" |
| | | @confirm="handleFinish"> |
| | | <Button type="primary">完成</Button> |
| | | </Popconfirm> |
| | | <Button v-if="formType === 'detail' && formData?.id" |
| | | @click="handleBarcode"> |
| | | 查看条码 |
| | | </Button> |
| | | </div> |
| | | <Button v-if="formType === 'detail' && formData?.id" |
| | | @click="handleBarcode"> |
| | | 查看条码 |
| | | </Button> |
| | | </template> |
| | | </Modal> |
| | | <BarcodeDetail ref="barcodeDetailRef" /> |