feat(user): 支持修改当前用户资料接口并更新个人中心调用

- 新增 updateSelfUser 方法,用于修改当前登录用户的个人资料
- 个人中心调用接口由原 updateUser 切换为 updateSelfUser,避免学生账号权限不足导致的保存失败
- 更新了头像保存、个人信息保存等相关调用代码,添加异常捕获和提示
- 修正环境变量 .env.development 中 API URL 配置为生产地址
- 优化审核记录排序逻辑,新增获取最新审核记录和编辑入口显示判断函数
- 调整审核状态标签使用统一排序规则,防止显示和编辑状态不一致
- 新增社团活动、社团编辑、志愿时长录入、学分记录编辑、社会实践学分申报、青马学员编辑等多个新增组件及表单功能
- 各新增功能支持表单验证、操作反馈和数据加载优化
This commit is contained in:
2026-11-05 19:03:40 +08:00
parent 1c3ea8ec77
commit 567e4aabdb
56 changed files with 8941 additions and 20 deletions
+178
View File
@@ -0,0 +1,178 @@
# 团委智能化平台二期实施方案
> 依据《副本二期功能--定稿0802.docx》(4 大模块 26 项功能)制定。
> 前端仓库:`tuanwei-admin`(Vue3 + ele-admin-pro);后端仓库:`tuanwei-java`(Spring Boot + MyBatis-Plus)。
## 一、现状结论
二期的四项底座已经具备,可直接复用:
| 底座 | 现状 | 可复用点 |
| --- | --- | --- |
| 申报 + 审核流 | `gxmu_declare` / `gxmu_review_flow` / `gxmu_review_flow_config` / `gxmu_review_list`,9 张申报表全部接入 | 三级审核、状态回写、`ReviewFlowStarterService` |
| 学生统一身份 | `gxmu_student.user_id`(开放平台同步 + 认领)、`gxmu_teacher`、`gxmu_tygl_form` | 成长主页身份主键、组织作用域 |
| 文件存储 | `/api/file/upload` + S3 对象存储 + 缩略图 + office 转 PDF | 所有附件、证明材料 |
| 爬虫 + 异步任务 | `CrossSchoolActivityCrawlerServiceImpl`(jsoup + 定时 + upsert)、`OpenplatSyncServiceImpl`(进度表 + 轮询) | 主题团课库、批量导入与导出 |
三项能力必须新建:
1. **站内消息中心**:后端无 `oa_notice`,但前端顶栏铃铛与 `/user/notice` 已在调用 `/api/oa/notice/*`,属于前端等后端。
2. **业务域**:学分、志愿、社团、场地、青马培养、专家评审均无表无接口。
3. **OCR 与 PDF 生成**:无 OCR 依赖;PDF 只能通过服务器 LibreOffice 转换。
## 二、菜单规划
原则:不动现有 12 个一级菜单,不迁移已有子菜单(避免破坏角色授权)。新增 2 个一级菜单,其余挂到语义最近的现有菜单。
### 新增一级菜单
```
成长中心 /growth menu_id 14500
├ 我的成长 /growth/myHome 14501
├ 学分明细 /growth/credit 14502
├ 社会实践学分 /growth/practiceCredit 14503
├ 学分预警 /growth/creditWarning 14504
├ 学生画像 /growth/portrait 14505
└ 推荐内容 /growth/recommend 14506
社团与志愿 /club menu_id 14520
├ 志愿服务时长 /club/volunteerHour 14521
├ 志愿时长审核 /club/volunteerReview 14522
├ 志愿证明 /club/volunteerCertificate 14523
├ 社团管理 /club/club 14524
├ 社团活动 /club/activity 14525
├ 活动审批 /club/activityReview 14526
├ 场地预约 /club/venue 14527
├ 场地审批 /club/venueReview 14528
├ 社团年审 /club/annualReview 14529
└ 社团评优 /club/award 14530
```
### 挂到现有菜单
| 现有菜单 | 新增子项 |
| --- | --- |
| 数字化团员 14342 | 青马学员档案 `/gxmu/qmgcStudent`、培养任务 `/gxmu/qmgcTask`、考核评分 `/gxmu/qmgcScore`、主题团课库 `/gxmu/thematicCourse` |
| AI内容创作与宣传助手 14365 | AI辅助教学设计 `/gxmu/teachingDesign`、AI主题团日设计 `/gxmu/themeDayDesign` |
| 挑战杯 14372 | 专家评审 `/gxmu/expertReview`、专家库 `/gxmu/expertPool` |
| 系统设置 8574 | 消息模板 `/system/messageTemplate`、推送记录 `/system/messageLog` |
`青马工程`(14353)保留为申报入口;新增学员档案管理培养期,两者不合并。
消息中心的用户侧直接复用已有 `/user/notice` 与顶栏铃铛,前端零改动即可生效。
## 三、分期
### P0(可上线的最小闭环,约 53 人日)
| # | 功能 | 交付物 |
| --- | --- | --- |
| 1 | 站内消息中心 | `oa_notice` + `oa_notice_record` + `/api/oa/notice/*` + 审核钩子 |
| 2 | 第二课堂学分 | 学分规则/记录表 + Excel 导入 + 明细页 + 汇总 |
| 3 | 学生成长主页 | 聚合接口 + 简历式页面 |
| 4 | 志愿服务 | 个人录入 + 桂志愿导入 + 二级学院审核 + 时长汇总 |
| 5 | 社团管理 | 社团主档 + 成员 + 指导老师 |
| 6 | 场地预约 | 场地主档 + 日历 + 冲突校验 + 审批 |
| 7 | 青马培养档案 | 学员主档 + 培养材料 + 任务清单 |
| 8 | 主题团课库 | 表 + 列表 + 爬虫入库 |
| 9 | 工程配套 | 菜单/按钮/角色 SQL + 字典 + 权限码 |
### P1(第二批,约 63 人日)
社会实践学分申报(四级审核 + 教务处模板导出)、学分预警、智能推荐、学生画像、社团年审、社团评优、年度志愿证明、社团年度报告、专家评审、AI 辅助教学设计与主题团日设计、审核流并行审批改造。
### P2(探索期,约 23 人日)
AI 学员学习情况分析、AI 定制培养建议、OCR 公章识别、AI 数字人、移动端接口整理。
## 四、数据模型
统一规范:`id BIGINT AUTO_INCREMENT`、`tenant_id`、`user_id`、`deleted`、`create_time`、`update_time`。
附件:单文件用 `file_id + file_url`;多文件用 JSON 数组字符串。
审批统一复用 `gxmu_review_list(module, pk)`,模块名即业务表名。
建表脚本见:
- `docs/sql/phase2_01_growth_credit.sql`:学分、社会实践、毕业要求、预警、画像、推荐
- `docs/sql/phase2_02_volunteer.sql`:志愿服务与证明
- `docs/sql/phase2_03_club_venue.sql`:社团、成员、活动、年审、评优、场地、预约
- `docs/sql/phase2_04_qmgc.sql`:青马学员、材料、任务、评分、考试
- `docs/sql/phase2_05_thematic_course.sql`:主题团课库
- `docs/sql/phase2_06_notice.sql`:消息中心
- `docs/sql/phase2_07_review_parallel.sql`:审核流并行节点改造
- `docs/sql/phase2_08_menu_permission.sql`:菜单、按钮、角色授权
## 五、后端设计
新增包(不改动现有 24 个 gxmu 控制器):
```
com.gxwebsoft.gxmu.credit 学分规则、记录、导入、汇总、预警
com.gxwebsoft.gxmu.volunteer 志愿时长与证明
com.gxwebsoft.gxmu.club 社团、活动、年审、评优
com.gxwebsoft.gxmu.venue 场地与预约
com.gxwebsoft.gxmu.qmgcpro 青马培养档案(与现有 QmgcForm 申报区分)
com.gxwebsoft.gxmu.thematic 主题团课库
com.gxwebsoft.gxmu.growth 成长主页聚合
com.gxwebsoft.notice 消息中心
```
接口约定:
- 管理端:`/api/gxmu/{domain}/page|list|{id}|save|update|remove|batch`,沿用 `BaseController` + `BaseParam`,前端继续传 `backendAccess=true`。
- 学生自助:`/api/gxmu/{domain}/my/*`,用 `hasOnlyStudentRole()` 收口,只返回本人数据。
- 审核:不重复造轮子,统一写 `gxmu_review_list`,前端复用 `reviewStatusTag` / `reviewHistoryModal` / `reviewFlowModal`。
- 消息中心按前端既有路径 `/api/oa/notice/*` 实现,顶栏铃铛与 `/user/notice` 无需改代码。
## 六、前端设计
新增目录:
```
src/views/growth/{myHome,credit,practiceCredit,creditWarning,portrait,recommend}
src/views/club/{volunteerHour,volunteerReview,volunteerCertificate,club,activity,activityReview,venue,venueReview,annualReview,award}
src/views/gxmu/{qmgcStudent,qmgcTask,qmgcScore,thematicCourse,teachingDesign,themeDayDesign,expertReview,expertPool}
src/views/system/{messageTemplate,messageLog}
```
复用清单:
- 列表骨架 `ele-pro-table`,照 `views/gxmu/studentRoster`。
- 导入 `views/gxmu/components/common-import.vue`。
- 附件 `components/attachmentList.vue` + `views/gxmu/utils/attachment.ts`。
- 审核 `reviewStatusTag` / `reviewHistoryModal` / `reviewFlowModal`。
- 图表 `utils/use-echarts.ts`,照 `views/gxmu/youthDataCenter`。
- AI 页复制 `activityOutlineGen` 壳 + `utils/ai-stream.ts`。
新建公共件:
1. `components/MultiFileUpload`:统一多附件上传。
2. `components/AiGenPageShell`:AI 生成页外壳。
3. `utils/export.ts`:收敛 Excel/CSV/打印 PDF。
顺带修复:
- `views/user/profile` 保存改用 `PUT /system/user/self`(学生账号当前会因缺 `sys:user:update` 失败)。
- 统一「最新审核记录」排序规则到 `views/gxmu/utils/review.ts`。
## 七、实施顺序
1. 基建:消息中心 + 菜单权限 SQL + 公共上传组件。
2. 学分域:规则/记录/导入 → 成长主页聚合 → 明细页。
3. 志愿域:录入/导入 → 审核 → 汇总。
4. 社团域:社团主档/成员 → 活动 → 场地 → 预约。
5. 青马域:学员档案 → 任务 → 材料。
6. 团课库:建表 → 爬虫 → 列表。
7. P1 / P2 按上表推进。
## 八、待确认事项(有默认值,不阻塞 P0)
| 事项 | 默认假设 |
| --- | --- |
| 第二课堂 / 桂志愿 是否有 API | 先 Excel 导入,`source/external_id` 预留 |
| 学分规则与毕业要求 | 按「学院 + 年级 + 专业 + 类别」配置应修学分 |
| 青马评分标准 | 做成可配置评分项与权重 |
| 社团年审量化指标 | 指标配置表,活动数/参与人次/稿件数自动取数 |
| 指导老师人数 | 社团主档存 1 名主指导,审批节点支持多人 |
| 志愿证明模板与电子章 | 需提供模板与印章图;未提供时用占位版 |
| 团委科研课题是否新申报模块 | 视为新模块,新增 `gxmu_research_project` |
| 数字人形象 | 先用团委现有卡通形象,不做 3D |