From 7a5c5250b66cc6faffbcac9e192073473c50f79f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 28 八月 2026 17:02:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 src/views/mes/pd/project/detail/index.vue |   65 ++++++++++++++++++++++++++------
 1 files changed, 53 insertions(+), 12 deletions(-)

diff --git a/src/views/mes/pd/project/detail/index.vue b/src/views/mes/pd/project/detail/index.vue
index 36da5ce..4947fa0 100644
--- a/src/views/mes/pd/project/detail/index.vue
+++ b/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: '褰掓。',

--
Gitblit v1.9.3