From a241b66efcc41e973290a6722fb7a4d79b833ea1 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 13 十月 2026 09:54:32 +0800
Subject: [PATCH] feat(bi): 为图表配置接口添加名称字段

---
 src/views/erp/purchase/request/index.vue |   82 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 74 insertions(+), 8 deletions(-)

diff --git a/src/views/erp/purchase/request/index.vue b/src/views/erp/purchase/request/index.vue
index f9d2d0e..a0a8a00 100644
--- a/src/views/erp/purchase/request/index.vue
+++ b/src/views/erp/purchase/request/index.vue
@@ -1,8 +1,10 @@
 <script lang="ts" setup>
+import { automaticApproval } from '#/store/audit-policy';
 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 import type { ErpPurchaseRequestApi } from '#/api/erp/purchase/request';
 
 import { ref } from 'vue';
+import { useRouter } from 'vue-router';
 
 import { confirm, Page, useVbenModal } from '@vben/common-ui';
 import { downloadFileFromBlobPart, isEmpty } from '@vben/utils';
@@ -16,19 +18,28 @@
   getApproveProcessList,
   getPurchaseRequestPage,
   submitPurchaseRequest,
+  syncPurchaseRequestStatus,
 } from '#/api/erp/purchase/request';
 import { $t } from '#/locales';
 
 import { useGridColumns, useGridFormSchema } from './data';
 import Form from './modules/form.vue';
+import ImportForm from './modules/import-form.vue';
 import OrderForm from './modules/order-form.vue';
 import ProcessSelectModal from './modules/process-select-modal.vue';
 
 /** ERP 閲囪喘鐢宠鍒楄〃 */
 defineOptions({ name: 'ErpPurchaseRequest' });
 
+const router = useRouter();
+
 const [FormModal, formModalApi] = useVbenModal({
   connectedComponent: Form,
+  destroyOnClose: true,
+});
+
+const [ImportModal, importModalApi] = useVbenModal({
+  connectedComponent: ImportForm,
   destroyOnClose: true,
 });
 
@@ -51,6 +62,11 @@
 async function handleExport() {
   const data = await exportPurchaseRequest(await gridApi.formApi.getValues());
   downloadFileFromBlobPart({ fileName: '閲囪喘鐢宠.xls', source: data });
+}
+
+/** 瀵煎叆閲囪喘鐢宠 */
+function handleImport() {
+  importModalApi.open();
 }
 
 /** 鏂板閲囪喘鐢宠 */
