Files
endorphin-tessera-gui/docs/campus-lms-demo.md
2026-10-25 00:30:19 +08:00

85 lines
4.9 KiB
Markdown
Raw Permalink 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.
# Endor Campus 多页面示例
源码:[campus-lms.endor](../examples/campus-lms.endor)。这是参考 Instructure
Canvas LMS 信息结构的本地学习环境示例,使用虚构学生、课程与作业数据。
## 运行与页面
在 Tessera 按 F12 打开 Console,点击 `>` 输入位置,粘贴完整源码并按 Enter。
建议在新会话中运行一次;重复执行会创建另一组页面。
源码建立七个真正的 managed Page:仪表盘、程序设计、高等数学、学术英语、
作业中心、成绩总览和实验提交详情。每页进入应用现有的标签栏,可以切换、
关闭,再通过课程卡片或导航重新打开。没有额外模拟一套网页标签栏。
酒红侧栏提供全局导航,仪表盘用三种课程色区分课程,课程主页展示各自的
介绍和学习单元;作业中心汇总课程作业,成绩总览提供课程成绩与实验反馈。
侧栏的「课程」入口回到程序设计示例课,其余课程从仪表盘卡片或成绩行进入。
## 对象与交互
三门课程各有一个 `CampusCourse` 对象。程序设计的 `CampusWork` 对象被
仪表盘、作业中心、成绩页和提交详情共同引用,界面通过 `ui.textOf` 绑定字段。
- 「模拟提交实验」更新提交内容和状态;作业中心同步显示等待评分。
- 「应用示例评分」写入预设的 92 / 100 与反馈,并把课程成绩改为 88.5%、
学习进度改为 4 / 6;课程主页、成绩总览和仪表盘同步更新。
- 「恢复演示数据」恢复未提交、无分数、课程 86.0% 和 3 / 6 的进度。
页面导航通过接收 `Event` 的 `CampusTarget.open` 方法调用零参数 `Page.open()`。
不能把有可选 Window 参数的 `Page.open` 直接当作点击回调,否则 Event 会被
误当作 Window。重新打开页面会保留共享对象中的状态。
## 原生验证
通过原生 Console 输入源码并执行,实际点击检查了:
- 三门课程内容各不相同,卡片和全局导航能切换真实 Page。
- 提交后作业中心显示「已提交 · 等待评分」。
- 评分后详情显示 92 / 100 与反馈,课程主页显示 88.5% 和 4 / 6,
成绩总览与仪表盘也显示 88.5%。
- 关闭高等数学标签,再从仪表盘卡片重新打开成功。
- 恢复数据后,详情和成绩总览恢复未提交、无分数和课程 86.0%。
截图保存在本次会话的 `/private/tmp/endor-campus-demo/`,包括仪表盘、
评分详情、成绩总览与恢复后的仪表盘。首次验证时没有成功的连续录屏;
后续建模视频见下节。
本阶段只增加 Endor 源码与说明,没有修改 Rust 渲染器。验证采用原生运行与
手动点击,以及 `git diff --check`;未运行 cargo test 或自动 smoke 脚本。
## 建模过程视频(2026-10-25)
[观看 MP4](media/endor-campus-modeling.mp4) ·
[中文字幕 SRT](media/endor-campus-modeling.zh.srt)
视频约 72 秒、1920 × 1200,无声,附带中文软字幕与章节。播放器未自动显示
字幕时可以开启中文字幕,或者加载同目录 SRT。
在新 Console 会话中分段执行同一份示例源码:先定义课程和作业模型,再定义
界面组件,创建共享对象图与七个 Page,逐步渲染仪表盘、课程、作业中心、
成绩总览,最后绑定提交与评分事件。末尾实际点击提交和预设评分,展示
作业状态、总评与学习进度在各页之间同步。代码分段粘贴,不是逐字输入。
系统屏幕采集设备虽然可被 FFmpeg 识别,但没有收到画面;因此使用原生
应用控制接口在操作期间连续抓取 Tessera 窗口,再由已有 FFmpeg 编码为 H.264。
共采集 299 帧,采样帧率随操作变化,剪去各采集段之间的等待;输出封装为
15 fps,重复帧不代表原始采样达到了 15 fps。没有使用静态成品截图重演操作。
应用重置后,在首次渲染前保留了上一次页面的显示快照,首次渲染后由新会话
的页面替换。视频包含该过程,并非从应用启动开始的系统录屏。
检查了视频参数、全片解码和抽帧画面;全片解码无错误。录制阶段没有修改
示例程序或 Rust 渲染器。
## 范围
这是多页面交互示例,没有 Canvas 登录、服务器、持久化、真实文件上传或
通用成绩计算。提交文件名为示例字符串,评分和总评是明确的预设状态,
不是根据公式计算的结果。页面使用双向 ScrollBlock;未完成所有小窗口尺寸的
布局验证。它不替代完整的 LMS 产品。
参考的是 Canvas 的课程卡片、全局导航、作业状态和成绩反馈结构:
[Dashboard 官方指南](https://community.instructure.com/en/kb/articles/664620-how-do-i-use-the-dashboard)、
[Grades 官方指南](https://community.instructure.com/en/kb/articles/661305-how-do-i-view-my-grades-in-a-current-course)。
没有登录或查看需要账户的学校数据。