Files
railwaysystem/docs/codebase-audit/05_frontend_inventory.md
T

73 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 培训前端现状
## 1. 前端入口与路由机制
当前培训业务前端是 `build_ui/`:`package.json` 的 description 为“智慧培训管理平台”,`src/views/train` 和 `src/api/train` 均位于此处。
`build_ui/src/router/index.js` 没有静态培训菜单,只包含登录、首页、个人中心和若依少量隐藏动态路由。登录后,`build_ui/src/store/modules/permission.js` 调用 `build_ui/src/api/menu.js` 的 `GET /getRouters`,按后端 `sys_menu` 数据加载组件。
因此:
- 仓库代码可以确认“页面文件存在”。
- 仓库不能确认“当前数据库菜单存在且角色已授权”。
- `RuoYi-Vue/sql/ry_20250522.sql` 未发现任何 `train` 菜单/权限数据,精确菜单名称和路径只能通过实时 `sys_menu` 再核验。
## 2. 页面与 API 对照
表中的“菜单”表示该页面预期承载的功能名称,不表示已在实时 `sys_menu` 中确认。
| 菜单/功能 | 页面路径 | API | 当前完成度 | 备注 |
| --- | --- | --- | --- | --- |
| 教师信息 | `views/train/teacher/index.vue` | `api/train/teacher.js` → `/train/teacher` | CRUD页面存在,接通未证实 | 有列表/详情/增改删/导出;按钮用 `train:teacher:*`,后端用 `system:teacher:*` |
| 学员信息 | `views/train/student/index.vue` | `api/train/student.js` → `/train/student` | CRUD页面存在,接通未证实 | 同类权限不一致;无培训学员导入 |
| 课程信息 | `views/train/course/index.vue` | `api/train/course.js` → `/train/course` | CRUD页面存在,接通未证实 | 附件/资源仍为文本输入 |
| 开班计划 | `views/train/plan/index.vue` | `api/train/plan.js` → `/train/plan` | CRUD页面存在,接通未证实 | 不是课表或班级工作台 |
| 宿舍信息 | `views/train/dormitory/index.vue` | `api/train/dormitory.js` → `/train/dorminfo` | 部分存在 | 页面已修改、API未跟踪;无按钮权限与导出按钮 |
| 宿舍权限 | `views/train/auth/index.vue` | `api/train/auth.js` → `/train/auth` | CRUD页面存在,接通未证实 | 仅维护授权记录,不调用门锁系统 |
| 教室信息 | `views/train/classroom/index.vue` | 实际用 `api/train/info.js` → `/train/classroominfo` | CRUD页面存在,接通未证实 | `info.js`已修改;另有未跟踪`classroom.js`;别名未提交 |
| 实训场地 | `views/train/site/index.vue` | `api/train/site.js` → `/train/site` | CRUD页面存在,接通未证实 | 配套设备为文本字段 |
| 开班报到 | `views/train/report/index.vue` | `api/train/report.js` → `/train/report` | CRUD页面存在,接通未证实 | 表单手工录入,不是现场报到工作台 |
| 电子班牌 | `views/train/board/index.vue` | `api/train/board.js` → `/train/board` | CRUD页面存在,接通未证实 | 设备登记,不含心跳/内容发布/签到回调 |
| 学员签到 | `views/train/checkin/index.vue` | `api/train/checkin.js` → `/train/checkin` | CRUD页面存在,接通未证实 | 手工维护签到记录,无课次和设备流程 |
| 成绩信息 | `views/train/score/index.vue` | `api/train/score.js` → `/train/scoreinfo` | 部分存在 | 页面/API未跟踪;无权限指令与导出入口 |
| 学习时长 | `views/train/duration/index.vue` | `api/train/duration.js` → `/train/duration` | CRUD页面存在,接通未证实 | 是明细 CRUD,不是聚合统计工作台 |
| 学员画像 | `views/train/portrait/index.vue` | `api/train/portrait.js` → `/train/portrait` | CRUD页面存在,接通未证实 | 编辑指标/文本的表格,无画像计算和可视化 |
| 学员成绩档案 | `views/train/student-score/index.vue` | `api/train/score.js` 的列表 | 只读筛选页,未跟踪 | 按学号过滤同一 CRUD 列表,无专用统计接口 |
| 课程成绩总览 | `views/train/course-score/index.vue` | `api/train/score.js` 的列表 | 只读筛选页,未跟踪 | “综合评级”仅按 `examScore` 前端判断,不是三类成绩综合算法 |
| 自主学习设备 | `views/train/equipment/index.vue` | 无 | 占位页,未跟踪 | 文案宣称部分能力“已就绪”,代码没有相应设备接入 |
| 设备物联管理 | `views/train/extra/index.vue` | 无 | 占位页,未跟踪 | 仅 `el-result` 与跳转按钮 |
| 人物/人员页面 | `views/train/person/index.vue` | 使用旧角色/图谱相关逻辑 | 遗留页面 | 权限为 `train:role:*`,无对应当前培训 Controller |
| 图谱页面 | `views/train/character/graph.vue` | `api/train/character.js` | 遗留/未接通 | 当前后端未找到对应培训 Controller |
| 图表示例 | `views/train/character/charts.vue` | 旧接口/本地数据 | 演示性质 | 含 ECharts、随机数和历史地址,不能视为培训统计已实现 |
| 时间地点分析 | `views/train/analysis/timeAndAddress.vue` | 旧逻辑 | 遗留/未接通 | 无当前培训统计 Controller 对应 |
| 天气 | `views/train/weather/index.vue` | 旧逻辑 | 遗留/未接通 | 与 14 张培训表无对应关系 |
所有路径相对于 `build_ui/src/`。
## 3. 用户要求的页面能力确认
| 能力 | 结论 | 依据 |
| --- | --- | --- |
| 已有哪些菜单 | 无法从仓库确认实时菜单;路由由 `/getRouters` + `sys_menu` 动态生成 | `router/index.js`、`store/modules/permission.js`、`api/menu.js`;系统 SQL无train菜单 |
| 页面调用哪个 API | 14个主要页面都有对应API文件;教室实际使用`info.js` | 页面 import 与 `src/api/train/*.js` |
| 页面是否只是 CRUD | 14个核心业务页本质均为 CRUD;两个成绩衍生页只是列表筛选 | 页面 methods 与后端 Controller |
| 业务工作台 | 不存在 | 首页 `views/index.vue` 仅展示平台名称、版本和图片 |
| 统计图 | 培训业务统计图未实现 | `dashboard/*Chart.vue` 是若依示例;`character/charts.vue` 含随机/旧数据且无培训统计API |
| 画像 | 只有画像记录 CRUD | `views/train/portrait/index.vue` |
| 模拟设备页面 | 没有可运行模拟设备;只有设备管理 CRUD、遗留图表和两个占位页 | `board`、`equipment`、`extra` |
| 报到页面 | 有,但只是报到记录 CRUD | `views/train/report/index.vue` |
| 课程表页面 | 未发现 | `views/train`、router 与 API 搜索无 timetable/schedule/课程表实现 |
## 4. 权限与前端接通风险
大多数生成页面的按钮写成 `v-hasPermi="['train:<module>:<action>']"`,而对应 Controller 使用 `system:<module>:<action>`。教室页面用 `train:info:*`,宿舍/教室/成绩后端共用 `system:info:*`;宿舍与成绩当前页面又没有按钮权限指令。
超级管理员因若依通配权限可能掩盖此问题,但普通角色可能出现:菜单能见而按钮隐藏、按钮可见而请求被 403、三个模块共享过宽权限等现象。实际结果还取决于实时 `sys_menu.perms`,本次没有查询数据库。
## 5. 当前工作树状态对前端基线的影响
- `score.js`、成绩 CRUD 页面、学生成绩页、课程成绩页、两个占位页均未跟踪。
- `dormitory/index.vue` 已修改,`dormitory.js` 未跟踪。
- `info.js` 与 `vue.config.js` 已修改未提交。
- 因此当前文件系统能看到的页面能力高于最近一次提交 `83797f92` 中可复现的能力;在提交或交接前应先明确哪些文件属于正式基线。