• 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)
    zichun authored
     
    Browse Dir »
  • Per docs/04 production stack: Vite + React 18 + TypeScript + AntD 5 +
    Redux Toolkit + React Router v6 + Axios. Theme tokens copied from
    prototype/XLY-ERP.html so density, colors, and layout match. Pages:
    Login, Home, UserList, UserDetail, ModuleConfig — wired to existing
    endpoints (/api/usr/auth/login, /api/usr/users, /api/mod/modules).
    Backend-unsupported fields (user permission grid, 18 module fields,
    iStaffId picker) hidden per scope. Sidebar/MegaNav remain static
    reference data; dashboard stats hardcoded (no endpoint).
    zichun authored
     
    Browse Code »