# ReviewListTest **Repository Path**: keyley/review-list-test ## Basic Information - **Project Name**: ReviewListTest - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2026-03-30 - **Last Updated**: 2026-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 南宁学院课堂管理 基于 **HarmonyOS SDK 12(Stage 模型)** 的校园课堂管理应用,使用 **ArkTS + ArkUI 声明式开发**,数据全部通过 **Preferences 首选项** 本地持久化,不依赖后端和远程数据库。 ## 一、功能概览 - 教师 / 学生双角色登录,登录失败弹窗提示 - 记住登录状态,下次启动自动登录 - 教师端:班级管理、学生管理、成绩录入、课堂积分增减与班级统计 - 学生端:我的成绩、我的课堂积分、个人信息(只读) - 删除班级 / 移除学生均有二次确认 - 表单非空校验,成绩与积分输入框仅允许数字 - 统一校园风 UI:青绿色主色、白色卡片、圆角、底部/顶部导航 ## 二、预置测试账号 | 角色 | 账号 | 密码 | 姓名 | | --- | --- | --- | --- | | 教师 | `teacher01` | `123456` | 王老师 | | 学生 | `stu001` | `123456` | 刘世熙 | 登录页底部提供“教师 teacher01 / 学生 stu001”快捷填入按钮。 ## 三、技术栈与配置 - HarmonyOS SDK:`compatibleSdkVersion 5.0.0(12)`,`targetSdkVersion 5.0.0(12)`,Stage 模型 - 开发语言:ArkTS - UI:ArkUI 声明式组件 - 路由:`@ohos.router`(`router.pushUrl` / `replaceUrl` / `back` / `getParams`) - 存储:`@kit.ArkData` 的 Preferences,无数据库、无后端 - 开发工具:DevEco Studio(DSH) ## 四、项目目录结构 ```text review-list-test/ ├── AppScope/ │ ├── app.json5 │ └── resources/base/ │ ├── element/string.json │ └── media/app_icon.png ├── entry/ │ ├── build-profile.json5 │ ├── oh-package.json5 │ └── src/main/ │ ├── module.json5 │ ├── ets/ │ │ ├── entryability/EntryAbility.ets │ │ ├── entrybackupability/EntryBackupAbility.ets │ │ ├── model/ │ │ │ ├── User.ets │ │ │ ├── ClassInfo.ets │ │ │ ├── Student.ets │ │ │ ├── ExamScore.ets │ │ │ └── ClassPoint.ets │ │ ├── data/ │ │ │ └── AppRepository.ets │ │ ├── common/ │ │ │ ├── theme/AppTheme.ets │ │ │ ├── utils/CommonUtils.ets │ │ │ ├── utils/WindowUtil.ets │ │ │ └── components/ │ │ │ ├── AppHeader.ets │ │ │ ├── EmptyView.ets │ │ │ └── PointDialog.ets │ │ └── pages/ │ │ ├── LoginPage.ets │ │ ├── MainPage.ets │ │ ├── ClassManagePage.ets │ │ ├── ClassDetailPage.ets │ │ ├── ScoreInputPage.ets │ │ ├── ScorePointPage.ets │ │ ├── StudentScorePage.ets │ │ └── StudentInfoPage.ets │ └── resources/ │ ├── base/element/{color,float,string}.json │ ├── base/media/{app_icon.png,school.svg,...} │ └── base/profile/main_pages.json ├── build-profile.json5 ├── hvigorfile.ts ├── oh-package.json5 ├── README.md └── docs/ ├── ALL_CODE.md └── screenshots/ ``` ## 五、数据模型 | 实体 | 字段 | | --- | --- | | `User` | `id`、`username`、`password`、`name`、`role`(teacher/student)、`studentId` | | `ClassInfo` | `id`、`name`、`teacherId`、`createdAt` | | `Student` | `id`、`classId`、`name`、`studentNo` | | `ExamScore` | `id`、`studentId`、`classId`、`courseName`、`regularScore`、`finalScore`、`totalScore`、`createdAt` | | `ClassPoint` | `id`、`studentId`、`classId`、`delta`(正加负减)、`reason`、`createdAt` | 业务逻辑集中在 `AppRepository`,页面只负责 UI 与交互。 ## 六、Preferences 本地存储设计 存储文件:`nanning_classroom`。 | Key | 内容 | | --- | --- | | `users` | 用户数组 JSON | | `classes` | 班级数组 JSON | | `students` | 学生数组 JSON | | `scores` | 成绩数组 JSON | | `points` | 课堂积分记录数组 JSON | | `sessionUserId` | 当前登录用户 id | | `rememberLogin` | 是否记住登录状态 | | `lastUsername` | 上次登录账号,用于回填 | 首次启动(`users` 为空)会自动写入 2 个测试账号、2 个班级、6 名学生、6 条成绩、8 条积分记录。卸载应用或清除应用数据后会重新初始化。 ## 七、页面与路由 | 页面 | 路由 | 说明 | | --- | --- | --- | | 登录 | `pages/LoginPage` | 角色选择、账号密码校验、记住登录、失败弹窗 | | 首页 | `pages/MainPage` | 按角色展示菜单与统计 | | 班级管理 | `pages/ClassManagePage` | 班级列表、新增、删除(确认) | | 班级详情 | `pages/ClassDetailPage` | 通过 `classId` 参数进入;添加/移除学生(确认) | | 成绩录入 | `pages/ScoreInputPage` | 选择班级/学生,录入课程、平时、期末、总评,自动计算,历史成绩 | | 课堂积分统计 | `pages/ScorePointPage` | 教师:增减积分、排序、总分/平均;学生:只读本人积分 | | 我的成绩 | `pages/StudentScorePage` | 学生只读成绩与平均分 | | 个人信息 | `pages/StudentInfoPage` | 学生个人资料、成绩与积分概况 | 页面间传参示例: ```ts router.pushUrl({ url: 'pages/ClassDetailPage', params: { classId: item.id } }); ``` ```ts const params: ClassDetailParams = router.getParams() as ClassDetailParams; this.classId = params.classId; ``` ## 八、配置文件说明 - `entry/src/main/resources/base/profile/main_pages.json`:注册 8 个页面路由。 - `entry/src/main/module.json5`:入口 Ability 使用 `$media:app_icon`,页面配置指向 `$profile:main_pages`。 - `AppScope/app.json5`:应用名称、图标、bundleName、版本号。 - `entry/oh-package.json5` / `oh-package.json5`:无第三方运行时依赖,仅保留 hypium/hamock 测试依赖。 - `build-profile.json5`:`compatibleSdkVersion` 为 `5.0.0(12)`,Stage 模型。 ## 九、在 DevEco Studio 中运行 1. 打开 DevEco Studio,选择 **File → Open**,打开本工程目录。 2. 等待右上角 Sync 完成(首次会下载/同步 ohpm 依赖)。 3. 如本机没有签名配置:**File → Project Structure → Signing Configs**,勾选自动生成签名(需登录华为账号)。 4. 连接鸿蒙手机或启动手机模拟器,确保设备处于解锁状态。 5. 选择 `entry` 模块,点击 **Run**。 6. 使用测试账号登录: - 教师:`teacher01 / 123456` - 学生:`stu001 / 123456` > 命令行构建时签名工具需要 DevEco 自带的 JBR 21:将 `JAVA_HOME` 指向 `DevEco Studio/jbr`。 ### 重置演示数据 在设备上打开 **设置 → 应用和服务 → 应用管理 → 课堂管理 → 存储 → 清除数据**,或卸载后重新安装,预置数据会重新写入。 ## 十、真机验证 已在 HUAWEI Mate 70 Pro(HarmonyOS API 26)上完成安装与逐页验证: - 登录页、教师/学生首页 - 班级管理、班级详情(4 名学生) - 成绩录入(班级/学生选择、历史成绩) - 课堂积分统计(总分 17、平均 4.3、按积分排序) - 积分加减弹窗 - 学生成绩、学生积分(只读)、个人信息 截图见 [`docs/screenshots`](docs/screenshots)。 ## 十一、实现说明 - 顶部导航使用可复用 `AppHeader` 组件(标题 + 返回按钮,返回调用 `router.back()`),与 router 页面栈保持一致;未混用 `Navigation` 的 `NavPathStack`,避免两套路由栈冲突。 - 密码为演示用明文存储,生产环境应改为加盐哈希并接入服务端鉴权。 - 成绩总评默认按“平时 30% + 期末 70%”自动计算,也可手动修改; - 学号全局唯一;删除班级/学生会级联清理对应成绩与积分记录。