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