caoqianming
|
ef611b0666
|
feat(admin): 角色化管理后台 + 分页各用户用量 + bump 0.9.0
- users 加 role 列(user/admin,migration 0009);make_require_admin 按 DB role gate(不进 JWT,改完即时生效)
- /v1/admin/overview 监控总览:runtime(并发/线程池/SSE/RSS)+ tasks + users + usage 总用量 + storage
- /v1/admin/usage/users 分页各用户 token 用量(全表 LEFT JOIN 含零用量,cost desc,稳定排序)
- /v1/me 返 role;登录/建用户响应带 role;main.py user role / user add --role;建用户弹框加角色下拉
- 独立页 web/static/admin.html + js/admin.js(阈值/热力色差、响应式、10s 轮询、独立翻页);dev SPA admin 才显"管理"入口
- 文档同步:DESIGN §7.3/§7.4、PROGRESS、RUN
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-12 10:02:20 +08:00 |
caoqianming
|
36dbdb2dda
|
refactor(dev): 前端模块化 Step 2 — 抽出 embed.js(iframe 模式)
父页面经 postMessage 推 token 进入应用 + 401 重签(原 main 1147–1209 +
顶层 _embedInitialTaskHandled 一次性标志)→ embed.js(75 行)。
- 导出 embedInit(boot 调)+ embedPostToParent / embedShowWaiting
(auth 的 logout 在 embed 下通知父页面/显示等待态)—— 后两个从 main
迁出后,auth.js 对它们的 import 从 ./main.js 改指 ./embed.js
(auth 仍从 main import enterApp)。
- 反向 import main glue enterApp / loadTaskList / selectTask。
main↔embed、auth↔embed 均运行时调用环,安全。
main.js 删至 1154 行(2719 起,已搬出约 58%)。node 全检过、
import/export 一致性过、静态测试 2 过。剩 main 内:enterApp glue +
tasks(列表/选择/渲染消息)+ stream(发送/SSE)+ boot + Esc 关栈。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-07 19:35:01 +08:00 |
caoqianming
|
16dc1719eb
|
refactor(dev): 前端模块化 Step 2 — 抽出 auth.js(首个 main↔模块 ES 环)
登录(邮箱密码 / UUID+PLATFORM_KEY 两 tab)+ 管理员加用户 + 改密码
三节(原 main.js 21–227)→ auth.js(218 行)。
- 各入口在模块顶层自绑 onclick;只导出 logout(供全局 20 处 401 处理)
/ closeChpwModal(供 main 的 Esc 统一关弹窗栈)。
- 反向 import main 的 glue:enterApp / embedPostToParent / embedShowWaiting
(main 给这三个加 export)——首次引入 main↔auth 循环依赖。三者皆 hoisted
函数声明,模块实例化即就绪,且只在运行时(点击/401)调用,绝不在顶层
求值时触发 → ES live binding 下安全。后续 features↔glue 环同理。
- main.js 删至 2397 行。node --check 双过、auth 私有符号在 main 清零、
静态测试 2 过。逻辑零改动。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-06 21:39:06 +08:00 |