From 5837ef4a400fe7852ce44a0cef51da797a1d6cad Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@local>
Date: 星期五, 06 十一月 2026 10:29:03 +0800
Subject: [PATCH] fix(bpm): 流程管理员补写当前操作人,避免换账号后无法修改模型

---
 src/views/bpm/model/form/modules/basic-info.vue |   80 ++++++++++++++++++++++++++++++----------
 1 files changed, 60 insertions(+), 20 deletions(-)

diff --git a/src/views/bpm/model/form/modules/basic-info.vue b/src/views/bpm/model/form/modules/basic-info.vue
index 691c654..3810aad 100644
--- a/src/views/bpm/model/form/modules/basic-info.vue
+++ b/src/views/bpm/model/form/modules/basic-info.vue
@@ -14,6 +14,7 @@
 import { DICT_TYPE } from '@vben/constants';
 import { getDictOptions } from '@vben/hooks';
 import { IconifyIcon } from '@vben/icons';
+import { useUserStore } from '@vben/stores';
 
 import {
   Avatar,
@@ -56,11 +57,13 @@
 
 const formRef = ref(); // 琛ㄥ崟寮曠敤
 const modelData = defineModel<any>(); // 鍒涘缓鏈湴鏁版嵁鍓湰
+const userStore = useUserStore(); // 褰撳墠鐧诲綍鐢ㄦ埛锛堝啓鍏ユ祦绋嬬鐞嗗憳锛岄伩鍏嶆崲璐﹀彿鍚庢棤娉曞啀淇敼妯″瀷锛�
 
 const selectedStartUsers = ref<SystemUserApi.User[]>([]); // 閫変腑鐨勫彂璧蜂汉
 const selectedStartDepts = ref<SystemDeptApi.Dept[]>([]); // 閫変腑鐨勫彂璧烽儴闂�
 
 const selectedManagerUsers = ref<SystemUserApi.User[]>([]); // 閫変腑鐨勬祦绋嬬鐞嗗憳
+const currentSelectType = ref<'manager' | 'start'>('start');
 const selectedUsers = ref<number[]>(); // 閫変腑鐨勭敤鎴�
 const rules: Record<string, Rule[]> = {
   name: [{ required: true, message: '娴佺▼鍚嶇О涓嶈兘涓虹┖', trigger: 'blur' }],
@@ -112,6 +115,28 @@
           newVal.managerUserIds.includes(user.id),
         ) as SystemUserApi.User[])
       : [];
+    // 娴佺▼绠$悊鍛樺浐瀹氫负瓒呯骇绠$悊鍛橈細杩涘叆椤甸潰鍗冲己鍒跺洖鍐欙紝淇敼鍦烘櫙鍚屾牱鐢熸晥銆�
+    // 娉ㄦ剰锛氬悓鏃舵妸銆屽綋鍓嶆搷浣滀汉銆嶄竴骞跺啓鍏ャ�傚洜涓哄悗绔� updateModel 鏄�屽厛鏍¢獙绠$悊鍛樸�佸悗鍐欏叆銆嶏紝
+    // 涓�鏃︽ā鍨嬭淇濆瓨鎴愬彧鍖呭惈瓒呯锛岀敤鍏朵粬璐﹀彿鍐嶆淇敼灏变細鎶�
+    // 銆屾搷浣滄祦绋嬪け璐ワ紝鍘熷洜锛氫綘涓嶆槸璇ユ祦绋�(xxx)鐨勭鐞嗗憳銆嶏紝涓旀棤娉曡嚜鎰堛��
+    const admin = props.userList.find(
+      (user: SystemUserApi.User) => user.username === 'admin',
+    );
+    const currentUserId = userStore.userInfo?.id;
+    const managerIds: number[] = [];
+    if (admin) {
+      managerIds.push(admin.id);
+    }
+    if (currentUserId && !managerIds.includes(currentUserId)) {
+      managerIds.push(currentUserId);
+    }
+    if (managerIds.length > 0) {
+      newVal.managerUserIds = managerIds;
+      // 鐣岄潰涓婁粛鐒跺彧灞曠ず銆岃秴绾х鐞嗗憳銆�
+      const displayUser =
+        admin ?? props.userList.find((user) => user.id === managerIds[0]);
+      selectedManagerUsers.value = displayUser ? [displayUser] : [];
+    }
   },
   {
     immediate: true,
@@ -120,6 +145,7 @@
 
 /** 鎵撳紑鍙戣捣浜洪�夋嫨 */
 function openStartUserSelect() {
+  currentSelectType.value = 'start';
   selectedUsers.value = selectedStartUsers.value.map(
     (user) => user.id,
   ) as number[];
@@ -139,12 +165,27 @@
   };
 }
 
-/** 澶勭悊鐢ㄦ埛閫夋嫨纭锛堝彂璧蜂汉锛� */
+/** 鎵撳紑绠$悊鍛橀�夋嫨 */
+function openManagerUserSelect() {
+  currentSelectType.value = 'manager';
+  selectedUsers.value = selectedManagerUsers.value.map(
+    (user) => user.id,
+  ) as number[];
+  userSelectModalApi.setData({ userIds: selectedUsers.value }).open();
+}
+
+/** 澶勭悊鐢ㄦ埛閫夋嫨纭 */
 function handleUserSelectConfirm(userList: SystemUserApi.User[]) {
-  modelData.value = {
-    ...modelData.value,
-    startUserIds: userList.map((u) => u.id),
-  };
+  modelData.value =
+    currentSelectType.value === 'start'
+      ? {
+          ...modelData.value,
+          startUserIds: userList.map((u) => u.id),
+        }
+      : {
+          ...modelData.value,
+          managerUserIds: userList.map((u) => u.id),
+        };
 }
 
 /** 鐢ㄦ埛閫夋嫨寮圭獥鍏抽棴 */
@@ -202,6 +243,16 @@
     ...modelData.value,
     startDeptIds: modelData.value.startDeptIds.filter(
       (id: number) => id !== dept.id,
+    ),
+  };
+}
+
+/** 绉婚櫎绠$悊鍛� */
+function handleRemoveManagerUser(user: SystemUserApi.User) {
+  modelData.value = {
+    ...modelData.value,
+    managerUserIds: modelData.value.managerUserIds.filter(
+      (id: number) => id !== user.id,
     ),
   };
 }
@@ -371,21 +422,10 @@
         </div>
       </Form.Item>
       <Form.Item label="娴佺▼绠$悊鍛�" name="managerUserIds">
-        <div class="flex flex-wrap gap-1">
-          <div
-            v-for="user in selectedManagerUsers"
-            :key="user.id"
-            class="relative flex h-9 items-center rounded-full bg-gray-100 pr-2 hover:bg-gray-200 dark:border dark:border-gray-500 dark:bg-gray-700 dark:hover:bg-gray-600"
-          >
-            <Avatar class="m-1 size-7" v-if="user.avatar" :src="user.avatar" />
-            <Avatar class="m-1 size-7" v-else>
-              {{ user.nickname?.substring(0, 1) }}
-            </Avatar>
-            <span class="text-gray-700 dark:text-gray-200">
-              {{ user.nickname }}
-            </span>
-          </div>
-        </div>
+        <!-- 娴佺▼绠$悊鍛樺浐瀹氫负瓒呯骇绠$悊鍛橈紝涓嶅厑璁搁�夋嫨 -->
+        <span class="text-gray-700 dark:text-gray-200">
+          {{ selectedManagerUsers[0]?.nickname || '瓒呯骇绠$悊鍛�' }}
+        </span>
       </Form.Item>
     </Form>
 

--
Gitblit v1.9.3