feat(syb): 允许采购员在同步记录页立即同步 #236

Open
opened 2026-09-07 14:54:55 +08:00 by ila · 3 comments
Owner

来源与范围

2026-09-07 用户反馈普通用户在 Admin SYB 同步页看不到/不能使用立即同步,并确认“按照你的建议建工单,做”。普通用户本单指现有 purchaser 采购员角色,不泛化到任意登录角色。
基线 origin/main ff2d0ca,关联 #50 同步记录及 #156 启动权限对账。无阻塞依赖;影响 Server、Web 和长期权限/业务契约;不改 Android、数据库结构或同步算法。

已确认方案与设计证据

复用 ff2d0ca 的 web/src/views/goauto/syb-sync-runs/index.vue 既有管理员按钮,位置/样式/同步昨天今天/轮询/记录详情不变;只向 purchaser 开放相同入口。用户于 2026-09-07 确认范围。既有组件复用,无新页面或完整原型。
正常/空列表可触发;请求中 loading 禁用;已展示执行中任务时禁用;失败按既有错误提示恢复按钮;未授权角色不显示且服务端拒绝。服务器既有同步互斥作为最终保护,不依赖列表筛选状态。
前端允许 admin/purchaser;后端 Import 允许这两个角色并继续保留认证和 Casbin;AdminAPIs 的 POST /api/admin/v1/syb-products/import 标为 Purchaser=true,由既有启动对账更新权限。不增加迁移,不开放店铺配置、凭据、定时任务管理等权限。审计操作人仍取已认证 claims。

验收/测试

  • admin/purchaser 可见并可走同步入口;匿名及其他角色拒绝。
  • 保留互斥、日期校验、操作人记录;不触发真实外部同步的自动化测试。
  • 权限对账测试证明授予同步而未开放相邻管理接口。
  • Web 角色/加载禁用状态回归、lint/build;Server 受影响测试及构建;提交推送,待验收。

风险与授权

涉及权限变化:本次先实现代码和隔离测试;真实本地/线上权限写入、重启、发布、真实同步须另获明确授权。保持现有运行服务和任务开关不变。

文档影响

更新 SYB-ERP-Interface-Contract 及存在的长期角色权限约束,线上回读 revision 后一次 sync 和 sync --check;无新任务归档。
Gitea MCP 当前不可用,使用项目已忽略 gitea.env 的 API 回退,凭据不输出。

## 来源与范围 2026-09-07 用户反馈普通用户在 Admin SYB 同步页看不到/不能使用立即同步,并确认“按照你的建议建工单,做”。普通用户本单指现有 purchaser 采购员角色,不泛化到任意登录角色。 基线 origin/main ff2d0ca,关联 #50 同步记录及 #156 启动权限对账。无阻塞依赖;影响 Server、Web 和长期权限/业务契约;不改 Android、数据库结构或同步算法。 ## 已确认方案与设计证据 复用 ff2d0ca 的 web/src/views/goauto/syb-sync-runs/index.vue 既有管理员按钮,位置/样式/同步昨天今天/轮询/记录详情不变;只向 purchaser 开放相同入口。用户于 2026-09-07 确认范围。既有组件复用,无新页面或完整原型。 正常/空列表可触发;请求中 loading 禁用;已展示执行中任务时禁用;失败按既有错误提示恢复按钮;未授权角色不显示且服务端拒绝。服务器既有同步互斥作为最终保护,不依赖列表筛选状态。 前端允许 admin/purchaser;后端 Import 允许这两个角色并继续保留认证和 Casbin;AdminAPIs 的 POST /api/admin/v1/syb-products/import 标为 Purchaser=true,由既有启动对账更新权限。不增加迁移,不开放店铺配置、凭据、定时任务管理等权限。审计操作人仍取已认证 claims。 ## 验收/测试 - admin/purchaser 可见并可走同步入口;匿名及其他角色拒绝。 - 保留互斥、日期校验、操作人记录;不触发真实外部同步的自动化测试。 - 权限对账测试证明授予同步而未开放相邻管理接口。 - Web 角色/加载禁用状态回归、lint/build;Server 受影响测试及构建;提交推送,待验收。 ## 风险与授权 涉及权限变化:本次先实现代码和隔离测试;真实本地/线上权限写入、重启、发布、真实同步须另获明确授权。保持现有运行服务和任务开关不变。 ## 文档影响 更新 SYB-ERP-Interface-Contract 及存在的长期角色权限约束,线上回读 revision 后一次 sync 和 sync --check;无新任务归档。 Gitea MCP 当前不可用,使用项目已忽略 gitea.env 的 API 回退,凭据不输出。
Author
Owner

实现完成,待部署授权/验收

