gaoluyang
100 分钟以前 787ccc59ba89bacc075562a161ecf02bc76ebadc
src/views/wls/itemreceipt/modules/form.vue
@@ -17,7 +17,6 @@
  getItemReceipt,
  stockItemReceipt,
  submitItemReceipt,
  submitItemReceiptApproval,
  updateItemReceipt,
} from '#/api/mes/wm/itemreceipt';
import { $t } from '#/locales';
@@ -28,22 +27,14 @@
const emit = defineEmits(['success']);
const formType = ref<FormType>('create');
const formData = ref<MesWmItemReceiptApi.ItemReceipt>();
const originalSnapshot = ref(''); // 表单原始数据快照,用于提交时跳过未变更的保存请求
const originalSnapshot = ref('');
const isEditable = computed(() =>
  // 是否为编辑模式(可保存)
  ['create', 'update'].includes(formType.value),
);
const isStock = computed(() => formType.value === 'stock'); // 是否为上架模式
const isFinish = computed(() => formType.value === 'finish'); // 是否为执行入库模式
const isStock = computed(() => formType.value === 'stock');
const isFinish = computed(() => formType.value === 'finish');
const canSubmit = computed(
  () =>
    // 是否可提交
    formType.value === 'update' &&
    formData.value?.status === MesWmItemReceiptStatusEnum.PREPARE,
);
const canSubmitApproval = computed(
  () =>
    // 是否可提交审批
    formType.value === 'update' &&
    formData.value?.status === MesWmItemReceiptStatusEnum.PREPARE,
);
@@ -76,7 +67,7 @@
  wrapperClass: 'grid-cols-3',
});
/** 提交入库单:表单有修改时先保存,再调用提交接口 */
/** 提交入库单 */
async function handleSubmit() {
  const { valid } = await formApi.validate();
  if (!valid || !formData.value?.id) {
@@ -102,9 +93,7 @@
/** 执行上架 */
async function handleStock() {
  if (!formData.value?.id) {
    return;
  }
  if (!formData.value?.id) return;
  modalApi.lock();
  try {
    await stockItemReceipt(formData.value.id);
@@ -118,31 +107,11 @@
/** 执行入库 */
async function handleFinish() {
  if (!formData.value?.id) {
    return;
  }
  if (!formData.value?.id) return;
  modalApi.lock();
  try {
    await finishItemReceipt(formData.value.id);
    message.success('入库成功');
    await modalApi.close();
    emit('success');
  } finally {
    modalApi.unlock();
  }
}
/** 提交审批 */
async function handleSubmitApproval() {
  if (!formData.value?.id) {
    return;
  }
  modalApi.lock();
  try {
    // 使用默认流程key,实际项目中可能需要弹窗选择
    const processDefinitionKey = 'item_receipt_approval';
    await submitItemReceiptApproval(formData.value.id, processDefinitionKey);
    message.success('提交审批成功');
    await modalApi.close();
    emit('success');
  } finally {
@@ -157,27 +126,28 @@
      return;
    }
    const { valid } = await formApi.validate();
    if (!valid) {
      return;
    }
    if (!valid) return;
    modalApi.lock();
    // 提交表单
    const data = (await formApi.getValues()) as MesWmItemReceiptApi.ItemReceipt;
    try {
      if (formData.value?.id) {
        await updateItemReceipt({ ...formData.value, ...data });
        formData.value = { ...formData.value, ...data };
      } else {
        const id = await createItemReceipt(data);
        formData.value = {
          ...data,
          id,
          status: MesWmItemReceiptStatusEnum.PREPARE,
        };
        await formApi.setFieldValue('id', id);
        await formApi.setFieldValue('status', formData.value.status);
        formType.value = 'update';
        emit('success');
        message.success($t('ui.actionMessage.operationSuccess'));
        await modalApi.close();
        return;
      }
      // 新增:保持弹窗打开,切换到编辑模式
      const id = await createItemReceipt(data);
      formData.value = {
        ...data,
        id,
        status: MesWmItemReceiptStatusEnum.PREPARE,
      };
      await formApi.setFieldValue('id', id);
      await formApi.setFieldValue('status', formData.value.status);
      formType.value = 'update';
      originalSnapshot.value = JSON.stringify(await formApi.getValues());
      emit('success');
      message.success($t('ui.actionMessage.operationSuccess'));
@@ -191,7 +161,6 @@
      originalSnapshot.value = '';
      return;
    }
    // 加载数据
    const data = modalApi.getData<{ formType: FormType; id?: number }>();
    formType.value = data.formType;
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
@@ -201,7 +170,6 @@
      modalApi.lock();
      try {
        formData.value = await getItemReceipt(data.id);
        // 设置到 values
        await formApi.setValues(formData.value);
      } finally {
        modalApi.unlock();
@@ -235,7 +203,6 @@
<template>
  <Modal :title="getTitle" class="w-3/5">
    <Form class="mx-4" />
    <!-- 非新建模式展示物料信息 -->
    <template v-if="formData?.id">
      <Divider>物料信息</Divider>
      <div class="mx-4">
@@ -255,9 +222,6 @@
        >
          <Button type="primary">提交</Button>
        </Popconfirm>
        <Button v-if="canSubmitApproval" type="primary" @click="handleSubmitApproval">
          提交审批
        </Button>
        <Button v-if="isStock" type="primary" @click="confirmStock">
          执行上架
        </Button>