@@ -81,10 +97,17 @@
 /** 鎻愪氦瀹℃壒 - 鍏堣幏鍙栨祦绋嬪垪琛� */
 async function handleSubmit(row: ErpPurchaseRequestApi.PurchaseRequest) {
   const hideLoading = message.loading({
-    content: '鑾峰彇瀹℃壒娴佺▼...',
+    content: automaticApproval.value ? '姝e湪鎻愪氦鐢熸晥...' : '鑾峰彇瀹℃壒娴佺▼...',
     duration: 0,
   });
   try {
+    if (automaticApproval.value) {
+      await submitPurchaseRequest(row.id!, 'purchase_request_approve');
+      hideLoading();
+      message.success('宸叉彁浜ょ敓鏁�');
+      handleRefresh();
+      return;
+    }
     const processList = await getApproveProcessList(row.id!);
     hideLoading();
     if (!processList || processList.length === 0) {
@@ -92,6 +115,7 @@
       return;
     }
     // 鎵撳紑娴佺▼閫夋嫨寮圭獥
+
     processModalApi.setData({ id: row.id, processList }).open();
   } catch {
     hideLoading();
@@ -117,6 +141,20 @@
   formModalApi.setData({ formType: 'detail', id: row.id }).open();
 }
 
+/** 鏌ョ湅瀹℃壒璇︽儏 */
+function handleViewProcess(row: ErpPurchaseRequestApi.PurchaseRequest) {
+  if (!row.processInstanceId) {
+    message.warning('璇ョ敵璇峰皻鏈彁浜ゅ鎵�');
+    return;
+  }
+  router.push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } });
+}
+
+/** 鏌ョ湅閲囪喘璁㈠崟 */
+function handleViewOrder(row: ErpPurchaseRequestApi.PurchaseRequest) {
+  router.push({ name: 'ErpPurchaseOrder', query: { id: row.orderId } });
+}
+
 const [Grid, gridApi] = useVbenVxeGrid({
   formOptions: {
     schema: useGridFormSchema(),
@@ -128,11 +166,18 @@
     proxyConfig: {
       ajax: {
         query: async ({ page }, formValues) => {
-          return await getPurchaseRequestPage({
+          const result = await getPurchaseRequestPage({
             pageNo: page.currentPage,
             pageSize: page.pageSize,
             ...formValues,
           });
+          const processingItems = (result.list || []).filter(
+            (item) => item.status === 10 && item.processInstanceId,
+          );
+          if (processingItems.length > 0) {
+            await syncPurchaseRequestStatus(processingItems);
+          }
+          return result;
         },
       },
     },
@@ -155,6 +200,7 @@
 <template>
   <Page auto-content-height>
     <FormModal @success="handleRefresh" />
+    <ImportModal @success="handleRefresh" />
     <OrderFormModal @success="handleRefresh" />
     <ProcessModal @success="handleRefresh" />
     <Grid table-title="閲囪喘鐢宠鍒楄〃">
@@ -176,6 +222,13 @@
               onClick: handleExport,
             },
             {
+              label: '瀵煎叆',
+              type: 'primary',
+              icon: ACTION_ICON.UPLOAD,
+              auth: ['erp:purchase-request:import'],
+              onClick: handleImport,
+            },
+            {
               label: '鎵归噺鍒犻櫎',
               type: 'primary',
               danger: true,
@@ -193,13 +246,14 @@
       <template #status="{ row }">
         <Tag v-if="row.status === 0" color="default">鏈彁浜�</Tag>
         <Tag v-else-if="row.status === 10" color="processing">瀹℃壒涓�</Tag>
-        <Tag v-else-if="row.status === 20" color="success">瀹℃牳閫氳繃</Tag>
-        <Tag v-else-if="row.status === 30" color="error">瀹℃牳涓嶉�氳繃</Tag>
+        <Tag v-else-if="row.status === 20" color="success">瀹℃壒閫氳繃</Tag>
+        <Tag v-else-if="row.status === 30" color="error">瀹℃壒涓嶉�氳繃</Tag>
         <Tag v-else-if="row.status === 40" color="warning">宸插彇娑�</Tag>
       </template>
-      <template #qcCheckFlag="{ row }">
-        <Tag v-if="row.qcCheckFlag" color="success">鏄�</Tag>
-        <Tag v-else color="default">鍚�</Tag>
+      <template #inStatus="{ row }">
+        <Tag v-if="row.inStatus === 0" color="default">鏈叆搴�</Tag>
+        <Tag v-else-if="row.inStatus === 1" color="warning">閮ㄥ垎鍏ュ簱</Tag>
+        <Tag v-else-if="row.inStatus === 2" color="success">鍏ㄩ儴鍏ュ簱</Tag>
       </template>
       <template #actions="{ row }">
         <TableAction
@@ -216,7 +270,7 @@
               type: 'link',
               icon: ACTION_ICON.EDIT,
               auth: ['erp:purchase-request:update'],
-              ifShow: () => row.status === 0,
+              ifShow: () => row.status === 0 || Number(row.status) === 30,
               onClick: handleEdit.bind(null, row),
             },
             {
@@ -233,6 +287,18 @@
               onClick: handleGenerateOrder.bind(null, row),
             },
             {
+              label: '鏌ョ湅瀹℃壒',
+              type: 'link',
+              ifShow: () => row.status !== 0,
+              onClick: handleViewProcess.bind(null, row),
+            },
+            {
+              label: '鏌ョ湅璁㈠崟',
+              type: 'link',
+              ifShow: () => !!row.orderId,
+              onClick: handleViewOrder.bind(null, row),
+            },
+            {
               label: $t('common.delete'),
               type: 'link',
               danger: true,

--
Gitblit v1.9.3