按周工交付的 SEC-Z-01 清理后源码建立 M-Z 主干,并按 Git 仓库惯例重排目录。 - aomin-gateway/ 后端工程 87 文件,原样保留,路径与构建命令未变 - demo/ 演示前端与设备模拟器 9 文件(原 02_前端与设备端),非正式三端 - docs/handover/ 交付与安全清理材料 6 份,内容未改 - docs/contract/ J-00 规格、OpenAPI、内部五接口、状态机、Mock 样例 - docs/reference/ 指纹与校验清单,含 84 个源码文件的 sha256 清单 目录重排只动位置不动内容:源码树 84 文件哈希与交付一致,逐文件自校验通过; 12 条 Flyway 迁移与交付包内镜像逐字节一致。 未纳入:迁移镜像目录(与工程内一套重复,改留指纹)、target/、证据 raw、 应急恢复脚本、评审用虚构台账数据。 安全:SEC-Z-01 15 处明文已清零,导入前重新扫描无新增命中,本仓库无历史污染。 行尾按交付字节原样保存(.gitattributes 设 * -text),不做归一化以免整树摘要失效。
前端与设备端源码(演示用)
这不是主干三端。 按 AM-S1-GOV-020 §6.2(3),正式三端的接入由陈工统一完成。 这份是 M-Z 配套的演示前端 + 设备模拟器,用途只有两个:跑通链路、看接口效果。
一、目录
web/
├── index.html 首页(三个入口 + 账号与地址)
├── common.js 公共库:token 命名空间、fetch 封装、toast
├── admin/index.html 运营后台(登录、设备、告警、住户、用户、台账…)
└── family/
├── index.html 家属端 H5(告警、探视、设置)
├── map-baidu.html 百度地图选点
├── map-offline.html 离线地图(无 AK 时自动降级到这里)
└── map-picker.html 天地图选点(含运行时占位符)
sim/
└── sim_device.py 设备模拟器:扮演网关 + 7 台设备,只调 I-01/I-02/I-12
| 文件 | 行数 | 说明 |
|---|---|---|
web/admin/index.html |
1110 | 体量最大,六个业务页签 |
web/family/index.html |
1763 | 家属端全部功能 |
sim/sim_device.py |
578 | 纯 Python 标准库,无第三方依赖 |
二、怎么跑
方式一:跟着后端跑(推荐)
后端把 /app/** 映射到 biz.web.dir 指向的目录:
set DB_PASS=<口令>
set BIZ_DEMO_ENABLED=true
java -Dbiz.web.dir="<本目录>/web" -jar aomin-gateway/target/aomin-gateway-0.0.1-SNAPSHOT.jar ^
--server.port=8080
打开:
| 地址 | 页面 |
|---|---|
http://127.0.0.1:8080/app/index.html |
首页 |
http://127.0.0.1:8080/app/family/index.html |
家属端 |
http://127.0.0.1:8080/app/admin/index.html |
运营后台 |
页面里写的接口地址是相对路径(
/api/v1/...),所以必须经后端提供,不能双击 html 直接开——那样会 404。
方式二:设备模拟器
python sim/sim_device.py # 默认 9901 控制台,往 8080 发事件
python sim/sim_device.py --fast # 快节奏(每轮 3 秒)
python sim/sim_device.py --seed # 启动先补历史告警
python sim/sim_device.py --quiet # 只开控制台,不自动产生事件
可覆盖的环境变量:
| 变量 | 默认 | 说明 |
|---|---|---|
SIM_BASE |
http://127.0.0.1:8080 |
目标 M 层地址 |
SIM_PORT |
9901 |
模拟器控制台端口 |
三、运行时占位符(4 个,不要改成具体值)
| 占位符 | 出现位置 | 部署时替换成 | 不替换会怎样 |
|---|---|---|---|
__BAIDU_AK__ |
family/map-baidu.html(2 处) |
自己的百度地图 AK;或启动前 window.BAIDU_AK = 'xxx' 注入 |
地图加载失败,自动降级到离线地图,不影响其他功能 |
__WB_HTTP_PORT__ |
family/map-picker.html |
天地图服务端口 | 选点页不可用 |
__WB_TMAP_SECRET__ |
family/map-picker.html |
天地图服务密钥 | 选点页不可用 |
__PORT__ |
sim_device.py 内置控制台页面 |
由脚本自己按 SIM_PORT 替换,不用手改 |
— |
map-picker.html第 10 行原本就写着「__WB_HTTP_PORT__/__WB_TMAP_SECRET__是运行时占位符,禁止改成具体值、禁止内嵌任何 key」——按这条执行。
四、本次做了什么清理(2026-11-13)
| 改动 | 原因 |
|---|---|
| 删掉后台登录页「密码」输入框里的预填值 | 原来 value 里写死了演示口令,打开页面就明文可见 |
| 两处"演示账号 admin / 口令"的提示改为"口令按部署说明" | 页面里不再出现任何口令字面值 |
百度 AK 由真实值改为 __BAIDU_AK__ 占位符 |
原 AK 是真实密钥,进 git 会永久留痕、可被盗刷配额 |
| 首页"flyway 1.0.18 / 83 表"改为"1.0.28 / 87 表" | 旧数字,与当前迁移不一致 |
没动的:家属端演示账号 13800000000 / 123456 的提示保留——那是 BIZ_DEMO_ENABLED=true 时库里真实播种的演示数据,不是系统凭据;只在不显示演示数据的环境才会失效。
五、边界
| 项 | 说明 |
|---|---|
| 不是正式三端 | 演示页,不做兼容性、无障碍、国际化;正式三端由陈工按 §6.2(3) 接入 |
| 接口是相对路径 | 必须由后端 /app/** 提供,不能独立部署到别的域名下直接调 |
| 地图依赖外部服务 | 百度/天地图都在公网;内网环境会走离线地图降级 |
| 权限只做前端遮挡 | 真正的数据权限在后端(A-Z-03 / AUTH-01),页面隐藏按钮不等于没权限 |
| 模拟器是"网关+设备" | 它只调 I-01/I-02/I-12,不碰任何业务接口,和真设备走同一条路径 |
配套:后端源码与契约见 周工_SEC-Z-01清理后_源码与说明_20261113.zip。