# 前端与设备端源码(演示用) > **这不是主干三端。** 按 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` 指向的目录: ```bash 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。 ### 方式二:设备模拟器 ```bash 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`。*