From 940a4991159b410a7356f4ee1f74dcf12a7bcf5b Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 10 Apr 2026 01:32:34 +0800 Subject: [PATCH] ui: domain_role: allow select multi --- packages/ui-default/components/dialog/index.tsx | 14 +++++++++++--- packages/ui-default/pages/domain_user.page.js | 7 +++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/ui-default/components/dialog/index.tsx b/packages/ui-default/components/dialog/index.tsx index 527b6efbc..d07e81aac 100644 --- a/packages/ui-default/components/dialog/index.tsx +++ b/packages/ui-default/components/dialog/index.tsx @@ -123,6 +123,7 @@ export interface Field { default?: string; columns?: number; rows?: number; + multi?: boolean; } type Result> = { @@ -211,11 +212,18 @@ export async function prompt>(title />)} {['userId', 'username', 'user'].includes(field.type) && { refs.current[name] = el; }} - selectedKeys={selected[name] ? [selected[name].toString()] : []} + selectedKeys={selected[name] + ? (field.multi + ? String(selected[name]).split(',').filter(Boolean) + : [selected[name].toString()]) + : []} onChange={(e) => { - const val = refs.current[name].getSelectedItems()[0]; - setValues({ ...values, [name]: field.type === 'username' ? val?.uname : field.type === 'userId' ? val?._id : val }); + if (e === selected[name]) return; + const items = refs.current[name].getSelectedItems(); + const extract = (v) => (field.type === 'username' ? v?.uname : field.type === 'userId' ? v?._id : v); + setValues({ ...values, [name]: field.multi ? items.map(extract) : extract(items[0]) }); setSelected({ ...selected, [name]: e }); }} />} diff --git a/packages/ui-default/pages/domain_user.page.js b/packages/ui-default/pages/domain_user.page.js index ec0ba862f..4c6351ff7 100644 --- a/packages/ui-default/pages/domain_user.page.js +++ b/packages/ui-default/pages/domain_user.page.js @@ -28,15 +28,14 @@ const page = new NamedPage('domain_user', () => { type: 'userId', required: true, autofocus: true, + multi: true, label: i18n('Username / UID'), - columns: 6, }, role: { type: 'text', required: true, label: 'Role', options: UiContext.roles.filter((i) => !['default', 'guest'].includes(i)), - columns: -6, }, ...((UiContext.canForceJoin && UiContext.domain._id !== 'system') ? { join: { @@ -45,11 +44,11 @@ const page = new NamedPage('domain_user', () => { }, } : {}), }); - if (!res?.user || !res?.role) return; + if (!res?.user?.length || !res?.role) return; try { await request.post('', { operation: 'set_users', - uids: [res.user], + uids: res.user, role: res.role, join: res.join, });