gaoluyang
2 天以前 b64a0deae5b5d33f9e20671a68936b27f0b9b00b
src/views/mes/workbench/components/tabs/FeedbackTab.vue
@@ -10,7 +10,7 @@
} from '@vben/constants';
import { useUserStore } from '@vben/stores';
import { Button, message, Popconfirm } from 'ant-design-vue';
import { Button, message, Modal, Popconfirm } from 'ant-design-vue';
import { useVbenForm } from '#/adapter/form';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
@@ -18,6 +18,7 @@
  approveFeedback,
  createFeedback,
  getFeedback,
  getFeedbackPage,
  rejectFeedback,
  submitFeedback,
  updateFeedback,
@@ -140,6 +141,7 @@
  if (!valid) return;
  const data = await getAlignedData();
  const code = data.code as string;
  if (formType.value === 'create') {
    const id = await createFeedback(data);
@@ -148,12 +150,73 @@
    formType.value = 'update';
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
    await formApi.setFieldValue('id', id);
    message.success($t('common.createSuccess'));
  } else {
    await updateFeedback(data);
    message.success($t('common.updateSuccess'));
  }
  originalSnapshot.value = JSON.stringify(data);
  // 显示显眼的成功提示
  Modal.success({
    title: '保存成功',
    content: `报工单 ${code} 已保存`,
    centered: true,
  });
  // 重置表单为新建模式,重新生成报订单号
  if (props.task) {
    await resetForTask(props.task);
  }
  emit('reported');
}
/** 保存并提交(先保存,再查询并提交) */
async function handleSaveAndSubmit() {
  const { valid } = await formApi.validate();
  if (!valid) return;
  const data = await getAlignedData();
  const code = data.code as string;
  // 1. 先保存
  if (formType.value === 'create') {
    const id = await createFeedback(data);
    feedbackId.value = id;
    feedbackStatus.value = MesProFeedbackStatusEnum.PREPARE;
    formType.value = 'update';
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
    await formApi.setFieldValue('id', id);
  } else {
    await updateFeedback(data);
  }
  originalSnapshot.value = JSON.stringify(data);
  // 2. 查询报工记录,匹配该报工单号
  const pageResult = await getFeedbackPage({ code, pageNo: 1, pageSize: 1 });
  const record = pageResult.list?.[0];
  // 3. 检查是否可提交(草稿状态)
  if (!record || record.status !== MesProFeedbackStatusEnum.PREPARE) {
    message.warning('保存成功,但当前报工单状态不可提交');
    emit('reported');
    return;
  }
  // 4. 调用提交接口
  await submitFeedback(record.id!);
  feedbackId.value = record.id;
  feedbackStatus.value = record.status;
  // 显示显眼的成功提示
  Modal.success({
    title: '保存并提交成功',
    content: `报工单 ${code} 已提交`,
    centered: true,
  });
  // 重置表单为新建模式,重新生成报订单号
  if (props.task) {
    await resetForTask(props.task);
  }
  emit('reported');
}
@@ -252,6 +315,13 @@
        >
          保存
        </Button>
        <Button
          v-if="isEditable"
          type="primary"
          @click="handleSaveAndSubmit"
        >
          保存并提交
        </Button>
        <Popconfirm
          v-if="canSubmit"
          title="确认提交该报订单?提交后将不能修改。"