admin.xpcool.com/.workbuddy/memory/CHANGELOG.md
夏犀麟 f70f5dcff8
Some checks failed
Build and Deploy (admin.xpcool.com) / build-and-deploy (push) Failing after 1h0m22s
chore(other): 登录仅加密密码字段(豁免整体加密)
- loginApi 恒走密码字段混合加密,提交 {username, encryptedKey, encryptedData}
- 请求拦截器豁免 /auth/login 整体加密
2026-08-28 00:29:00 +08:00

40 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# admin.xpcool.com 变更记录
> 倒序最新在上。格式YYYY-MM-DD | 类型 | 摘要
2026-08-27 | CHG | 登录接口豁免全量加密永远只加密密码字段loginApi 始终走 hybridEncryptLogin提交 {username 明文, encryptedKey, encryptedData}request.ts PLAIN_ROUTE_FRAGMENTS 增 /auth/login请求拦截器不再整体加密登录 body。全量模式 5 项 + dev 15 项 E2E 验证通过
2026-08-27 | CHG | 全量请求/响应加密(生产 VITE_GLOB_API_ENCRYPT=true①crypto.ts 增 encryptPayload整体加密任意对象返回 aesKeyB64 会话密钥)+ decryptPayloadAES-GCM 解密后端响应,密文=nonce||ciphertext||tag②request.ts 增 installCryptoInterceptors——请求拦截器将整个 JSON body 混合加密public-key 豁免、FormData/无 body 跳过、响应解密拦截器最先注册axios 响应拦截器按注册顺序执行)还原 {code,message,data}requestClient 与 baseRequestClient 均安装apiFullBodyEncrypt/fetchPublicKeyForCrypto 导出③auth.ts loginApi、system.ts createAdmin/resetAdminPassword 全量模式下直接传明文密码由拦截器整体加密(开发模式仍走密码字段混合加密);④.env.production VITE_GLOB_API_ENCRYPT=true / .env.development=false。⚠TS 坑Uint8Array.subarray 返回 ArrayBufferLike 泛型不满足 BufferSource需 new Uint8Array() 拷贝axios 类型从 @vben/request re-export 导入web-tdesign 未声明 axios 依赖。typecheck+oxlint 全绿,全量/仅密码两种模式 E2E 均通过
2026-08-27 | CHG | 登录/创建/重置密码全链路加密传输RSA+AES 混合加密,与后端配套):①新增 src/utils/crypto.ts——Web Crypto API 零依赖importKey('spki') 导入后端公钥、随机 AES-256-GCM 加密载荷nonce 12B 前置、GCM tag 随密文、RSA-OAEP(SHA-256) 加密 AES 密钥,输出 {encryptedKey, encryptedData};公钥 5 分钟内存缓存。②api/core/auth.tsgetPublicKeyApi并发去重+ loginApi 先拉公钥再加密 username/password 提交网络传输无明文密码。③api/system.tscreateAdmin/resetAdminPassword 的 password 走 hybridEncryptField 加密encryptField 复用公钥缓存。④注意Web Crypto 仅安全上下文可用https/localhost/127.0.0.1http://IP 访问会明确报错。typecheck + oxlint 全绿
2026-08-27 | CHG | 用户管理改造(页面标题改"用户管理",表单/列表加 Bark设备ID、pushplus token+ 通知模块 3 页(规则:渠道多选+用户多选+标题/内容模板+测试按钮;渠道:启用+JSON 配置;日志:事件/渠道/结果/时间筛选)+ 自动任务 2 页任务列表cron 编辑/启停/手动执行;运行日志:按任务筛选+耗时/摘要/错误api/notice.ts + autoJob.ts + system.ts 扩展AdminItem 加渠道字段typecheck 通过
2026-08-27 | FIX | 前后端联查修复「界面/菜单/工作台异常」:①本地库缺 010_server_log_enhance 增量列admin_operation_log 无 ip_location/admin_username 等)致操作日志接口 500已导②本地缺工作台/招聘菜单+admin_role_menu 关联,已导 013_workbench_menu+recruitment/003_menu③工作台快捷入口 /system/log/* 是死链(真实路由 /log/*)已改;④打通 Drawer 重构遗留编译错6 页 @vben-core/popup-ui 误引改 @vben/common-ui、preferences 补 languageToggleButtonPosition、清未用变量、menu/log 页 lint 债7dc9bc6钩子全绿⑤发现审计 admin_username/user_agent 长期为空=线上跑旧二进制,新构建验证 248 号记录字段完整,历史空账号已按 user_id 回填121 条);⑥本地 xxcool/opuser 密码已重置为 opuser123 便于联调
2026-08-27 | CHG | 三大改造①移除国际化多语言仅留中文——preferences.ts 固定 locale=zh-CN删除 header/toolbar/user-dropdown 三处语言切换入口、偏好面板语言选择项(general.vue/appLocale/widget.vue languageToggle 位置配置)config.ts 禁 languageToggle 且 order 移除;删除主应用与 packages/locales 的 en-US 语言包locales/index.ts loadDayjsLocale 仅留 zh-CN。②新增主题色管理——theme.css 品牌色改为引用 --primary 变量(不再写死 #4f5bff),背景/主按钮渐变用 color-mix 跟随主题色,配合 useTDesignDesignTokens 使偏好面板 BuiltinTheme 切换主题色真正生效constants.ts default 主题色与 config.ts colorPrimary 统一为靛蓝 hsl(235 100% 65%)。③业务弹窗统一为 vben 抽屉——6 页(system/{role,menu,admin}、recruitment/push、house/{listing,community})的 t-dialog 全部替换为 useVbenDrawer(<Drawer>)drawerApi.open/close/setState(标题)/lock(提交中)community/listing 抽屉加宽(class w-160/w-150)
2026-08-27 | CHG | 服务器安全日志页挂在系统监控菜单下id=96views/monitor/security/index.vue——顶部 4 统计卡片SSH爆破/fail2ban封禁/成功登录/总数)+ TOP 攻击源标签区 + 筛选来源IP/事件类型/时间范围 t-date-range-picker+ Vben VxeTable 列表(时间/来源IP/来源端口/目标端口/事件类型标签/详情 tooltip事件标签按类型配色api/serverSecurity.tslist/stats 全 POST无 URL 参数typecheck 通过
2026-08-27 | CHG | 全量表格重构views 下全部 11 个 t-table 页面统一改为 Vben Vxe TableuseVbenVxeGrid#/adapter/vxe-table+ Vben TableAction 行操作——system/{log(范式),login-log,admin,role}、recruitment/{info,crawler,push}、house/{data,listing,community,presale}、dashboard/workbench两处本地小表 proxyConfig.enabled=false + gridApi.setGridOptions 写数据。要点gridOptions 需注解 VxeTableGridOptions否则 type:'seq' 推断 string 报错);单元格自定义用 columns[].slots.default + h(TDesign组件);远程分页走 proxyConfig.ajax.query 返回 {items,total};筛选区保留手写 TDesign 组件不动admin/role/listing/community 行操作 ActionItem 带 auth 权限码、删除 danger 标红listing 多选批量标记改 vxe checkboxConfig + gridApi.grid.getCheckboxRecords()confirm 弹窗交互(删除/重置密码)保留 DialogPlugin 不变typecheck 通过
2026-08-27 | FIX | 恢复丢失的前端代码recovery 分支经 rebase/改名(dev↔main)折腾后工作树回退,未提交改动全丢;从悬空提交 f02a514recovery 工作树快照,含 HEAD 缺失的全部文件)整体恢复 apps/web-tdesign/src——含 styles/theme.css 全局主题、dashboard/workbench 工作台页、system 五页卡片化美化、操作日志增强版(VxeTable)、house 预售/楼盘地图、recruitment 页面;另补 log 页卡片美化(wb-page-head+t-card)。已提交保护
2026-08-26 | CFG | 安装 TDesign MCP~/.workbuddy/mcp.json 新增 tdesign-mcp-server: `npx -y tdesign-mcp-server@latest`v0.2.4 启动验证通过);约定:后续后台界面开发优先用 TDesign MCP 查官方文档get-component-docs 等)
2026-08-26 | FIX+CHG | 修复前端编译错误access.ts layoutMap 重复声明致 vite Transform PARSE_ERROR菜单管理树形改用 tdesign 官方方案:`t-enhanced-table`t-table 不支持 tree+ tree{childrenKey/treeNodeColumnIndex/defaultExpandAll/indent} + 异步数据后 `ref.expandAll()`defaultExpandAll 仅首次渲染生效)——替代先前扁平化+缩进的自造方案
2026-08-27 | CHG | 看房新增新房预售页views/house/presale/index.vue预售证列表证号/楼盘/开发商/区县/位置/楼栋/套数/面积/用途/发证/公示日期,筛选 region/purpose/keywordapi/house.ts 加 PresaleItem/getPresaleList菜单 95 新房预售014 种子component=house/presale/indextypecheck 通过
2026-08-26 | CFG | 新增 .gitea/workflows/deploy.ymlGitea act_runner 自动部署push main/dev → 下载 node22 二进制npmmirror覆盖镜像 node20pnpm11 需 node:sqlite→ corepack pnpm@11.16.0 → pnpm install → 直接 vite build避开 turbo 卡死)→ cp dist 到 /data/www/admin.xpcool.com/YAML 已校验
2026-08-26 | CHG | 看房 house 模块前端落地api/house.ts + views/house/{community,listing,dashboard,data}/index.vue小区 CRUD、房源多维筛选+多选批量标记笋盘/低可信、看板 echarts 概览卡片/区域均价柱状/挂牌vs成交趋势菜单走后端动态路由011 种子 component=house/xxx/index图表复用 @vben/plugins/echarts 的 EchartsUI/useEcharts
2026-08-26 | DEP | 线上 dist 更新为「无下拉版」vite build 产物index-index-B-XlZ2uN.js并部署 /data/www/admin.xpcool.com/,修复登录 no rows根因=线上仍是 19:32 旧版(默认 admin/admin123admin 已删故报错;验证:线上 index 新版 + xxcool 登录成功 + js 无 admin123 webhook 自动部署未生效deploy-webhook.service disabled/inactive8/22 11:52 停止9000 未监听),提交代码不会自动部署,需 `sudo systemctl enable --now deploy-webhook` + Gitea 仓库 webhook 配置
2026-08-26 | CHG | 登录页移除账号下拉与代码内置账号密码:删除 selectAccount 字段、MOCK_USER_OPTIONS 及自动填充逻辑BasicOption import 一并清理),前端不再存任何账号密码,改为手输 + 勾选「记住账号」AuthenticationLogin 内置 rememberMelocalStorage 仅记用户名不存密码);本地 dev(5173) 浏览器验证:无下拉、仅用户名/密码/滑块 + 记住账号复选框
2026-08-26 | CHG | 登录页默认账号替换为 xxcool/xxCool@2026MOCK_USER_OPTIONS 仅留 Super(xxcool)selectAccount 默认值、密码自动填充同步;本地 dev(5173) 验证登录页下拉正常combobox Super、账号密码自动填充、展开有 Super 选项),无 admin123 残留;⚠️ 构建注意pnpm/turbo build 会卡死(两次 15min+ 无产出),需直接 `./node_modules/.bin/vite build --mode production`(约 20s完成线上 dist 仍为旧版,待部署
2026-08-26 | DEP | 生产部署上线193.112.118.168pnpm build:tdesign 构建 web-tdesign 上传 /data/www/admin.xpcool.com/nginx HTTPS 站点(证书 /data/nginx/ssl/admin.xpcool.com/80→301静态托管 + /api/service 反代 127.0.0.1:10100https://admin.xpcool.com 首页 200、同源 API 登录通过
2026-08-26 | CHG | .env.production 的 VITE_GLOB_API_URL 由 https://mock-napi.vben.pro/api 改为 /api/service同源相对路径由 nginx 反代到后端 10100
2026-08-26 | REQ | RBAC 至按钮级细粒度全链路核查通过backend 动态路由menu/routes+ 23 权限码下发auth/codes+ 三个管理页admin/role/menu按钮级 hasAccessByCodes 与后端 seed 权限码逐一匹配dev server20104经 vite 代理→10100 登录/取码 200后端配套修复禁用角色权限隔离漏洞见 service CHANGELOG
2026-08-26 | FIX | 登录接口 502 联调修复:根因为后端 10100 未启动vite 代理连接拒绝→502启动后端后 login/info/codes/menu-routes 全链路 200。另记本机 corepack/pnpm shim 路径转换损坏,需用 `npm exec --package=pnpm@11.16.0` 代替 pnpm 命令
2026-08-26 | CFG | CHANGELOG 纳入 git 管理(.gitignore 放行 .workbuddy/memory/CHANGELOG.md中央工作空间迁移至 ../workbuddy.xpcool.com相对路径索引
2026-08-26 | CHG | 后端 API 统一前缀 /api/service/ + 端口 10100vite 代理改为 '/api/service'→:10100合并原 /admin、/api 两条api 文件全部适配auth/menu/user/system/log去 v1、前缀 /api/service、全 POST、CRUD 改动作式路径)
2026-08-26 | FIX | 修复依赖装不上pnpm 11.16.0 强依赖 node:sqlite`NODE_OPTIONS=--experimental-sqlite` 后 install 成功;同步更正 agents.md 主应用为 web-tdesigndev:tdesign5999/6000 端口)
2026-08-26 | CHG | 修正登录页默认账号selectAccount 默认 admin密码映射改为种子账号 admin/admin123便于联调
2026-08-26 | CHG | 同步三铁律(中文注释/做记录/中文优先)至 AGENTS.md「统一工作约定」小节
2026-08-26 | CFG | 建立统一变更记录机制CHANGELOG接入 xpcool.com 中央索引