提交 29ba16e4f93379c85db506452856e1f060c783b1,分支 feat/236-purchaser-syb-sync 已推送,工作树干净。未合入 main,未改本地/线上运行代码。

  • 前端复用既有按钮,仅 admin/purchaser 显示且方法入口也校验角色;保留 loading、运行中禁用和请求失败恢复。
  • 后端 Import 放行 admin/purchaser,其余角色拒绝;认证、Casbin 路由保护和操作人 claims 不变。
  • 权限矩阵只新增采购员 POST /api/admin/v1/syb-products/import;使用既有启动对账。修改旧迁移的测试断言以跟随其本来就引用的现行权限矩阵,未修改或新增迁移代码。

验证

  • .\scripts\verify.ps1 -Component server:全量测试与构建通过。首轮发现旧权限测试仍断言管理员独占,及新增测试误把现有 422 写成 400;修正测试后完整重跑通过。
  • pnpm install --frozen-lockfile、pnpm run lint、pnpm run build:prod 通过;保留既有 lint/大包警告,未扩大处理。
  • Playwright 本单相关 5 项全部通过:失败详情、admin/purchaser 同步受理和昨天今天请求体、purchaser 422 冲突后恢复按钮、viewer 不显示按钮。全部接口使用合成数据拦截,无真实 SYB/数据库写入。
  • 原浏览器测试缺失动态菜单 mock 导致落入工作台,补齐本单测试 fixture 后通过。文件内原有“定时任务执行记录入口”用例仍失败,属于未改的旧调度页测试,未纳入本单 5 项通过结论,不宣称整个 E2E 套件通过。
  • UI/UX 技能用于复核复用按钮、禁用和反馈状态;检查采购员空列表/失败恢复测试截图,按钮位置及状态符合既有布局。不新增完整原型或导出。
  • DevHarness check --strict 与 git diff --check 通过。

文档

在线更新并回读:Business-Rules-and-Glossary c6b16b2394e12d764f610ce32b89baaf7e128642;Android-Agent-API-Contract 17b247737f5d4f4016b4e3789f277039c0364027;SYB-ERP-Interface-Contract a4f4ab200af052bab7ffbabe267238528bcd7cf9。一轮 sync / sync --check 均通过,镜像已提交。

未执行与下一步

未真实写入权限、未重启/发布、未用真实采购员触发 SYB 同步;临时测试 Vite 已停止。用户授权后发布 Server/Web 并运行既有启动权限对账,再进行真实账号验收。无需新增迁移或更新 APK;原工作区改动保持不动。工单保持打开。

## 实现完成,待部署授权/验收 提交 29ba16e4f93379c85db506452856e1f060c783b1,分支 feat/236-purchaser-syb-sync 已推送,工作树干净。未合入 main,未改本地/线上运行代码。 - 前端复用既有按钮,仅 admin/purchaser 显示且方法入口也校验角色;保留 loading、运行中禁用和请求失败恢复。 - 后端 Import 放行 admin/purchaser,其余角色拒绝;认证、Casbin 路由保护和操作人 claims 不变。 - 权限矩阵只新增采购员 POST /api/admin/v1/syb-products/import;使用既有启动对账。修改旧迁移的测试断言以跟随其本来就引用的现行权限矩阵,未修改或新增迁移代码。 ### 验证 - .\scripts\verify.ps1 -Component server:全量测试与构建通过。首轮发现旧权限测试仍断言管理员独占,及新增测试误把现有 422 写成 400;修正测试后完整重跑通过。 - pnpm install --frozen-lockfile、pnpm run lint、pnpm run build:prod 通过;保留既有 lint/大包警告,未扩大处理。 - Playwright 本单相关 5 项全部通过:失败详情、admin/purchaser 同步受理和昨天今天请求体、purchaser 422 冲突后恢复按钮、viewer 不显示按钮。全部接口使用合成数据拦截,无真实 SYB/数据库写入。 - 原浏览器测试缺失动态菜单 mock 导致落入工作台,补齐本单测试 fixture 后通过。文件内原有“定时任务执行记录入口”用例仍失败,属于未改的旧调度页测试,未纳入本单 5 项通过结论,不宣称整个 E2E 套件通过。 - UI/UX 技能用于复核复用按钮、禁用和反馈状态;检查采购员空列表/失败恢复测试截图,按钮位置及状态符合既有布局。不新增完整原型或导出。 - DevHarness check --strict 与 git diff --check 通过。 ### 文档 在线更新并回读:Business-Rules-and-Glossary c6b16b2394e12d764f610ce32b89baaf7e128642;Android-Agent-API-Contract 17b247737f5d4f4016b4e3789f277039c0364027;SYB-ERP-Interface-Contract a4f4ab200af052bab7ffbabe267238528bcd7cf9。一轮 sync / sync --check 均通过,镜像已提交。 ### 未执行与下一步 未真实写入权限、未重启/发布、未用真实采购员触发 SYB 同步;临时测试 Vite 已停止。用户授权后发布 Server/Web 并运行既有启动权限对账,再进行真实账号验收。无需新增迁移或更新 APK;原工作区改动保持不动。工单保持打开。
Author
Owner

