feat: add employee workspace operations admin

This commit is contained in:
湛兮
2026-06-02 14:23:31 +08:00
parent 835b52709f
commit ab73565d37
10 changed files with 3523 additions and 147 deletions
+30 -8
View File
@@ -51,6 +51,8 @@ http://localhost:8848/
├── .husky/ # Git hooks,提交前执行 lint-staged,提交信息走 commitlint
├── .vscode/ # VS Code 推荐配置与 Vue 代码片段
├── build/ # Vite 插件、CDN、压缩、构建信息与工具函数
├── docs/ # 项目需求和后台扩展说明
│ └── C_APP_ADMIN_REQUIREMENTS.md # C 端正式版管理后台需求文档
├── public/ # 静态资源与运行时平台配置
├── src/ # 前端源码
│ ├── api/ # HTTP API 封装,业务接口集中在 access.ts
@@ -64,7 +66,7 @@ http://localhost:8848/
│ ├── store/ # Pinia store,含用户、权限、标签页、主题等模块
│ ├── style/ # 全局样式、主题、暗色模式、侧边栏和过渡样式
│ ├── utils/ # 鉴权、HTTP、缓存、消息、进度条、树处理等工具
│ └── views/ # 页面视图,当前业务页在 employees、roles、stores、permissions
│ └── views/ # 页面视图,当前业务页在 employees、roles、stores、permissions 和员工工作台运营模块
├── types/ # 全局类型声明、组件声明、路由声明和 Vue shim
├── AGENTS.md # Codex/Agent 入口规则,转到 RTK.md
├── RTK.md # 本仓库协作规则与 README 同步要求
@@ -100,12 +102,17 @@ http://localhost:8848/
- `src/views/stores/index.vue`: 门店管理,筛选、重置、启停、删除后都会重新调用接口,支持新增、编辑、详情员工列表和移除员工。
- `src/views/roles/index.vue`: 角色管理,搜索、重置、删除和保存后都会重新调用接口,支持角色编码校验。
- `src/views/employees/index.vue`: 员工管理,门店/状态/关键词筛选、重置、分页、启停、旧密码校验后改密、初始密码重置、删除和保存后都会重新调用接口,并展示员工状态标签。
- `src/views/employees/index.vue`: 员工管理,门店/状态/关键词筛选、重置、分页、启停、临时密码重置、删除和保存后都会重新调用接口,并展示员工状态标签;重置成功后只在弹窗内显示一次性临时密码
- `src/views/permissions/index.vue`: 权限策略,支持查看角色权限、按角色勾选权限点并保存到后端。
- `src/api/access.ts`: 门店、角色、员工、权限策略和角色权限分配接口类型与 HTTP 方法封装
- `src/views/announcements/index.vue`: 公告管理,支持状态/级别/关键词筛选、分页、新建、编辑、保存草稿、发布和归档
- `src/views/tasks/index.vue`: 任务管理,支持门店/员工/状态/优先级/关键词筛选、分页、新建、编辑、取消任务和流转记录展示。
- `src/views/shifts/index.vue`: 排班管理,支持门店/员工/日期范围筛选、分页、新增、编辑和取消排班,选择门店后刷新员工选项。
- `src/views/credential-audits/index.vue`: 凭据审计,展示操作者、目标员工、动作、时间、IP、User-Agent 和原因,支持操作者/目标员工/门店/时间筛选。
- `src/api/access.ts`: 门店、角色、员工、权限策略、员工工作台运营和角色权限分配接口类型与 HTTP 方法封装,并集中完成运营模块正式后端字段适配。
- `src/api/user.ts`: 登录、当前用户和当前权限菜单接口封装。
- `src/router/modules/employees.ts`: 权限管理菜单入口,挂载门店、角色、员工、权限策略四个页面。
- `src/router/modules/employees.ts`: 权限管理和员工工作台运营菜单入口,挂载门店、角色、员工、权限策略、公告、任务、排班和凭据审计页面。
- `src/store/modules/user.ts`: 保存 JWT 登录态、当前用户、权限码和后端菜单动作权限。
- `docs/C_APP_ADMIN_REQUIREMENTS.md`: C 端正式版管理后台需求文档,定义公告、任务、排班、密码重置和凭据审计等新增后台能力。
## 后端对接
@@ -137,10 +144,24 @@ http://localhost:8848/
- `PATCH /api/employees/:id`
- `PATCH /api/employees/:id/status`
- `PATCH /api/employees/:id/password`
- `PATCH /api/employees/:id/password/reset`
- `POST /api/admin/employees/:id/password/reset`,需要 `credential:reset`,请求体携带重置原因,响应只返回一次性临时密码
- `DELETE /api/employees/:id`
- `GET /api/admin/announcements`,公告管理列表会携带 `page``pageSize`,筛选时会把页面 `importance` 转为后端 `level`,并携带 `status``keyword`
- `POST /api/admin/announcements`,页面 `importance``targetScope` 和目标 ID 数组会转为后端 `level``targetType``targets`
- `PATCH /api/admin/announcements/:id`,使用同一套公告字段转换
- `POST /api/admin/announcements/:id/publish`
- `POST /api/admin/announcements/:id/archive`
- `GET /api/admin/tasks`,任务管理列表会携带 `page``pageSize`,筛选时会携带 `storeId``employeeId``status``priority``keyword`,并统一使用后端 `CANCELLED`
- `POST /api/admin/tasks`,页面 `deadlineAt` 会转为后端 `dueAt`,后端 `assignees` 会回填为页面 `assigneeIds``assigneeNames`
- `PATCH /api/admin/tasks/:id`,使用同一套任务字段转换
- `POST /api/admin/tasks/:id/cancel`
- `GET /api/admin/shifts`,排班管理列表会携带 `page``pageSize`,筛选时会携带 `storeId``employeeId``startDate``endDate`
- `POST /api/admin/shifts`,页面 `position` 会转为后端 `roleName`
- `PATCH /api/admin/shifts/:id`,使用同一套排班字段转换
- `DELETE /api/admin/shifts/:id`
- `GET /api/admin/credential-audits`,凭据审计列表会携带 `page``pageSize`,筛选时会携带 `operatorId``targetEmployeeId``storeId``startDate``endDate`,并把后端 `actorName``createdAt` 转为页面 `operatorName``operatedAt`
接口响应统一在 `src/api/access.ts` 中使用 `ApiResult<T>``PaginatedData<T>` 描述,页面层只消费 `result.data`,避免在视图里重复拼接接口路径。门店、角色、员工列表的搜索、重置、分页和状态变更后的刷新都应通过接口层完成,不直接依赖页面内存里的旧列表。员工对象会消费后端返回的 `statusTags`;所属门店停用时展示“门店被禁用”标签。
接口响应统一在 `src/api/access.ts` 中使用 `ApiResult<T>``PaginatedData<T>` 描述,页面层只消费 `result.data`,避免在视图里重复拼接接口路径。门店、角色、员工、公告、任务、排班和凭据审计列表的搜索、重置、分页和状态变更后的刷新都应通过接口层完成,不直接依赖页面内存里的旧列表。公告、任务、排班和凭据审计的后端正式字段统一在接口层转换,页面继续使用 `importance``targetScope``deadlineAt``assigneeIds``assigneeNames``position``operatorName``operatedAt` 等展示和表单字段。员工对象会消费后端返回的 `statusTags`;所属门店停用时展示“门店被禁用”标签。
## 登录与鉴权流程
@@ -148,8 +169,9 @@ http://localhost:8848/
2. 前端保存后端返回的 `data.token`,并按 `expiresIn` 换算本地过期时间。
3. 登录成功后立即调用 `GET /api/auth/me` 校验当前账号,再调用 `GET /api/permissions/me` 获取权限码、菜单和动作权限。
4. 路由守卫会在刷新页面后重新拉取当前用户和权限,未登录或 token 过期会跳回 `/login`
5. 菜单按路由 `meta.menuKey``meta.permission``/api/permissions/me` 返回的后端菜单过滤;按钮按后端菜单 `actions` 控制新增、编辑、启停删除显隐。
6. 后端当前没有 refresh-token 接口,收到 `401` 或本地 token 过期时直接清理登录态并要求重新登录
5. 菜单按路由 `meta.menuKey``meta.permission``/api/permissions/me` 返回的后端菜单过滤;按钮按后端菜单 `actions` 和对应权限码控制新增、编辑、启停删除、运营管理和凭据重置显隐。
6. 凭据安全不提供查看当前明文密码入口;后台只调用 `POST /api/admin/employees/:id/password/reset` 生成一次性临时密码,前端不写入本地存储、日志或 URL,弹窗关闭后立即清空
7. 后端当前没有 refresh-token 接口,收到 `401` 或本地 token 过期时直接清理登录态并要求重新登录。
## 配置说明