31 Commits
106 changed files with 23601 additions and 635 deletions

No files matched your search

+6 -1
View File
@@ -31,7 +31,7 @@ jobs:
- name: Set up .NET
uses: https://github.com/actions/setup-dotnet@v4
with:
dotnet-version: "10.0.302"
dotnet-version: "10.0.400"
- name: Set up Node.js
uses: https://github.com/actions/setup-node@v4
@@ -46,6 +46,11 @@ jobs:
npm ci
npm run build
- name: Install Chinese PDF font for backend tests
run: |
sudo apt-get update
sudo apt-get install --yes fonts-noto-cjk
- name: Run backend tests
run: dotnet test Jiaowu.slnx --configuration Release
+22 -4
View File
@@ -67,6 +67,14 @@ npm run cap:open:android
并记录签到设备摘要、IP、失败次数和异常频率,供任课教师在考勤明细中复核。Android
最低版本为 API 26;相机和精确位置权限均按需申请。
### Web/PWA 应用
浏览器通过 HTTPS 打开系统后,可使用浏览器的“安装应用”功能将明序教务固定到桌面或
开始菜单。PWA 会缓存应用界面与静态资源;接口请求始终走网络,不会离线缓存登录态、
成绩或其他业务数据。发现新版本时由用户确认刷新,避免正在填写表单时被强制中断。
Capacitor Android 构建会自动禁用 PWA Service Worker,仍使用原生能力和独立的 OTA
更新流程。
### App 前端热更新
App 内置自建 OTA 更新器。它只更新 `dist` 中的 HTML、JavaScript、CSS 和静态资源;
@@ -79,16 +87,18 @@ App 内置自建 OTA 更新器。它只更新 `dist` 中的 HTML、JavaScript、
```powershell
Set-Location web
npm ci
npm run ota:package -- --version 1.0.1
npm run ota:package
```
ZIP 会生成到 `.artifacts/app-updates`,根目录直接包含 `index.html`。使用
ZIP 会生成到 `.artifacts/app-updates`,根目录直接包含 `index.html`,其版本固定取自
`versions.props` 的 `JiaowuFrontendVersion`(传入 `--version` 时也必须一致)。使用
SuperAdmin 进入“运维与审计 → App 前端热更新”,上传 ZIP,填写目标平台、通道和
兼容的原生版本后先保存为草稿,再执行发布。当前 Android 工程的 `versionName` 为
`1.0`,因此对应更新包的“兼容原生版本”应填写 `1.0`。
App 启动后向 `/api/app-updates/latest` 检查版本,在后台下载并校验服务端提供的
SHA-256,下次启动时切换。新资源若未能成功启动,原生更新器会自动回滚。再次发布
App 启动、以及从后台回到前台超过 5 分钟后,会向 `/api/app-updates/latest` 检查版本,
在后台下载并校验服务端提供的 SHA-256;切到后台或下次启动时切换,并保留当前页面地址。
新资源若未能成功启动,原生更新器会自动回滚。再次发布
已归档版本即可回滚正式通道;不同原生版本、Android/iOS、测试/正式通道彼此隔离。
更新版本元数据和 ZIP 保存在数据库中,部署新服务端版本前必须先执行
`--migrate-only`。
@@ -184,6 +194,14 @@ Sso__CallbackUrl=https://jiaowu.example.edu.cn/signin-keycloak
显示当前生效的完整回调地址。多实例部署应配置 Redis,以便任意实例都能兑换两分钟内
有效、使用后即删除的 SSO 登录码及五分钟内有效的绑定意图。
Android App 使用系统浏览器完成 Keycloak 登录,再通过 `https://eis.biss.click/sso/callback`
或 `/sso/bind` 的 Android App Link 回到应用;Keycloak 的 Valid redirect URI 仍然只配置
`Sso__CallbackUrl`(即 `/signin-keycloak`),不要配置 `mingxu://`。正式发布前,将 Play
App Signing 证书的 SHA-256 指纹写入 `web/public/.well-known/assetlinks.json`,并确保该文件
以 `application/json` 在 `https://eis.biss.click/.well-known/assetlinks.json` 可匿名访问。当前
配置的包名为 `edu.mingxu.jiaowu`;站点域名或正式签名证书变更时必须同时更新此文件和 Android
Manifest 后重新签名发布 APK/AAB,此类变更不能通过 OTA 下发。
用户登录后可从页面右上角进入“个人账户”,主动绑定或解除 Keycloak 账号。主动绑定先
使用当前 JWT 创建五分钟有效的一次性绑定意图,再跳转 Keycloak;回调只能绑定到发起该
意图的本地账号。解绑需要再次验证本地密码,避免仅凭未锁屏的登录会话解除身份关联。
+1 -1
View File
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "10.0.302",
"version": "10.0.400",
"rollForward": "latestPatch"
}
}
Loaded 3 of 106 files, more files were not shown because too many files have changed in this diff. Show more