| | |
| | | import { useVbenForm } from '#/adapter/form'; |
| | | import { |
| | | createStockTaking, |
| | | finishStockTaking, |
| | | getStockTaking, |
| | | submitStockTaking, |
| | | updateStockTaking, |
| | |
| | | const isEditable = computed(() => |
| | | ['create', 'update'].includes(formType.value), |
| | | ); |
| | | const isExecute = computed(() => formType.value === 'execute'); // 是否执行盘点模式 |
| | | const isSubmit = computed(() => formType.value === 'submit'); // 是否提交模式 |
| | | const canSubmit = computed( |
| | | () => |
| | | formType.value === 'update' && |
| | | formData.value?.status === MesWmStockTakingTaskStatusEnum.PREPARE, |
| | | const isSubmit = computed(() => formType.value === 'submit'); // 是否开始盘点模式 |
| | | const isResultEditable = computed( |
| | | // 盘点中(审批中)可维护盘点结果 |
| | | () => formData.value?.status === MesWmStockTakingTaskStatusEnum.APPROVING, |
| | | ); |
| | | const showLineTab = computed(() => !formData.value?.blindFlag); // 盲盘不展示盘点清单 |
| | | const showResultTab = computed( |
| | | () => |
| | | isExecute.value || |
| | | (!!formData.value?.status && |
| | | formData.value.status !== MesWmStockTakingTaskStatusEnum.PREPARE), |
| | | !!formData.value?.status && |
| | | formData.value.status !== MesWmStockTakingTaskStatusEnum.PREPARE, |
| | | ); |
| | | const getTitle = computed(() => { |
| | | if (formType.value === 'detail') { |
| | | return $t('ui.actionTitle.view', ['盘点任务']); |
| | | } |
| | | if (formType.value === 'execute') { |
| | | return '执行盘点'; |
| | | } |
| | | if (formType.value === 'submit') { |
| | | return '提交盘点任务'; |
| | | return '开始盘点'; |
| | | } |
| | | return formType.value === 'update' |
| | | ? $t('ui.actionTitle.edit', ['盘点任务']) |
| | |
| | | wrapperClass: 'grid-cols-3', |
| | | }); |
| | | |
| | | /** 提交盘点任务:表单有修改时先保存,再调用提交接口 */ |
| | | /** 开始盘点:表单有修改时先保存,再提交 */ |
| | | async function handleSubmit() { |
| | | const { valid } = await formApi.validate(); |
| | | if (!valid || !formData.value?.id) { |
| | |
| | | originalSnapshot.value = current; |
| | | } |
| | | await submitStockTaking(formData.value.id); |
| | | message.success('提交成功'); |
| | | await modalApi.close(); |
| | | emit('success'); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | | } |
| | | |
| | | /** 执行盘点 */ |
| | | async function handleExecute() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | await finishStockTaking(formData.value.id); |
| | | message.success('执行盘点成功'); |
| | | message.success('开始盘点成功'); |
| | | await modalApi.close(); |
| | | emit('success'); |
| | | } finally { |
| | |
| | | // 加载数据 |
| | | const data = modalApi.getData<{ formType: FormType; id?: number }>(); |
| | | formType.value = data.formType; |
| | | subTabsName.value = data.formType === 'execute' ? 'results' : 'lines'; |
| | | subTabsName.value = 'lines'; |
| | | formApi.setState({ schema: useFormSchema(formType.value, formApi) }); |
| | | formApi.setDisabled(!isEditable.value); |
| | | modalApi.setState({ showConfirmButton: isEditable.value }); |
| | |
| | | </Tabs.TabPane> |
| | | <Tabs.TabPane v-if="showResultTab" key="results" tab="盘点结果"> |
| | | <ResultList |
| | | :form-type="isExecute ? 'execute' : 'detail'" |
| | | :form-type="isResultEditable ? 'execute' : 'detail'" |
| | | :task-id="formData.id" |
| | | /> |
| | | </Tabs.TabPane> |
| | |
| | | <template #prepend-footer> |
| | | <div class="flex flex-auto items-center gap-2"> |
| | | <Popconfirm |
| | | v-if="canSubmit || isSubmit" |
| | | title="确认提交该盘点任务?【提交后将不能修改】" |
| | | v-if="isSubmit" |
| | | title="确认开始盘点?开始后将冻结库存并可录入/导入实盘数。" |
| | | @confirm="handleSubmit" |
| | | > |
| | | <Button type="primary">提交</Button> |
| | | </Popconfirm> |
| | | <Popconfirm |
| | | v-if="isExecute" |
| | | title="确认执行盘点操作?" |
| | | @confirm="handleExecute" |
| | | > |
| | | <Button type="primary">执行盘点</Button> |
| | | <Button type="primary">开始盘点</Button> |
| | | </Popconfirm> |
| | | </div> |
| | | </template> |