Files
aca-syllabu-front/overview.md
T
wanghu 15762faeac
build / build (push) Successful in 5m20s
commit
2026-10-13 10:47:07 +08:00

87 lines
4.9 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.
# 课程表页面 · 交付说明
## 交付物
| 文件 | 说明 |
|---|---|
| `course-schedule.html` | 课程表页面,单文件、零依赖,双击即可在浏览器打开 |
## 目标站点的情况(重要)
按提供的地址与账号尝试登录后,**未能进入真实页面**:
- 访问 `http://mepc.schsoft.cn/Syllabus/modular/HSchSyllabus#/Home/HSchSyllabu` 会被 CAS 重定向到 `https://sso.bestsch.com/old/index.html`
- 用 `dngjxxadmin` / `Daning@2007` 提交登录,SSO 返回 **「错误的用户名或密码」**(并提示剩余 2 次尝试机会)
- 为免触发账号锁定,未继续重试
因此本页是**按课表业务域(HSchSyllabus 中学课表)的通用信息架构与交互范式**构建的,并已对齐本仓库现有视觉语言。接入真实接口时只需替换页面底部的 `DATA` / `OVERRIDES` 常量,其余渲染逻辑无需改动。
> 若需要 1:1 还原线上界面,请在浏览器中手动登录后提供页面截图(或更新后的可用凭据),我再按实际版式调整。
## 设计系统
### 色彩
沿用仓库 `_varible.scss` 既有令牌,保证与本模块其它页面同源:
- 品牌主色 `#5979ea`(`$color-primary`),语义色 `#45b972` / `#e9b954` / `#e8684a`
- 中性文字 `#404042` / `#555` / `#999`,分割线 `#e9e9e9`,页面底 `#f3f3f3`
- 学科色板 9 色相 × 3 层级(50 底 / 200 边 / 800 字),每个色相固定绑定学科,跨周次配色一致
- 正文对比度按 WCAG AA 4.5:1 选取字色,未依赖透明度压低对比
### 排版与节奏
- 字号阶梯 10 / 11 / 12 / 13 / 14 / 15 / 18 / 19px,仅 400 与 500 两档字重
- 间距 8pt 栅格(4 / 8 / 12 / 16 / 20 / 24 / 32 / 40px)
- 圆角 6 / 8 / 12 / 16px;阴影三级海拔(`--sh-1/2/3`)
- 数字(节次、日期、时间)统一 `tabular-nums`,纵向对齐
### 组件
工具栏 / 周次条 / 表头 / 节次轴 / 课程块 / 时间指示线 / 图例 / 日视图行 / 日期选择条 / 详情侧栏 / 空状态 / Toast,均有 default、hover、selected、focus-visible 态。
## 信息架构
顶部工具栏(学期 · 班级 · 周/日视图切换 · 回到本周 · 打印)→ 周次条(20 周,当前周绿色标记并自动居中)→ 主区(周视图 7×8 网格 / 日视图 8 节次列表)→ 图例 → 详情侧栏。
课程块承载:学科、教室、教师;连堂课时合并为一个块并标注「连堂 N 节」;调课/停课在右上角打角标。
## 无障碍
- 全部交互元素为原生 `button`,可 Tab 聚焦,`:focus-visible` 统一 2px 焦点环
- 周次条 `aria-current`、日期条 `aria-selected`、侧栏 `role="dialog"` + `aria-modal`
- 课程块 `aria-label` 输出完整信息(学科/星期/节次/教师/教室),避免仅靠颜色传达状态
- `Esc` 关闭侧栏,`←` `→` 切换周次
- 尊重 `prefers-reduced-motion`
## 已修复的缺陷(实现过程中实测发现)
1. **7 列网格塌成 1 列**:`minmax(104px, 1fr)` 在宽度由内容决定的父级中会让轨道取到最小像素值,7×min 撑爆容器后折叠。改为 `repeat(7, 1fr)` 比例轨道,改由 `.week-wrap` 的 `min-width` 提供可用性下限。
2. **周末两列被裁切**:`.week-wrap` 的 `min-width` 未计入边框像素,补 `+ var(--day-count) - 1`。
3. **日视图默认全空**:基准日是周六(无课),且日视图没有日期选择器。新增日期选择条,并让默认日落到「今天(若有课)/ 本周第一个有课日」。
4. **周次条显示半截周**:20 周按钮改为弹性收缩 + `min-width` 下限,并在启动时把当前周滚入视野中部。
## 验证方式与结果
以 `file:///` 在真实 Chromium 中打开,逐项实测(非静态检查):
| 检查项 | 结果 |
|---|---|
| 页面加载 / 控制台报错 | 通过,无未捕获错误 |
| 周视图:7 列表头、8 节次轴、39 个课程块 | 通过 |
| 课程块与背景网格对齐(left/top 像素级) | 通过 |
| 周末列完整可见(周日 right=1222 < 视口边缘) | 通过 |
| 点击课程打开详情侧栏(标题/8 行字段/色板) | 通过 |
| `Esc` 关闭侧栏 | 通过 |
| 周 / 日视图切换、日期选择条 | 通过 |
| 班级切换(高一1班→高二1班,课程数随之变化) | 通过 |
| 第 5 周「调课」、第 11 周「停课」角标 | 通过 |
| `←` `→` 周次键盘导航 | 通过 |
| 打印样式表存在 | 通过 |
## 后续接入建议
1. 用接口数据替换 `DATA`(结构:`[星期索引, 起始节次, 连堂节数, 学科, 教师, 教室, 备注]`)与 `OVERRIDES`(调课/停课)。
2. `TERM_START` / `TOTAL_WEEKS` / `SLOTS` 改为读取教务基础数据;`NOW` 去掉硬编码改用系统时间。
3. 若需并入 Vue 项目,把 `<style>` 拆到 `src/assets/styles/components/_course.scss`,模板迁为 `views/syllabus/HSchSyllabus.vue`,`SUBJECTS` 色板与渲染函数可直接复用。