2026-09-07 用户明确授权合并并发布线上 Server/Web、执行启动权限对账并重启 GoAuto。main 已快进到 29ba16e;Linux Server 和 Web 重建通过。线上 7 类活动任务计数均为 0,当前采购员同步权限缺失。按既有版本目录原子切换部署,保留旧版并备份权限集合;校验仅新增 POST /api/admin/v1/syb-products/import、定时任务与迁移版本列表不变。无新增迁移,不改本地服务、不触发真实同步、不更新 APK。无新的长期契约或运维方式变化,复用已完成 Wiki 闭环。

2026-09-07 用户明确授权合并并发布线上 Server/Web、执行启动权限对账并重启 GoAuto。main 已快进到 29ba16e;Linux Server 和 Web 重建通过。线上 7 类活动任务计数均为 0,当前采购员同步权限缺失。按既有版本目录原子切换部署,保留旧版并备份权限集合;校验仅新增 POST /api/admin/v1/syb-products/import、定时任务与迁移版本列表不变。无新增迁移,不改本地服务、不触发真实同步、不更新 APK。无新的长期契约或运维方式变化,复用已完成 Wiki 闭环。
Author
Owner

线上发布与权限对账完成,待用户验收

  • main=29ba16e4f93379c85db506452856e1f060c783b1。重新构建 Linux Server(CGO_ENABLED=0,linux/amd64,trimpath)及 Web 通过,复用同提交已通过的全量 Server 测试、Web lint 和本单 5 项模拟浏览器测试。
  • current=/home/goauto/releases/20260907-29ba16e-236,GoAuto PID 4361,systemd active;/proc/4361/exe SHA256=8ba3d8402a3da9436d0309f5f4332f03ca018757da12b7058dae4eb3d5972385,与本次构建一致。
  • Web index SHA256=20a8c025f9c606c7645a1ddb3707814d692f6043c045c3f38fa59b32077487fd,公网返回 HTML 与新构建一致;公网 Admin 及 /api/v1/health HTTP 200。
  • 启动前后比较完整 Casbin 语义权限集合,仅增加 purchaser / POST /api/admin/v1/syb-products/import,未新增其他授权、未移除既有授权。权限集合备份保留在线上 /home/goauto/backups/20260907-236-permissions(目录700,文件600)。
  • 7 类活动任务发布前均为0;定时任务状态/Cron/目标/参数指纹、迁移版本列表前后相同。无迁移命令、无真实同步、无 APK 操作;Nginx 配置未改,无需重启。
  • 旧版 /home/goauto/releases/20260907-ff2d0ca-235 完整保留,出现问题按既有 current 切换并启动旧版恢复(旧版启动权限对账会恢复旧权限矩阵)。
  • 本地运行服务没有更新本单。线上请采购员刷新页面,必要时退出重新登录,验收立即同步按钮及业务效果;尚未以真实采购员账号触发外部 SYB 同步,不宣称真实业务验收完成。工单保持打开。
## 线上发布与权限对账完成,待用户验收 - main=29ba16e4f93379c85db506452856e1f060c783b1。重新构建 Linux Server(CGO_ENABLED=0,linux/amd64,trimpath)及 Web 通过,复用同提交已通过的全量 Server 测试、Web lint 和本单 5 项模拟浏览器测试。 - current=/home/goauto/releases/20260907-29ba16e-236,GoAuto PID 4361,systemd active;/proc/4361/exe SHA256=8ba3d8402a3da9436d0309f5f4332f03ca018757da12b7058dae4eb3d5972385,与本次构建一致。 - Web index SHA256=20a8c025f9c606c7645a1ddb3707814d692f6043c045c3f38fa59b32077487fd,公网返回 HTML 与新构建一致;公网 Admin 及 /api/v1/health HTTP 200。 - 启动前后比较完整 Casbin 语义权限集合,仅增加 purchaser / POST /api/admin/v1/syb-products/import,未新增其他授权、未移除既有授权。权限集合备份保留在线上 /home/goauto/backups/20260907-236-permissions(目录700,文件600)。 - 7 类活动任务发布前均为0;定时任务状态/Cron/目标/参数指纹、迁移版本列表前后相同。无迁移命令、无真实同步、无 APK 操作;Nginx 配置未改,无需重启。 - 旧版 /home/goauto/releases/20260907-ff2d0ca-235 完整保留,出现问题按既有 current 切换并启动旧版恢复(旧版启动权限对账会恢复旧权限矩阵)。 - 本地运行服务没有更新本单。线上请采购员刷新页面,必要时退出重新登录,验收立即同步按钮及业务效果;尚未以真实采购员账号触发外部 SYB 同步,不宣称真实业务验收完成。工单保持打开。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#236