Files
aomin a7605ef8b8 chore(repo): 导入 M-Z 业务底座 V1.9 基线并建立仓库规范
按周工交付的 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),不做归一化以免整树摘要失效。
2026-11-13 17:32:37 +08:00

4.8 KiB
Raw Permalink Blame History

前端与设备端源码(演示用)

这不是主干三端。 按 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。