ui: domain_role: allow select multi

This commit is contained in:
undefined committed 2026-04-10 01:32:34 +08:00
1 parent 1bded00d53
commit 940a499115
2 files changed
+14 -7

No files matched your search

@@ -123,6 +123,7 @@ export interface Field {
default?: string; default?: string;
columns?: number; columns?: number;
rows?: number; rows?: number;
multi?: boolean;
} }
type Result<T extends string, R extends Record<T, Field>> = { type Result<T extends string, R extends Record<T, Field>> = {
@@ -211,11 +212,18 @@ export async function prompt<T extends string, R extends Record<T, Field>>(title
/>)} />)}
{['userId', 'username', 'user'].includes(field.type) && <UserSelectAutoComplete {['userId', 'username', 'user'].includes(field.type) && <UserSelectAutoComplete
data-autofocus={field.autofocus} data-autofocus={field.autofocus}
multi={field.multi}
ref={(el) => { refs.current[name] = el; }} ref={(el) => { 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) => { onChange={(e) => {
const val = refs.current[name].getSelectedItems()[0]; if (e === selected[name]) return;
setValues({ ...values, [name]: field.type === 'username' ? val?.uname : field.type === 'userId' ? val?._id : val }); 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 }); setSelected({ ...selected, [name]: e });
}} }}
/>} />}
@@ -28,15 +28,14 @@ const page = new NamedPage('domain_user', () => {
type: 'userId', type: 'userId',
required: true, required: true,
autofocus: true, autofocus: true,
multi: true,
label: i18n('Username / UID'), label: i18n('Username / UID'),
columns: 6,
}, },
role: { role: {
type: 'text', type: 'text',
required: true, required: true,
label: 'Role', label: 'Role',
options: UiContext.roles.filter((i) => !['default', 'guest'].includes(i)), options: UiContext.roles.filter((i) => !['default', 'guest'].includes(i)),
columns: -6,
}, },
...((UiContext.canForceJoin && UiContext.domain._id !== 'system') ? { ...((UiContext.canForceJoin && UiContext.domain._id !== 'system') ? {
join: { 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 { try {
await request.post('', { await request.post('', {
operation: 'set_users', operation: 'set_users',
uids: [res.user], uids: res.user,
role: res.role, role: res.role,
join: res.join, join: res.join,
}); });