From 38cf0ef6248ccb46999c388c023fcf741516f17f Mon Sep 17 00:00:00 2001 From: smail Date: Sat, 26 Sep 2026 13:02:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=89=80=E5=B1=9E=E5=88=86?= =?UTF-8?q?=E7=BB=84=E5=BC=B9=E7=AA=97=E6=96=B0=E5=BB=BA=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/UserManagement/AccountGroups.js | 16 +++++++++++++++- .../components/UserManagement/UserManagement.css | 15 +++++++++++++++ .../components/UserManagement/UserManagement.vue | 14 ++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/components/UserManagement/AccountGroups.js b/frontend/src/views/components/UserManagement/AccountGroups.js index 1c4aa65d..ef40dfc6 100644 --- a/frontend/src/views/components/UserManagement/AccountGroups.js +++ b/frontend/src/views/components/UserManagement/AccountGroups.js @@ -106,6 +106,7 @@ export function useAccountGroups(globalStatus, onMembershipSaved = () => {}) { if (response?.errorNo !== 0) throw new Error(response?.errorMsg || '保存分组失败') ElMessage.success('账号分组已保存') await refreshGroups() + return response.data || null } catch (error) { if (error !== 'cancel' && error !== 'close' && !isRecentAuthenticationCancelled(error)) ElMessage.error(error?.message || '保存分组失败') } finally { @@ -113,6 +114,19 @@ export function useAccountGroups(globalStatus, onMembershipSaved = () => {}) { } } + const createMembershipGroup = async () => { + if (!membershipVisible.value || !canManageGroups.value || groupSaving.value) return + const group = await saveGroup() + if (!group?.id) return + if (membershipLimit.value === 1) { + membershipSelection.value = [group.id] + return + } + const selectedGroups = membershipSelection.value.filter(id => id !== 0) + if (!selectedGroups.includes(group.id)) selectedGroups.push(group.id) + membershipSelection.value = selectedGroups + } + const editMembership = (user, options = {}) => { if (!canManageGroups.value || groupSaving.value) return membershipUser.value = { ...user, Role: options.role || user.Role } @@ -163,6 +177,6 @@ export function useAccountGroups(globalStatus, onMembershipSaved = () => {}) { accountGroups, groupsLoading, groupsError, canManageGroups, groupSaving, membershipVisible, membershipUser, membershipSelection, membershipLimit, membershipDraft, membershipSingleSelection, - refreshGroups, loadGroup, toggleGroup, saveGroup, editMembership, saveMembership + refreshGroups, loadGroup, toggleGroup, saveGroup, createMembershipGroup, editMembership, saveMembership } } diff --git a/frontend/src/views/components/UserManagement/UserManagement.css b/frontend/src/views/components/UserManagement/UserManagement.css index 904beb41..8ded6c5f 100644 --- a/frontend/src/views/components/UserManagement/UserManagement.css +++ b/frontend/src/views/components/UserManagement/UserManagement.css @@ -224,6 +224,21 @@ background: var(--pm-bg-secondary); } +.membership-selector-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-bottom: 8px; + color: var(--pm-text-secondary); + font-size: 12px; +} + +.membership-selector-header :deep(.el-button) { + flex: 0 0 auto; + margin: 0; +} + .membership-option { display: flex; align-items: center; diff --git a/frontend/src/views/components/UserManagement/UserManagement.vue b/frontend/src/views/components/UserManagement/UserManagement.vue index 4452fc62..9673386e 100644 --- a/frontend/src/views/components/UserManagement/UserManagement.vue +++ b/frontend/src/views/components/UserManagement/UserManagement.vue @@ -121,6 +121,19 @@

账号:{{ membershipUser?.Account }}

+
+ {{ membershipLimit > 1 ? '可选择多个分组' : '只能选择一个分组' }} + + 新建分组 + +