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 ? '可选择多个分组' : '只能选择一个分组' }} + + 新建分组 + +