B-39~B-41: 服务端 API 与双端页面接入

- server.py 新增认证、批次/行/导出、公司/账号/别名主数据、审核
  与审计接口,全部在服务端实施租户隔离与权限校验。
- 前端接入真实登录、首次改密、公司账号、账户登记/审核、批次查询
  与上传持久化;移除演示账号密码预填。
- README 更新运行、登录与样本数据政策说明;HANDOFF 同步默认监听
  行为。DESIGN-TOKENS 与样式对齐当前中性石墨玻璃视觉。
This commit is contained in:
腾讯WorkBuddy
2026-08-16 01:49:54 +08:00
parent 51c301d9df
commit 545837446c
9 changed files with 2046 additions and 380 deletions
+26 -2
View File
@@ -19,18 +19,42 @@ The original Excel file is never modified.
```powershell
python -m pip install -r requirements.txt
$env:PYTHONPATH = "src"
python -m bank_importer.db # 创建/迁移 SQLite 数据库(默认 data/app.db
python -m bank_importer.cli "流水模板"
python -m unittest discover -s tests -v
python server.py
```
访问地址:
数据库与原始文件默认保存在 `data/`(已加入 `.gitignore`)。上传文件按
SHA-256 内容哈希不可变保存,重复上传返回 `duplicate` 状态并复用已有批次。
技术决策见 `docs/decisions/002-persistence.md`
## 登录与账号
系统已启用真实身份认证(决策见 `docs/decisions/003-auth.md`):
- 首次启动若无管理员,自动创建引导管理员:用户名取环境变量
`APP_ADMIN_USERNAME`(默认 `group-admin`),密码取
`APP_BOOTSTRAP_ADMIN_PASSWORD`;未设置该变量则生成随机初始密码并
只在控制台打印一次。
- 引导管理员及管理员创建的公司账号首次登录都必须修改密码。
- 公司、公司账号由管理员在总账端「公司与账号 → 新增公司」或
`/api/admin/companies``/api/admin/users` 动态创建;
公司账号的初始密码与登录账号相同,首次登录强制改密
(「重置密码」仍生成随机一次性密码)。
- 会话有效期 8 小时;同一账号同一 IP 10 分钟内登录失败 5 次将被限流。
访问地址(服务默认监听 `0.0.0.0:4173`,同局域网设备把 `127.0.0.1` 换成本机局域网 IP 即可访问;可用环境变量 `APP_HOST` / `APP_PORT` 覆盖):
- 登录入口:`http://127.0.0.1:4173/`
- 总账管理端:`http://127.0.0.1:4173/admin.html`
- 公司业务端:`http://127.0.0.1:4173/company.html`
公司端上传会把所选工作簿提交到本地 `/api/parse`,与 CLI 使用同一个确定性表头解析器。当前前端是交互原型,公司、账号、期初、提醒和导入确认仅保存在当前浏览器页面中,尚未接入数据库和正式身份认证
公司端上传会把所选工作簿提交到本地 `/api/parse`,与 CLI 使用同一个确定性表头解析器;解析结果、原始文件、批次和源行会持久化到 SQLite,并按登录账号绑定的公司隔离。当前前端是交互原型,期初、提醒、往来匹配等业务状态仅保存在当前浏览器页面中,尚未接入数据库。
## 样本数据政策
`流水模板/` 中的六份银行样本(中信、农行、工行、建行、河南农商、郑州银行)已经项目所有者(白栖知,2026-08-08)书面确认:**基于真实银行流水脱敏后的测试数据**,可以保留在仓库中作为解析器 fixture。新增银行样本的审核要求:必须先脱敏(户名、账号、对方信息等),由项目所有者确认后方可提交;真实生产流水、真实上传文件和导出文件一律不进仓库(见 `.gitignore` 中的 `data/``uploads/``exports/` 规则)。
The CLI prints batch summaries only. It does not print sensitive transaction
details.