按周工交付的 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),不做归一化以免整树摘要失效。
112 lines
4.8 KiB
Markdown
112 lines
4.8 KiB
Markdown
# 前端与设备端源码(演示用)
|
||
|
||
> **这不是主干三端。** 按 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`。*
|