Backend:
- StaffSearchVO (iIncrement / sStaffNo / sStaffName / sDepartment)
- StaffMapper.searchActive(keyword, limit) — LIKE on name + staff no
- StaffController GET /api/usr/staffs?keyword=&limit=
- UserListVO + UserMapper.xml: expose iStaffId so edit mode preserves
the binding when user doesn't change 员工名
Frontend:
- api/staff.ts → searchStaff()
- StaffPicker.tsx: input + dropdown with debounced search, '已绑定'
badge when an iStaffId is bound, click outside to close, search icon
- UserDetail: replace 员工名 PrimInput with StaffPicker; track iStaffId
in form state; send to backend on save (no longer omitted)