import { useEffect, useState } from 'react' import { Popup, Toast } from 'antd-mobile' // 人员选择 (T-AS-03/04): 只能从"当前项目成员"中选 export default function UserPicker({ visible, members = [], value, multiple = false, title = '选择负责人', allowEmpty = true, onClose, onConfirm, }) { const [sel, setSel] = useState(multiple ? [] : null) useEffect(() => { if (!visible) return setSel(multiple ? (value || []) : (value ?? null)) }, [visible, value, multiple]) const toggle = (uid) => { if (multiple) { setSel((prev) => { const arr = Array.isArray(prev) ? prev : [] return arr.includes(uid) ? arr.filter((x) => x !== uid) : [...arr, uid] }) } else { setSel((prev) => (prev === uid ? null : uid)) } } const confirm = () => { if (!multiple && sel === null && !allowEmpty) { Toast.show({ content: '请选择负责人' }) return } onConfirm?.(sel) onClose?.() } return (
{title}
仅可选择当前项目的成员
{members.length === 0 &&
项目暂无成员
} {members.map((m) => { const on = multiple ? (Array.isArray(sel) && sel.includes(m.userId)) : sel === m.userId return (
toggle(m.userId)}>
{(m.name || '?').slice(0, 1)}
{m.name}
) })} {allowEmpty && !multiple && (
setSel(null)}>
—
清除负责人
)}
确定
取消
) }