diff --git a/README.md b/README.md index 2ffff94..7863e13 100644 --- a/README.md +++ b/README.md @@ -268,7 +268,7 @@ classmanager/ | v1.4 | 2026.4.28 | 全量代码审查修复:双重密码哈希bug、学生端XSS漏洞、性能优化、Pydantic schema统一、权限检查补全、考勤委员撤销权限 | | v1.5 | 2026.4.29 | 登录错误封禁5分钟+手动解锁、加减分回显修复、权限限制修复、按钮样式补全 | | v1.5.1 | 2026.4.29 | 权限修复:考勤委员提示遗漏、历史记录权限泄露、时间筛选失效、作业页分数限制与后端同步 | -| v1.6 | 2026.4.29 | 全量一致性审计:前后端配置统一(.env.example/config.py/config.php)、清理废弃全局变量、角色权限表精确化 | +| v1.6 | 2026.5.12 | 全量一致性审计:前后端配置统一(.env.example/config.py/config.php)、清理废弃全局变量、角色权限表精确化 | ## 许可证 diff --git a/docs/guide/parent.md b/docs/guide/parent.md index c9b3230..fe5e67a 100644 --- a/docs/guide/parent.md +++ b/docs/guide/parent.md @@ -4,23 +4,64 @@ ![二维码](./qrcode.png) -### 或访问https://class.sea-studio.top/ +### 或访问 https://class.sea-studio.top/ ## 登录 -输入**手机号**和**密码**登录。账号由系统自动创建,与子女信息关联。 +1. 输入**登记的手机号**和**密码**登录 +2. 账号由班主任创建,与子女信息自动关联 + +> 初始密码默认为 `123456`,如有疑问请联系班主任。 + +--- ## 功能概览 -| 页面 | 说明 | -|------|------| -| 首页 | 查看子女操行分、班级排名、初始分提示 | -| 历史记录 | 查看子女加减分明细(时间、类型、原因、分值、记录人),支持分页 | -| 考勤记录 | 查看子女考勤记录(出勤/缺勤/迟到/请假统计 + 明细列表) | +| 页面 | 说明 | 如何进入 | +|------|------|---------| +| 首页 | 查看子女操行分、班级排名、初始分提示 | 登录后默认进入 | +| 历史记录 | 查看子女加减分明细(时间、类型、原因、分值、记录人),支持分页 | 点击导航栏「历史记录」 | +| 考勤记录 | 查看子女考勤统计(出勤/缺勤/迟到/请假) + 记录明细 | 点击导航栏「考勤记录」 | -> 家长端默认仅显示当前学期数据。 +--- + +## 各页面操作说明 + +### 📊 首页 +- 紫色卡片区域显示子女姓名和学号 +- 两个统计卡片:**当前操行分**和**班级排名** +- 页面底部显示初始分提示(默认60分) +- 操行分高于60分表示表现良好,低于60分建议查看历史记录了解扣分原因 + +### 📋 历史记录 +- 表格列出所有操行分变动记录 +- **类型说明**: + - **手动** — 班主任或班干部手动操作 + - **作业** — 作业未交或迟交自动扣分 + - **考勤** — 缺勤或迟到自动扣分 +- 加分显示绿色 `+N`,扣分显示红色 `-N` +- 底部可翻页浏览 + +### 📅 考勤记录 +- 四个统计卡片:出勤、缺勤、迟到、请假 +- 下方列表显示每条考勤记录 +- 考勤按时段记录:早上(7:15)、中午(14:00)、晚修(19:30) + +> **注意**:家长端默认仅显示当前学期数据。 + +--- ## 常见问题 - **忘记密码**:联系班主任重置。 - **初始操行分**:默认60分,首页底部有提示。 +- **看不到子女信息**:请确认使用正确的手机号登录(家长账号是请假系统登记时的手机号)。 +- **操行分或考勤有异议**:请联系班主任核实处理。 +- **账号被锁定**:连续输错5次密码会锁定5分钟,请联系班主任处理。 +- **记录类型含义**:「手动」为人工操作、「作业」为作业扣分、「考勤」为考勤扣分。 +- **其他任何问题**:请联系班主任咨询。 + +--- + +## 声明 +有关扣分的问题可以先联系学生询问,不要着急,可能是登记时出错,不用担心。可以联系班主任或学生联系对应的班干核实信息。 diff --git a/docs/guide/student.md b/docs/guide/student.md index f61f913..54d8b69 100644 --- a/docs/guide/student.md +++ b/docs/guide/student.md @@ -4,26 +4,69 @@ ![二维码](./qrcode.png) -### 或访问https://class.sea-studio.top/ +### 或访问 https://class.sea-studio.top/ ## 登录 -输入**长学号**和**密码**登录。首次登录需强制修改密码。 +1. 输入**长学号**和**密码**登录 +2. **首次登录需强制修改密码**(新密码需6-20位,包含大写字母、小写字母、数字、特殊符号中的至少3种) +3. 修改成功后自动进入首页 -> 密码要求:6-20位,包含大写字母、小写字母、数字、特殊符号中的至少3种。 +> 初始密码默认为 `123456`,首次登录后请立即修改。 + +--- ## 功能概览 -| 页面 | 说明 | -|------|------| -| 首页 | 查看操行分、班级排名、作业完成率、出勤率 | -| 操行分详情 | 查看完整加减分历史(时间、分值、原因、操作人) | -| 作业情况 | 查看缺交作业记录(科目、状态、备注) | -| 考勤记录 | 查看个人考勤记录(按月) | -| 学期记录 | 查看历史学期归档数据(操行分排名、考勤统计、作业统计) | -| 修改密码 | 修改登录密码 | +| 页面 | 说明 | 如何进入 | +|------|------|---------| +| 首页 | 查看操行分、班级排名、作业完成率、出勤率、最近5条记录 | 登录后默认进入 | +| 操行分详情 | 查看完整加减分历史(时间、分值、原因、操作人),支持分页 | 点击导航栏「操行分详情」 | +| 作业情况 | 查看作业列表(科目、标题、截止日期、提交状态、备注) | 点击导航栏「作业情况」 | +| 考勤记录 | 查看出勤/缺勤/迟到/请假统计 + 记录明细 | 点击导航栏「考勤记录」 | +| 学期记录 | 查看历史学期归档数据(操行分排名、考勤统计、作业统计) | 点击导航栏「学期记录」 | +| 修改密码 | 修改登录密码(需输入原密码) | 点击导航栏「修改密码」 | + +--- + +## 各页面操作说明 + +### 📊 首页 +- 四个统计卡片显示关键数据 +- 下方「最新操行分记录」显示最近5条变动 +- 点击「查看更多」跳转到操行分详情页 + +### 📋 操行分详情 +- 顶部大字显示当前操行分 +- 下方表格列出所有历史记录 +- 页面底部可翻页浏览(每页20条) + +### 📝 作业情况 +- 作业状态有三种:🟢已提交 / 🔴未提交 / 🟡迟交 +- 未提交和迟交会自动扣减操行分 + +### 📅 考勤记录 +- 每天分三个时段:早上(7:15)、中午(14:00)、晚修(19:30) +- 统计卡片显示出勤/缺勤/迟到/请假次数 +- 下方列表显示每条记录的日期和状态 + +### 📚 学期记录 +- 以卡片形式展示每个已归档学期 +- 包含最终操行分、排名、考勤和作业统计 + +### 🔑 修改密码 +1. 输入原密码 +2. 输入新密码(6-20位,至少3种字符类型) +3. 确认新密码 +4. 点击「确认修改」→ 需重新登录 + +--- ## 常见问题 -- **忘记密码**:联系班主任或开发人员重置。 +- **忘记密码**:联系开发人员重置。 - **操行分有误**:联系班主任或班长核实调整。 +- **考勤异议**:向班主任反映,由班主任核实后修正。 +- **作业状态有误**:联系学习委员或班主任核实。 +- **账号被锁定**:连续输错5次密码会锁定5分钟,急需使用请联系开发人员解锁。 +- **系统异常**:页面打不开、功能报错等问题请联系开发人员反馈(建议提供截图和操作步骤)。 diff --git a/docs/parent.md b/docs/parent.md index 10cea2d..8314797 100644 --- a/docs/parent.md +++ b/docs/parent.md @@ -2,11 +2,20 @@ ## 登录 -1. 打开系统网址,进入登录页面 -2. 输入**手机号**和**初始密码** -3. 点击"登录"按钮 +### 账号说明 -> **注意**:家长账号由班主任创建,与子女信息关联。每个学生对应一个家长账号。 +家长账号由班主任在系统中创建,与学生信息自动关联。每个学生对应一个家长账号。 + +- **用户名**:登记时填写的手机号 +- **初始密码**:与学生初始密码相同(默认为 `123456`,具体以班主任通知为准) + +### 登录步骤 + +1. 打开系统网址,进入登录页面 +2. 输入**手机号**和**密码** +3. 点击「登录」按钮即可进入家长端首页 + +> 如果连续输错密码5次,账号将被锁定5分钟。如忘记密码请联系班主任重置。 --- @@ -14,52 +23,96 @@ ### 1. 首页 -登录后进入家长端首页,展示以下信息: +登录后自动进入家长端首页,页面由以下部分组成: -| 信息项 | 说明 | -|-------|------| -| 子女姓名 | 显示关联学生的姓名 | -| 学号 | 显示关联学生的学号 | -| 当前操行分 | 显示子女当前的总操行分 | -| 班级排名 | 显示子女在全班的排名 | +**顶部导航栏**:显示系统名称和「退出登录」按钮。 -页面顶部以紫色渐变卡片展示子女基本信息,下方以统计卡片形式展示操行分和班级排名,底部提示初始操行分值。 +**子女信息卡片**(紫色渐变区域): +- 子女姓名 +- 学号 + +**统计卡片**(2个): + +| 卡片 | 说明 | +|------|------| +| 当前操行分 | 显示子女当前的总操行分(初始分为60分) | +| 班级排名 | 显示子女在全班中的排名 | + +**初始分提示**:页面底部显示"初始操行分为 60 分"的提示文字。 + +> 操行分高于初始分说明总体表现良好,低于初始分说明有扣分记录,建议关注历史记录了解详情。 + +--- ### 2. 历史记录 -查看子女的操行分历史明细: +**进入方式**:点击底部导航栏的「历史记录」 -- 按时间显示操行分变动记录 -- 每条记录包含: - - 日期时间 - - 类型(手动/考勤/作业等) - - 原因 - - 分值变动(加分绿色、减分红色) - - 记录人 -- 支持分页浏览 +**页面内容**: -### 3. 考勤记录 +以表格形式展示子女的操行分变动明细: -查看子女的考勤记录: +| 列 | 说明 | +|----|------| +| 日期 | 操作的日期和时间 | +| 类型 | 记录类型,包含以下几种: | +| | **手动** — 班主任或班干部手动加减分 | +| | **作业** — 作业未交或迟交导致的扣分 | +| | **考勤** — 缺勤或迟到导致的扣分 | +| 原因 | 本次加减分的详细原因 | +| 分值 | 加分显示为绿色 `+N`,扣分显示为红色 `-N` | +| 记录人 | 执行操作的人员姓名 | -- 顶部统计卡片显示出勤、缺勤、迟到、请假次数 -- 按日期显示考勤记录列表 -- 每条记录包含: - - 日期 - - 考勤状态(正常/迟到/缺勤/请假) - - 备注(如有) +**分页浏览**:当记录较多时,页面底部提供翻页功能: +- 点击「上一页」/「下一页」按钮切换 +- 显示当前页码和总页数 > 家长端默认仅显示当前学期的数据。历史学期归档数据请在管理端或学生端查看。 --- +### 3. 考勤记录 + +**进入方式**:点击底部导航栏的「考勤记录」 + +**页面内容**: + +1. **统计卡片**(4个): + +| 卡片 | 说明 | +|------|------| +| 出勤 | 正常出勤次数 | +| 缺勤 | 无故缺勤次数 | +| 迟到 | 迟到次数 | +| 请假 | 请假次数 | + +2. **考勤记录明细**: + +| 列 | 说明 | +|----|------| +| 日期 | 考勤日期 | +| 状态 | 考勤状态,包含以下几种: | +| | 🟢 **正常** — 按时出勤 | +| | 🔴 **缺勤** — 无故缺勤 | +| | 🟡 **迟到** — 迟到 | +| | 🔵 **请假** — 已请假 | +| 原因 | 如有备注则显示原因 | + +> **考勤时段**:每天分为三个时段——早上(7:15)、中午(14:00)、晚修(19:30),每个时段独立记录考勤。 + +--- + ## 导航栏说明 +底部导航栏包含以下选项: + | 导航项 | 说明 | |-------|------| | 首页 | 子女信息、操行分和排名概览 | -| 历史记录 | 子女操行分变动历史明细 | -| 考勤记录 | 子女考勤记录明细 | +| 历史记录 | 子女操行分变动历史明细(支持分页) | +| 考勤记录 | 子女考勤统计和记录明细 | + +> 当前所在页面的导航项会高亮显示。 --- @@ -69,4 +122,28 @@ 请联系班主任重置密码。 ### Q: 初始操行分是多少? -学生初始操行分默认为60分,可在系统配置中调整。首页底部会显示当前系统的初始分设定值。 +学生初始操行分默认为60分,首页底部会显示当前系统的初始分设定值。 + +### Q: 看不到子女的信息怎么办? +请确认以下情况: +是否使用了正确的手机号登录(家长账号是请假系统登记时的手机号) + +### Q: 子女的操行分有误怎么办? +请联系班主任核实,班主任可以查看和调整学生的操行分记录。 + +### Q: 考勤记录有异议怎么办? +考勤记录由班级考勤委员录入,如有异议请联系班主任核实处理。 + +### Q: 登录时提示"账号已锁定"怎么办? +连续输错密码5次会导致账号锁定5分钟,请等待5分钟后重试。如果急需使用,请联系班主任联系开发人员解锁。 + +### Q: 为什么有些记录显示"作业"或"考勤"类型? +系统会自动将作业未交/迟交、缺勤/迟到等产生的扣分标记为对应类型,方便家长了解扣分原因。 + +### Q: 想了解更多关于系统的问题怎么办? +有关系统功能、账号等任何问题,请直接联系班主任咨询。 + +--- + +## 声明 +有关扣分的问题可以先联系学生询问,不要着急,可能是登记时出错,不用担心。可以联系班主任或学生联系对应的班干合适信息。 diff --git a/docs/student.md b/docs/student.md index e99d092..3006bd6 100644 --- a/docs/student.md +++ b/docs/student.md @@ -2,12 +2,26 @@ ## 登录 +### 首次登录 + 1. 打开系统网址,进入登录页面 -2. 输入**长学号**和**密码** -3. 点击"登录"按钮 -4. 首次登录系统会强制要求修改密码,请设置一个安全的新密码 +2. 输入**长学号**作为用户名 +3. 输入初始密码(默认为 `123456`,具体以班主任通知为准) +4. 点击「登录」按钮 +5. **首次登录系统会强制弹出密码修改窗口**,请设置一个安全的新密码 +6. 修改成功后自动进入学生端首页 > **密码要求**:长度6-20位,必须包含大写字母、小写字母、数字、特殊符号中的至少3种。 +> +> **示例有效密码**:`Hello1!`、`Abc123#`、`Test@99` + +### 日常登录 + +1. 打开系统网址 +2. 输入学号和密码 +3. 点击「登录」按钮即可进入首页 + +> 如果连续输错密码5次,账号将被锁定5分钟。如忘记密码请联系开发人员重置。 --- @@ -15,86 +29,171 @@ ### 1. 首页 -登录后进入学生端首页,展示以下信息: +登录后自动进入学生端首页,页面由以下部分组成: -| 信息项 | 说明 | -|-------|------| -| 当前操行分 | 显示当前总操行分 | -| 班级排名 | 显示在班级中的排名 | -| 作业完成率 | 已完成作业数/总作业数 | -| 本月出勤率 | 本月正常出勤天数/应出勤天数 | +**顶部导航栏**:显示系统名称、你的姓名和角色,以及「退出登录」按钮。 -首页下方还会显示最近的操行分变动记录。 +**统计卡片**(4个): + +| 卡片 | 说明 | +|------|------| +| 当前操行分 | 显示你当前的总操行分(初始分为60分) | +| 班级排名 | 显示你在全班中的排名 | +| 作业完成率 | 已提交作业数 ÷ 总作业数 × 100% | +| 本月出勤率 | 本月正常出勤天数 ÷ 应出勤天数 × 100% | + +**最新操行分记录**: +- 显示最近5条操行分变动记录 +- 每条记录显示:分值变动(绿色为加分,红色为扣分)、变动原因、日期 +- 点击「查看更多」可跳转到操行分详情页 + +--- ### 2. 操行分详情 -查看个人完整的操行分明细: +**进入方式**:点击底部导航栏的「操行分详情」 -- **当前总分**:显示在页面顶部 -- **历史记录列表**:包含每条加减分记录的详细信息 - - 变动时间 - - 分数变化(绿色为加分,红色为扣分) - - 变动原因 - - 操作人 +**页面内容**: + +1. **当前操行分**:页面顶部以大字显示你的当前总分 +2. **历史记录列表**:以表格形式展示完整的加减分记录 + +| 列 | 说明 | +|----|------| +| 时间 | 操作的日期和时间 | +| 分数变动 | 绿色 `+N` 表示加分,红色 `-N` 表示扣分 | +| 原因 | 本次加减分的原因说明 | +| 操作人 | 执行加减分操作的人员姓名 | + +3. **分页浏览**:页面底部提供翻页功能,每页显示20条记录 + +--- ### 3. 作业情况 -查看个人作业缺交记录: +**进入方式**:点击底部导航栏的「作业情况」 -- 显示作业列表 -- 每条作业显示: - - 科目、作业标题 - - 截止日期 - - 提交状态(已提交/未提交/迟交) - - 教师备注(如有) +**页面内容**: + +以表格形式展示你的所有作业记录: + +| 列 | 说明 | +|----|------| +| 科目 | 作业所属科目名称 | +| 作业标题 | 作业的标题或描述 | +| 截止日期 | 作业的提交截止时间 | +| 状态 | 作业提交状态,包含以下几种: | +| | 🟢 **已提交** — 按时提交 | +| | 🔴 **未提交** — 未提交(会自动扣分) | +| | 🟡 **迟交** — 超过截止时间后提交(会自动扣分) | +| 备注 | 老师或学习委员填写的备注信息 | + +> **扣分说明**:未交作业和迟交作业会自动扣减操行分,具体扣分分值由系统配置决定。 + +--- ### 4. 考勤记录 -查看个人考勤记录: +**进入方式**:点击底部导航栏的「考勤记录」 -- 考勤按**时段**记录:早上(7:15)、中午(14:00)、晚修(19:30) -- 统计卡片显示出勤、缺勤、迟到、请假次数 -- 每条记录包含: - - 日期 - - 考勤状态(正常/迟到/缺勤/请假) - - 备注(如有) +**页面内容**: + +1. **统计卡片**(4个): + +| 卡片 | 说明 | +|------|------| +| 出勤 | 正常出勤次数 | +| 缺勤 | 缺勤次数 | +| 迟到 | 迟到次数 | +| 请假 | 请假次数 | + +2. **考勤记录明细**: + +| 列 | 说明 | +|----|------| +| 日期 | 考勤日期 | +| 状态 | 考勤状态(正常/缺勤/迟到/请假) | +| 原因 | 如有备注则显示原因 | + +> **考勤时段**:每天分为三个时段进行考勤——早上(7:15)、中午(14:00)、晚修(19:30)。每个时段独立记录。 + +--- ### 5. 学期记录 -查看历史学期的归档数据: +**进入方式**:点击底部导航栏的「学期记录」 -- 显示所有已归档学期的列表 -- 每个学期显示: - - 学期名称、日期范围 - - 最终操行分和排名 - - 考勤统计(出勤/缺勤/迟到/请假次数) - - 作业统计(已交/未交/迟交数量) +**页面内容**: + +展示所有已归档学期的历史数据,每个学期以卡片形式展示: + +- **学期名称和日期范围** +- **最终操行分和排名** +- **考勤统计**:出勤、缺勤、迟到、请假次数 +- **作业统计**:已交、未交、迟交数量 + +> 学期记录为只读数据,归档后不可修改。如对数据有疑问请联系班主任。 + +--- ### 6. 修改密码 -- 输入原密码和新密码 -- 新密码需符合密码强度要求 -- 修改成功后需重新登录 +**进入方式**:点击底部导航栏的「修改密码」 + +**操作步骤**: + +1. 在「原密码」输入框中输入当前密码 +2. 在「新密码」输入框中输入新密码(6-20位,需包含大写字母、小写字母、数字、特殊符号中的至少3种) +3. 在「确认新密码」输入框中再次输入新密码 +4. 点击「确认修改」按钮 +5. 修改成功后需要重新登录 + +> **密码安全建议**:不要使用生日、学号等容易猜测的密码,不要将密码告诉他人。 --- ## 导航栏说明 -| 导航项 | 说明 | -|-------|------| -| 首页 | 概览信息和快捷数据 | -| 操行分详情 | 完整加减分历史 | -| 作业情况 | 作业缺交记录 | -| 考勤记录 | 考勤记录明细 | -| 学期记录 | 查看历史学期归档数据(操行分、考勤、作业统计) | -| 修改密码 | 修改登录密码 | +底部导航栏包含以下选项: + +| 导航项 | 图标/文字 | 说明 | +|-------|----------|------| +| 首页 | 首页 | 概览信息和最近记录 | +| 操行分详情 | 操行分详情 | 完整加减分历史(支持分页) | +| 作业情况 | 作业情况 | 作业缺交记录 | +| 考勤记录 | 考勤记录 | 考勤记录明细 | +| 学期记录 | 学期记录 | 查看历史学期归档数据 | +| 修改密码 | 修改密码 | 修改登录密码 | + +> 当前所在页面的导航项会高亮显示(蓝色加粗)。 --- ## 常见问题 ### Q: 忘记密码怎么办? -请联系班主任或开发人员重置密码。 +请联系开发人员重置密码。 ### Q: 操行分有误怎么办? 请联系班主任或班长核实并调整。 + +### Q: 页面打不开或显示异常怎么办? +请尝试以下步骤: +1. 清除浏览器缓存后重新打开 +2. 更换浏览器(推荐使用 Chrome、Edge) +3. 如问题持续,请联系开发人员反馈 + +### Q: 考勤记录与实际不符怎么办? +考勤记录由考勤委员录入,如有异议请先向班主任反映,由班主任核实后修正。 + +### Q: 作业状态显示"未提交"但我已经交了怎么办? +请联系学习委员或班主任核实作业提交状态,确认后可以更正。 + +### Q: 登录时提示"账号已锁定"怎么办? +连续输错密码5次会导致账号锁定5分钟,请等待5分钟后重试。如果急需使用,请联系开发人员解锁。 + +### Q: 如何反馈系统问题? +系统相关问题(页面错误、功能异常等)请联系开发人员反馈,并提供: +- 使用的设备和浏览器 +- 出现问题的页面和操作步骤 +- 截图或错误提示信息 diff --git a/frontend/admin/admins.php b/frontend/admin/admins.php index abccb93..9f42f04 100644 --- a/frontend/admin/admins.php +++ b/frontend/admin/admins.php @@ -277,7 +277,6 @@ async function unlockUser(username, realName) { showToast(res?.message || '解锁失败', 'error'); } } -} async function submitResetPassword() { if (!currentResetUserId) return; diff --git a/sql/init.sql b/sql/init.sql index fb29726..7685301 100644 --- a/sql/init.sql +++ b/sql/init.sql @@ -138,6 +138,7 @@ CREATE TABLE IF NOT EXISTS `attendance_records` ( `attendance_id` INT PRIMARY KEY AUTO_INCREMENT, `student_id` INT NOT NULL, `date` DATE NOT NULL, + `slot` ENUM('morning', 'afternoon', 'evening') DEFAULT 'morning' COMMENT '考勤时段:早上/中午/晚修', `status` ENUM('present', 'absent', 'late', 'leave') DEFAULT 'present', `reason` VARCHAR(255) DEFAULT NULL, `recorder_id` INT NOT NULL, @@ -149,7 +150,7 @@ CREATE TABLE IF NOT EXISTS `attendance_records` ( FOREIGN KEY (`recorder_id`) REFERENCES `users`(`user_id`), FOREIGN KEY (`deduction_record_id`) REFERENCES `conduct_records`(`record_id`) ON DELETE SET NULL, FOREIGN KEY (`semester_id`) REFERENCES `semesters`(`semester_id`) ON DELETE SET NULL, - UNIQUE KEY `uk_student_date` (`student_id`, `date`) + UNIQUE KEY `uk_student_date_slot` (`student_id`, `date`, `slot`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 操作日志表 @@ -402,6 +403,36 @@ PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; +-- 迁移:attendance_records 表新增 slot 字段(考勤时段系统 v1.3) +SET @column_exists = ( + SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = 'classmanagerdb' + AND TABLE_NAME = 'attendance_records' + AND COLUMN_NAME = 'slot' +); +SET @sql = IF(@column_exists = 0, + 'ALTER TABLE `attendance_records` ADD COLUMN `slot` ENUM(''morning'', ''afternoon'', ''evening'') DEFAULT ''morning'' COMMENT ''考勤时段:早上/中午/晚修'' AFTER `date`', + 'SELECT ''attendance_records.slot already exists'' AS message' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- 迁移:attendance_records 唯一索引从 (student_id, date) 改为 (student_id, date, slot) +SET @index_exists = ( + SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = 'classmanagerdb' + AND TABLE_NAME = 'attendance_records' + AND INDEX_NAME = 'uk_student_date_slot' +); +SET @sql = IF(@index_exists = 0, + 'ALTER TABLE `attendance_records` DROP INDEX `uk_student_date`, ADD UNIQUE KEY `uk_student_date_slot` (`student_id`, `date`, `slot`)', + 'SELECT ''attendance_records.uk_student_date_slot already exists'' AS message' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + -- 插入初始科目(仅语数英,如不存在) INSERT IGNORE INTO `subjects` (`subject_name`, `subject_code`, `sort_order`) VALUES ('语文', 'CHI', 1),