From b725cca0ff60728be04ef2ddb4cde5fcdf80bf8e Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 14 九月 2026 16:15:24 +0800
Subject: [PATCH] feat(bpm): 流程模型列表新增「免审批」开关与全局总开关

---
 src/views/bpm/model/modules/category-draggable-model.vue |   67 ++++++++++++++++++++++++++++++---
 1 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/src/views/bpm/model/modules/category-draggable-model.vue b/src/views/bpm/model/modules/category-draggable-model.vue
index caf91b6..4950b9c 100644
--- a/src/views/bpm/model/modules/category-draggable-model.vue
+++ b/src/views/bpm/model/modules/category-draggable-model.vue
@@ -5,12 +5,12 @@
 import { computed, ref, watchEffect } from 'vue';
 import { useRouter } from 'vue-router';
 
-import { useAccess } from '..\..\..\..\packages\effects\access\src';
-import { confirm, EllipsisText, useVbenModal } from '..\..\..\..\packages\effects\common-ui\src';
-import { BpmModelFormType } from '..\..\..\..\packages\constants\src';
-import { IconifyIcon } from '..\..\..\..\packages\icons\src';
-import { useUserStore } from '..\..\..\..\packages\stores\src';
-import { cloneDeep, formatDateTime, isEqual } from '..\..\..\..\packages\utils\src';
+import { useAccess } from '@vben/access';
+import { confirm, EllipsisText, useVbenModal } from '@vben/common-ui';
+import { BpmModelFormType } from '@vben/constants';
+import { IconifyIcon } from '@vben/icons';
+import { useUserStore } from '@vben/stores';
+import { cloneDeep, formatDateTime, isEqual } from '@vben/utils';
 
 import { useDebounceFn } from '@vueuse/core';
 import { useSortable } from '@vueuse/integrations/useSortable';
@@ -21,11 +21,13 @@
   Dropdown,
   Menu,
   message,
+  Switch,
   Tag,
   Tooltip,
 } from 'ant-design-vue';
 
 import { useVbenVxeGrid } from '#/adapter/vxe-table';
+import { updateAutoApproveByKey } from '#/api/bpm/autoApprove';
 import { deleteCategory } from '#/api/bpm/category';
 import {
   cleanModel,
@@ -64,6 +66,7 @@
 const isModelSorting = ref(false);
 const originalData = ref<BpmModelApi.Model[]>([]);
 const modelList = ref<BpmModelApi.Model[]>([]);
+const autoApproveLoadingId = ref<null | number>(null); // 鍏嶅鎵瑰紑鍏筹細姝e湪鎻愪氦鐨勬ā鍨嬬紪鍙�
 // TODO @jason锛氬彲浠ュ叏閮ㄥ睍寮�涔堬紵 @鑺嬭壙 涓婃璁ㄨ銆傚ソ鍍忔槸鍥犱负鎬ц兘闂鎵嶅彧灞曞紑绗竴涓垎绫�
 const isExpand = ref(props.isFirst); // 鏍规嵁鏄惁涓虹涓�涓垎绫�, 鏉ヨ缃垵濮嬪睍寮�鐘舵��
 
@@ -81,6 +84,10 @@
 });
 const hasPermiDeploy = computed(() => {
   return hasAccessByCodes(['bpm:model:deploy']);
+});
+/** 鍏嶅鎵瑰紑鍏崇殑鏉冮檺锛氭棤鏉冮檺鏃跺紑鍏崇疆鐏帮紝閬垮厤鐐逛簡鎵嶆姤閿� */
+const hasPermiAutoApprove = computed(() => {
+  return hasAccessByCodes(['bpm:process-auto-approve:update']);
 });
 
 const [Grid, gridApi] = useVbenVxeGrid({
@@ -287,6 +294,32 @@
   message.success(`鍙戝竷[${row.name}]娴佺▼鎴愬姛`);
   // 鍒锋柊鍒楄〃
   emit('success');
+}
+
+/** 鍒囨崲鍏嶅鎵瑰紑鍏筹細寮�鍚悗璇ユ祦绋嬫彁浜ゆ椂涓嶅啀杩涘叆浜哄伐瀹℃壒锛岀敱绯荤粺鑷姩閫氳繃 */
+async function handleAutoApproveChange(checked: boolean, row: any) {
+  const oldValue = row.autoApprove;
+  // 涔愯鏇存柊锛岄伩鍏嶇瓑寰呮帴鍙f湡闂村紑鍏崇姸鎬佸洖璺�
+  row.autoApprove = checked;
+  gridApi.setGridOptions({ data: modelList.value });
+  autoApproveLoadingId.value = row.id;
+  try {
+    await updateAutoApproveByKey(row.key, checked);
+    message.success(
+      checked
+        ? `宸插紑鍚痆${row.name}]鍏嶅鎵癸細璇ユ祦绋嬫彁浜ゅ悗灏嗙敱绯荤粺鑷姩閫氳繃`
+        : `宸插叧闂璠${row.name}]鍏嶅鎵癸細鎭㈠涓烘甯镐汉宸ュ鎵筦,
+    );
+    // 閲嶆柊鎷夊彇鍒楄〃锛屼繚璇佸墠绔姸鎬佷笌鍚庣涓�鑷�
+    emit('success');
+  } catch (error) {
+    // 澶辫触鍥炴粴
+    row.autoApprove = oldValue;
+    gridApi.setGridOptions({ data: modelList.value });
+    console.error('璁剧疆鍏嶅鎵瑰紑鍏冲け璐�', error);
+  } finally {
+    autoApproveLoadingId.value = null;
+  }
 }
 
 /** '鏇村'鎿嶄綔鎸夐挳 */
@@ -661,6 +694,28 @@
                 </Tag>
               </div>
             </template>
+            <template #autoApprove="{ row }">
+              <div class="flex items-center gap-1">
+                <Switch
+                  :checked="row.autoApprove"
+                  :loading="autoApproveLoadingId === row.id"
+                  :disabled="!hasPermiAutoApprove"
+                  size="small"
+                  @change="
+                    (checked: any) => handleAutoApproveChange(checked, row)
+                  "
+                />
+                <Tooltip
+                  v-if="!row.processDefinition"
+                  title="娴佺▼灏氭湭鍙戝竷锛屽厤瀹℃壒寮�鍏充笉浼氱敓鏁堬紝璇峰厛鍙戝竷娴佺▼"
+                >
+                  <IconifyIcon
+                    icon="lucide:alert-circle"
+                    class="text-base text-orange-400"
+                  />
+                </Tooltip>
+              </div>
+            </template>
             <template #actions="{ row }">
               <div class="flex items-center space-x-0">
                 <Button

--
Gitblit v1.9.3