Admin:允许删除已停用的顺运宝同步店铺 #197

Closed
opened 2026-08-24 11:27:56 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / 顺运宝同步店铺准入
  • 阶段:顺运宝数据接入治理

要解决什么

#196 的店铺管理只支持停用和重新启用。店铺名称录入错误后会永久留在列表,管理员需要能够清理,但不能误删正在参与同步的店铺。

做什么 / 不做什么

  • 做:
    • 仅对已停用店铺显示“删除”操作。
    • 删除使用 POST、管理员权限、CSRF 和包含店铺名称的二次确认。
    • 服务端使用条件删除再次保证店铺仍为停用状态;并发期间被重新启用时拒绝删除。
    • 删除成功后从允许店铺列表永久移除,之后允许重新新增同名店铺。
  • 不做:
    • 不允许删除启用中的店铺。
    • 不删除任何已同步的顺运宝货运单、同步记录或其他历史业务数据。
    • 不修改 MySQL schema,不改变 Client 接口和同步筛选规则。

怎么做

  • 在 admin/repository/syb.go 增加参数化条件删除:shop_id=? AND enabled=0。
  • 在 admin/service/syb_allowed_shop.go 校验管理员和店铺编号,条件未命中时返回“店铺不存在或仍启用”的可操作错误。
  • 在 admin/handler/web 增加管理员 POST 删除路由和处理器。
  • 在 admin/templates/syb/shops.html 仅为停用项渲染危险操作按钮,复用现有 data-confirm-submit 原生确认机制,确认文案包含店铺名称并说明不影响历史货运单。
  • 补充服务测试、路由/模板回归、界面规范和任务归档。

验收标准

  • 启用店铺没有删除入口,直接构造删除请求也被服务端拒绝。
  • 停用店铺显示删除按钮,提交前明确展示店铺名称并二次确认。
  • 只有管理员可调用删除路由,写请求继续受 CSRF 保护。
  • 删除停用店铺后列表中不再出现,并可重新新增同名店铺。
  • 删除不会影响 syb_orders、syb_sync_runs 或其他历史业务数据。
  • 并发重新启用时条件删除不命中,不会误删启用项。
  • 固定 Go 1.23.0 下 build、vet、test 通过。

怎么验证

从 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go vet ./...
go build ./...
go test ./... -count=1
Remove-Item Env:GOTOOLCHAIN

人工检查管理员店铺页的启用/停用两种行、二次确认文案、取消和确认删除;使用采购员账号验证 403。

风险和回退

  • 删除配置行不可恢复,但不会删除历史业务数据;操作员可重新新增同名店铺。
  • 服务端条件删除是最终门禁,不能只依赖页面隐藏按钮。
  • 回退代码即可移除删除入口;已删除的配置需要管理员按名称重新新增。

实施记录

  • 状态:已完成,待用户验收。
  • 功能提交:761058e
  • 归档提交:e8c5293
  • 本地归档:docs/task/197-删除已停用同步店铺.md
  • 固定 Go 1.23.0:go vet ./...、go build ./...、go test ./... -count=1 全部通过。
  • 未验证:未启动浏览器人工点击确认/取消;未用真实网页登录采购员请求删除路由;未部署生产。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 / 顺运宝同步店铺准入 - 阶段:顺运宝数据接入治理 ## 要解决什么 #196 的店铺管理只支持停用和重新启用。店铺名称录入错误后会永久留在列表,管理员需要能够清理,但不能误删正在参与同步的店铺。 ## 做什么 / 不做什么 - 做: - 仅对已停用店铺显示“删除”操作。 - 删除使用 POST、管理员权限、CSRF 和包含店铺名称的二次确认。 - 服务端使用条件删除再次保证店铺仍为停用状态;并发期间被重新启用时拒绝删除。 - 删除成功后从允许店铺列表永久移除,之后允许重新新增同名店铺。 - 不做: - 不允许删除启用中的店铺。 - 不删除任何已同步的顺运宝货运单、同步记录或其他历史业务数据。 - 不修改 MySQL schema,不改变 Client 接口和同步筛选规则。 ## 怎么做 - 在 `admin/repository/syb.go` 增加参数化条件删除:`shop_id=? AND enabled=0`。 - 在 `admin/service/syb_allowed_shop.go` 校验管理员和店铺编号,条件未命中时返回“店铺不存在或仍启用”的可操作错误。 - 在 `admin/handler/web` 增加管理员 POST 删除路由和处理器。 - 在 `admin/templates/syb/shops.html` 仅为停用项渲染危险操作按钮,复用现有 `data-confirm-submit` 原生确认机制,确认文案包含店铺名称并说明不影响历史货运单。 - 补充服务测试、路由/模板回归、界面规范和任务归档。 ## 验收标准 - [x] 启用店铺没有删除入口,直接构造删除请求也被服务端拒绝。 - [x] 停用店铺显示删除按钮,提交前明确展示店铺名称并二次确认。 - [x] 只有管理员可调用删除路由,写请求继续受 CSRF 保护。 - [x] 删除停用店铺后列表中不再出现,并可重新新增同名店铺。 - [x] 删除不会影响 `syb_orders`、`syb_sync_runs` 或其他历史业务数据。 - [x] 并发重新启用时条件删除不命中,不会误删启用项。 - [x] 固定 Go 1.23.0 下 build、vet、test 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go vet ./... go build ./... go test ./... -count=1 Remove-Item Env:GOTOOLCHAIN ``` 人工检查管理员店铺页的启用/停用两种行、二次确认文案、取消和确认删除;使用采购员账号验证 403。 ## 风险和回退 - 删除配置行不可恢复,但不会删除历史业务数据;操作员可重新新增同名店铺。 - 服务端条件删除是最终门禁,不能只依赖页面隐藏按钮。 - 回退代码即可移除删除入口;已删除的配置需要管理员按名称重新新增。 ## 实施记录 - 状态:已完成,待用户验收。 - 功能提交:`761058e` - 归档提交:`e8c5293` - 本地归档:`docs/task/197-删除已停用同步店铺.md` - 固定 Go 1.23.0:`go vet ./...`、`go build ./...`、`go test ./... -count=1` 全部通过。 - 未验证:未启动浏览器人工点击确认/取消;未用真实网页登录采购员请求删除路由;未部署生产。
Author
Owner

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。
ila closed this issue 2026-08-24 11:47:19 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/cmautobuy#197