gaoluyang
3 天以前 7a5c5250b66cc6faffbcac9e192073473c50f79f
src/views/mes/pd/project/detail/index.vue
@@ -13,8 +13,8 @@
import {
  archivePdProject,
  auditPdProject,
  getPdProject,
  getPdProjectApproveProcessList,
  publishPdProject,
  uploadPdProject,
} from '#/api/mes/pd/project';
@@ -25,6 +25,7 @@
import Form from '../modules/form.vue';
import DocumentAuditList from '../modules/document-audit-list.vue';
import DocumentList from '../modules/document-list.vue';
import ProcessSelectModal from '../modules/process-select-modal.vue';
import WorkflowTimeline from '../modules/workflow-timeline.vue';
import TaskDraftBanner from '../modules/task-draft-banner.vue';
import { useDetailSchema } from './data';
@@ -50,6 +51,9 @@
const isPendingArchive = computed(
  () => project.value.status === MesPdProjectStatusEnum.PENDING_ARCHIVE,
);
const isApproving = computed(
  () => project.value.status === MesPdProjectStatusEnum.APPROVING,
);
const isArchived = computed(
  () => project.value.status === MesPdProjectStatusEnum.ARCHIVED,
);
@@ -73,11 +77,19 @@
  destroyOnClose: true,
});
const [ProcessModal, processModalApi] = useVbenModal({
  connectedComponent: ProcessSelectModal,
  destroyOnClose: true,
});
async function loadProjectDetail() {
  loading.value = true;
  try {
    project.value = await getPdProject(projectId.value);
    if (isPendingUpload.value) {
    if (route.query.tab === 'audit') {
      // 从列表页「审核文件」按钮进入,直接定位到资料审核 Tab
      activeTab.value = 'audit';
    } else if (isPendingUpload.value) {
      activeTab.value = 'material';
    } else if (isPendingAudit.value) {
      activeTab.value = 'audit';
@@ -89,7 +101,7 @@
function handleBack() {
  tabs.closeCurrentTab();
  router.push({ path: '/mes/pd/project' });
  router.back();
}
function handleEdit() {
@@ -119,16 +131,38 @@
  }
}
async function handleAudit() {
  const hideLoading = message.loading({ content: '审核中…', duration: 0 });
/** 提交审批 - 先获取流程列表 */
async function handleSubmit() {
  const hideLoading = message.loading({ content: '获取审批流程...', duration: 0 });
  try {
    await auditPdProject(projectId.value);
    message.success('审核通过,进入待归档状态');
    tabs.closeCurrentTab();
    router.back();
  } finally {
    const processList = await getPdProjectApproveProcessList();
    hideLoading();
    if (!processList || processList.length === 0) {
      message.warning('暂无可用审批流程,请先配置 BPM 流程');
      return;
    }
    // 打开流程选择弹窗
    processModalApi.setData({ id: projectId.value, processList }).open();
  } catch {
    hideLoading();
  }
}
/** 查看审批详情 */
function handleProcessDetail() {
  if (!project.value.processInstanceId) {
    message.warning('该项目尚未提交审批');
    return;
  }
  router.push({
    name: 'BpmProcessInstanceDetail',
    query: { id: project.value.processInstanceId },
  });
}
/** 提交审批成功后刷新详情 */
function handleSubmitSuccess() {
  loadProjectDetail();
}
async function handleArchive() {
@@ -155,6 +189,7 @@
    :title="project.taskName || '设计任务详情'"
  >
    <FormModal @success="loadProjectDetail" />
    <ProcessModal @success="handleSubmitSuccess" />
    <template #extra>
      <TableAction
@@ -185,10 +220,16 @@
            onClick: handleUpload,
          },
          {
            label: '审核通过',
            label: '提交审批',
            type: 'primary',
            ifShow: isPendingAudit,
            onClick: handleAudit,
            onClick: handleSubmit,
          },
          {
            label: '查看审批',
            type: 'primary',
            ifShow: isApproving,
            onClick: handleProcessDetail,
          },
          {
            label: '归档',