# 197 Admin:允许删除已停用的顺运宝同步店铺 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 / 顺运宝同步店铺准入 - 状态:已完成 - 日期:2026-08-13 - Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/197 ## 背景与目标 #196 支持店铺新增、停用和重新启用,但错误名称会永久留在管理列表。本任务允许 管理员永久删除已停用配置,同时确保启用店铺及历史业务数据不会被误删。 ## 最终方案 - 仅在已停用店铺行显示危险样式的“删除”按钮。 - 删除使用管理员路由、POST、CSRF,并复用现有 `data-confirm-submit` 二次确认; 文案包含店铺名称,明确历史货运单和同步记录不会删除。 - Repository 使用 `shop_id=? AND enabled=0` 参数化条件删除。即使提交后店铺被并发 重新启用,删除也不会命中。 - 服务端对空编号、店铺不存在和仍启用返回可操作错误,不能依赖页面隐藏按钮。 - 删除只影响 `syb_allowed_shops` 配置行;同名店铺之后可以重新新增。 - 未修改数据库结构、同步规则、历史货运单、同步记录或 Client 接口。 ## 改了哪些 - `admin/repository/syb.go`:增加停用状态条件删除。 - `admin/service/syb_allowed_shop.go`:增加管理员删除业务校验。 - `admin/handler/web/web.go`、`syb_shop.go`:增加管理员 POST 删除路由及反馈。 - `admin/templates/syb/shops.html`:停用项删除按钮和带名称的二次确认。 - `admin/service/syb_allowed_shop_test.go`、`admin/main_test.go`:服务端门禁、历史数据、 重建同名店铺、模板和路由回归。 - `docs/admin/03-data-model.md`、`05-ui-specification.md`:更新数据和交互约束。 ## 验收结果 | 验收标准 | 结果 | |---|---| | 启用店铺不显示删除入口,伪造请求也拒绝 | 通过 | | 停用店铺显示删除按钮并二次确认店铺名称 | 通过 | | 删除路由仅管理员可用并受 CSRF 保护 | 通过 | | 删除后不再显示且可重新新增同名店铺 | 通过 | | 历史货运单和同步记录保持不变 | 通过 | | 并发重新启用不会被条件删除 | 通过(SQL 条件和自动化测试) | | 固定 Go 1.23.0 build、vet、test | 通过 | ## 测试 - 执行的命令: - `$env:GOTOOLCHAIN="go1.23.0"; go vet ./...; go build ./...; go test ./... -count=1` - `go test ./service ./... -count=1` - `git diff --check` - 结果:全部通过,功能提交为 `761058e`。 - **没验证到的部分**:未启动浏览器人工点击确认/取消;未用真实网页登录采购员 请求删除路由;未部署生产。该任务没有数据库结构变更,不需要新增迁移演练。 ## 相关提交 - `761058e` 删除已停用的同步店铺