支持所属分组弹窗新建分组
Some checks are pending
Security Checks / security (push) Waiting to run

This commit is contained in:
smail 2026-09-26 13:02:21 +08:00
parent 1c41156c0d
commit 38cf0ef624
3 changed files with 44 additions and 1 deletions

View File

@ -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
}
}

View File

@ -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;

View File

@ -121,6 +121,19 @@
<p>账号:{{ membershipUser?.Account }}</p>
<el-form label-position="top">
<el-form-item label="所属分组">
<div class="membership-selector-header">
<span>{{ membershipLimit > 1 ? '可选择多个分组' : '只能选择一个分组' }}</span>
<el-button
v-if="canManageGroups"
type="primary"
text
size="small"
:disabled="groupSaving"
@click="createMembershipGroup"
>
新建分组
</el-button>
</div>
<fieldset
class="membership-options"
:aria-label="membershipLimit > 1 ? '所属分组(可多选)' : '所属分组(单选)'"
@ -358,6 +371,7 @@ const {
membershipLimit,
membershipDraft,
membershipSingleSelection,
createMembershipGroup,
loadGroup,
toggleGroup,
saveGroup,