# 学生请假(homeleave) 学生请假模块 —— 学生向老师请假(学生申请、教师审批),教师给学生请假(教师登记,免审直接通过)。 > 由家校活动(family-activity)工程改造:保留 Vue3 + Vite + view-ui-plus + alova > 技术栈、布局壳层、权限菜单契约、表格/分页/附件等基础设施,业务域整体替换为「学生请假」。 > 后端:`E:\YHXT\java\HomeLeave`(Spring Boot,包名 `com.yunhai.homeleave`)。 > 本工程已去除本地 mock,全部接口直连真实后端。 ## 快速开始 ```bash # 联调本地后端(需先启动 HomeLeaveApplication,端口 8106) npm run dev # 构建(产物直出 dist/) npm run build ``` 开发地址:(`/api` 由 vite 代理转发到 `http://localhost:8106`) ## 功能范围 | 菜单 | 路由 | 说明 | | --- | --- | --- | | 请假审批 | `/audit` | 教师审批列表:审核(通过/拒绝)、批量通过、撤销审批、销假审批 | | 请假登记 | `/register` | 教师给学生请假:选任教班级与学生直接登记(免审通过) | | 请假统计 | `/stats` | 按班级 / 日期 / 请假类型统计 | | 请假申请 | `/apply` | 学生提交请假:类型、起止时间、连续请假、事由、附件 | | 我的请假 | `/my` | 学生查看本人请假记录,可撤销、申请销假 | ## 状态机(LeaveStatusEnum) ``` 0 待审核 ──教师审核──→ 1 已通过 / 8 已拒绝 0 待审核 ──学生撤销──→ 3 已撤销 1 已通过 ──学生申请撤销──→ 2 待撤销 ──教师审批──→ 3 已撤销 / 4 撤销拒绝 1/7 ──学生申请销假──→ 5 待销假 ──教师审批──→ 6 已销假(回写时间)/ 7 销假拒绝 教师登记(type=1)免审直接 1,教师可直接销假(→6) ``` ## 目录结构(业务部分) ``` src ├── api/module/leave.ts # 请假域接口封装(get/postJSON/postForm,统一 {code,msg,data} 解包) ├── assets │ └── config/menu.ts # 左侧菜单兜底数据(modId 契约) ├── types/leave.ts # 请假域 TS 契约(对齐后端 VO/DTO) └── views/leave/ # 业务页面(申请 / 我的 / 审批 / 登记 / 统计 + 详情弹窗) ``` ## 后端接口契约(/{platform}/leave/*) | 接口 | 说明 | | --- | --- | | `POST /api/leave/Save` | 提交请假(学生 type=2 待审核;教师登记 type=1 免审通过) | | `GET /api/leave/List` | 分页列表(学生本人 / 教师任教班级 / 校管理员全校) | | `GET /api/leave/Details?id=` | 详情(时间段、销假时间段、附件、按钮状态) | | `POST /api/leave/Audit` | 教师审批:1 通过 / 8 拒绝;撤销 3/4;销假 6/7 | | `POST /api/leave/BatchPass` | 批量通过(classId 一键 / ids 勾选) | | `POST /api/leave/Withdraw?id=` | 学生申请撤销 | | `POST /api/leave/ReportBack` | 销假(学生申请 → 待销假;教师直接销假 → 已销假) | | `GET /api/leave/MyClasses` | 我的班级(学生所在 / 教师任教 / 管理员全校) | | `GET /api/leave/ClassStudents?classId=` | 班级学生名单 | | `GET /api/leavestats/Stats` | 请假统计 |