# 档案系统 **Repository Path**: cloud-order-taking/archival-system ## Basic Information - **Project Name**: 档案系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-19 - **Last Updated**: 2026-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 高校毕业生档案管理系统(毕业设计) **技术栈**:Spring Boot 3 + MySQL + JWT + Vue 3 + Vite + Element Plus(Vue 3 对应 Element UI 体系)+ ECharts ## 环境要求 - **JDK 17+**(Spring Boot 3 必需;若 Maven 报 `无效的标记: --release`,请升级 JDK) - **Node.js 18+** - **MySQL 8**(或 5.7 兼容模式) ## 数据库 1. 创建库(若初始化脚本内已 `CREATE DATABASE` 可跳过本步): ```sql CREATE DATABASE graduate_archive_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. 修改 `backend/src/main/resources/application.yml` 中的 `spring.datasource.username` / `password`,与将要执行脚本的目标库一致。 3. **在 MySQL 中执行 `sql/` 下脚本**(建议顺序): - `2026-03-19_init_graduate_archive_db.sql`:建表 + 演示数据 + 默认运行配置等; - 其余以日期为前缀的增量脚本(如 `2026-03-21_*.sql`、`2026-03-22_*.sql`)按需执行。 4. 启动后端:`spring.jpa.hibernate.ddl-auto` 默认为 `update`,在已有表结构上会 **对齐字段**;**业务数据以 SQL 脚本为准**,不再通过 Java 启动脚本写入演示数据。 ## 后端启动 ```bash cd backend mvn spring-boot:run ``` 默认端口:`http://localhost:8080` ## 前端启动 ```bash cd frontend npm install npm run dev ``` 访问:`http://localhost:5173`(已配置代理 `/api` → 后端) ## 演示账号(模拟数据) **统一初始密码**:`Admin@123` | 角色 | 用户名 | 说明 | |------|--------|------| | 系统管理员 | `sysadmin` | 用户管理、单位审核、公告、日志 | | 档案管理员 | `archadmin` | 建档/变更/维护/转递终审、查询、统计 | | 辅导员 | `counselor01` | 所辖班级:软工2201、软工2202 | | 学生 | `2022010101` / `2022010102` / … | 王小明待终审;李小红转递中;刘小刚待初审;陈静未提交 | | 接收单位(已审) | `recv_hr_01` | 可确认转递 | 密保演示(用于「忘记密码」):答案依次为 **北京、李华、软工**(与后端 JSON 一致)。 --- ## 业务流程说明 以下流程与系统当前实现一致。流程图使用 **Mermaid**,在 GitHub、GitLab、VS Code / Cursor(Markdown 预览)、Typora 等支持 Mermaid 的编辑器中可直接渲染。 ### 角色与数据范围(总览) ```mermaid flowchart LR subgraph s_stu["学生"] S[建档 / 变更 / 转递 / 进度查询] end subgraph s_cou["辅导员"] C[所辖班级: 建档变更转递初审 / 信息维护] end subgraph s_arc["档案管理员"] A[终审 / 维护审核 / 转递终审与撤单 / 异常结案 / 查询统计] end subgraph s_sys["系统管理员"] M[用户 / 单位审核 / 公告 / 日志 / 配置] end subgraph s_recv["接收单位"] R[待确认 / 流水 / 确认或拒收] end S --> C C --> A A --> R M -.->|注册审核| R ``` ### 1. 学生建档(二级审核 + 驳回后再提交) ```mermaid flowchart TD A([学生: 档案创建页]) --> B{当前档案状态} B -->|无记录 / 未提交 / 辅导员或管理员驳回| C[填写信息并上传证件照、身份证扫描件] B -->|待审核或已建档等| D[不可在本页重复提交\n前往「我的档案」查看] C --> E[提交 → 待辅导员初审] E --> F{辅导员初审} F -->|通过| G[待档案管理员终审] F -->|驳回| H[学生可修改后再次提交] G --> I{档案管理员终审} I -->|通过| J[已建档 ESTABLISHED\n获得档案编号] I -->|驳回| H ``` ### 2. 学生信息变更(与转递互斥) ```mermaid flowchart TD A([学生: 信息变更]) --> B{档案已建档完成?} B -->|否| X[不可申请] B -->|是| C{存在待审变更 或 进行中转递?} C -->|是| Y[需等待办结或转递结束后再申请] C -->|否| D[提交变更与证明材料] D --> E[待辅导员初审] E --> F{辅导员} F -->|通过| G[待档案管理员终审] F -->|驳回| Z[流程结束 / 可再发起] G --> H{档案管理员} H -->|通过| I[写入账号/扩展信息\n记录变更历史] H -->|驳回| Z ``` ### 3. 档案转递(初审 → 终审 → 待接收确认 → 结案/撤单) ```mermaid flowchart TD A([学生: 转递申请]) --> B{档案已建档 且 无进行中变更/转递?} B -->|否| X[不满足条件] B -->|是| C[选择接收单位并提交] C --> D[待辅导员初审] D --> E{辅导员} E -->|通过| F[待档案管理员终审] E -->|驳回| R1[转递单结束\n档案仍为已建档] F --> G{档案管理员} G -->|通过| H[生成转递编号\n档案进入转递中\n待接收单位确认] G -->|驳回| R1 H --> I{接收单位确认} I -->|确认接收| J[转递成功\n档案状态: 转递已完成] I -->|拒收| K[档案异常: 接收单位拒收\n通知档案管理员处理] K --> L{档案管理员: 转递异常结案} L --> M[恢复已建档\n学生可重新申请转递] H --> N{档案管理员: 转递撤单\n待确认阶段} N --> O[撤单并恢复已建档\n通知学生/接收方/辅导员] ``` 说明:**撤单**仅适用于状态为「待接收单位确认」的转递单;**异常结案**适用于接收方拒收后的异常档案状态。 ### 4. 辅导员信息维护(学业 / 在校表现 / 奖惩) ```mermaid flowchart TD A([辅导员: 信息维护]) --> B[从所辖学生中选择对象] B --> C[选择类别: 学业 / 在校表现 / 奖惩] C --> D[填写内容 JSON 并提交] D --> E[待档案管理员审核] E --> F{档案管理员} F -->|通过| G[内容写入学生档案扩展\n并记变更历史] F -->|驳回| H[通知辅导员\n可修改后再次提交] ``` ### 5. 接收单位注册与系统管理员审核 ```mermaid flowchart TD A([访客: 接收单位注册]) --> B[填写单位与账号信息] B --> C[账号状态: 待单位审核] C --> D{系统管理员审核} D -->|通过| E[可登录 / 转递接收菜单可用] D -->|驳回| F[账号不可用\n需联系管理员或重新注册策略] ``` ### 6. 认证与登录页行为(摘要) ```mermaid flowchart LR A[打开登录页] --> B{本地勾选记住账号密码?} B -->|是| C[从 localStorage 回填] B -->|否| D[手动输入] C --> E[提交前 trim 用户名密码] D --> E E --> F[POST /api/auth/login] F --> G{首登强制改密?} G -->|是| H[首次修改密码页] G -->|否| I[工作台] ``` --- ## 功能与接口说明(摘要) - 认证:`/api/auth/login`、`/api/auth/reset-password-security` - 公开:`GET /api/public/runtime-config`(门户标题等)、`POST /api/public/receiver-register` - 账号(全角色登录后):`GET /api/account/me`(个人信息汇总)、`POST /api/account/change-password`(**原密码校验后立即改密,无审核流程**) - 首次改密(需登录):`POST /api/account/first-login-password` - 档案:`/api/archives/*`(提交、查询、排序、辅导员/管理员审核、**脱敏详情**、**POST 二次密码完整详情**、变更历史、**脱敏 Excel 导出**、**材料不完整列表**) - 变更:`/api/change-applications/*`(含按 id 详情;`pending` 路由已置于 `/{id}` 之前避免歧义) - 辅导员维护:`/api/maintenance/*`(含 `GET /counselor/my-submissions`、按 id 详情;`pending` 在 `/{id}` 前) - 转递:`/api/transfers/*`(含 **`GET /{id}`** 按角色授权的详情、**`/receiver-visible`**、**`/counselor/all`**) - 统计:`GET /api/statistics/archive-admin-dashboard`(支持 `rangeStart`/`rangeEnd`)、**`GET /export/excel`**、**`GET /export/pdf`** - 工作台:`GET /api/workbench/counselor/summary`、`/student/archive-progress`、`/counselor/my-students` - 管理:`/api/admin/users`(分页、状态筛选、**PUT 编辑**、**批量启停/删**、**Excel/CSV 导入**、**GET import-template**)、`/api/admin/receiver-orgs`、`/api/admin/audit-logs`(**操作/登录日志 Excel 导出**)、**`/api/admin/login-logs`**、**`/api/admin/system-config`** - 公告:`/api/announcements`(**`POST` 发布**、**`PUT /{id}` 编辑**、**`DELETE /{id}`**);消息:`/api/notifications`(含 **`POST /read-all`** 一键已读) - 静态材料:上传目录映射 `GET /api/files/**` ### 前端已对接的增强页面 - **系统管理员**:用户管理(批量、编辑、模板下载、Excel/CSV 导入)、操作日志导出、**登录日志**、**系统运行配置** - **档案管理员**:统计(时间范围、折线/柱状/饼图、Excel/PDF)、档案查询(排序、导出)、**材料不完整**、详情二次密码查看明文 - **辅导员**:信息维护(所辖学生表、我的维护记录)、**所辖学生转递流水**、变更初审详情 - **接收单位**:转递接收(**待确认 + 可见流水** Tab,支持转递详情弹窗) - **公共组件**:`TransferDetailDialog`(`GET /api/transfers/{id}`,审核/学生/接收端复用) - **登录页**:读取 `portal.siteTitle` 动态标题 - **全角色**:侧栏「个人中心」与头像下拉:查看账号/扩展信息、**登录后修改密码**;敏感字段修改规则见页面说明(学生走「信息变更」等) ## 说明 - **权限**:`GET /transfers/pending`、`GET /change-applications/pending`、`GET /maintenance/pending` 已按角色与数据范围收敛(辅导员仅所辖学生、档案管理员终审/维护列表等);`stage` 非法值会返回 400。 - 生产环境请修改 JWT 密钥、启用 HTTPS、完善密保答案加密与二次验真策略。 ## 目录结构 ``` 档案系统/ ├── backend/ # Spring Boot ├── frontend/ # Vue3 + Element Plus ├── sql/ # 建库与演示数据、增量脚本 ├── 需求.md └── 设计ui ```