Files

3.2 KiB
Raw Permalink Blame History

05 店铺中心

模块职责

将店铺密钥、店铺账号、最低价配置和店铺相关基础操作组织为店铺中心。最低价 ASIN 的复杂数据操作在 04-asin-data-center.md 定义,本文件只描述店铺侧入口和基础店铺管理边界。

覆盖页面:

  • 店铺密钥:shop-keys
  • 店铺管理:shop-manage
  • 店铺分组选择器和店铺账号编辑
  • 店铺凭证展示、遮罩和安全操作

依赖关系

上游:菜单树和用户权限;Java 店铺控制器;分组/用户选择器;下载和 confirm 基础组件。

旧实现:

  • admin.htmlpanel-shop-keyspanel-shop-manage
  • admin.js:loadShopKeysloadShopManageloadShopManageGroupsrenderShopPasswordCellbindShopKeyActionsbindShopManageActions

Java API 主要来源:

  • ShopKeyController/api/admin/shop-keys/api/admin/shop-key
  • ShopManageController/api/admin/shop-manages/api/admin/shop-manage、凭证和分组接口。

核心接口:原实现 → 目标实现

功能 原实现 目标实现
店铺密钥列表 admin.js:loadShopKeys ShopKeysPage.vue + /api/admin/shop-keys
新增/编辑密钥 原生 modal + DOM 表单 Element Plus Dialog + /api/admin/shop-key
店铺列表 admin.js:loadShopManage ShopManagePage.vue + /api/admin/shop-manages
店铺新增/编辑/删除 DOM modal、手写确认 Dialog/Drawer + /api/admin/shop-manage
店铺凭证 renderShopPasswordCell 显式遮罩组件,按需显示
店铺分组 旧多处 select 和自定义下拉 可复用 ShopGroupSelect,数据来源统一

内部结构

ShopCenter
├── ShopKeysPage
│   ├── FilterBar
│   ├── KeysTable
│   └── KeyEditorDialog
└── ShopManagePage
    ├── FilterBar
    ├── ShopsTable
    ├── ShopEditorDrawer
    ├── ShopGroupSelect
    └── CredentialReveal

敏感字段生命周期:

  1. 默认以遮罩或掩码展示。
  2. 用户主动点击后才显示短时内容。
  3. 不写入 Pinia、localStorage、URL 或日志。
  4. API 返回失败或离开页面时清理临时明文。

类型映射

原字段 目标类型/规则
shop_namemall_name ShopSummary
zn_username、账号、密码 ShopCredential,敏感字段分离
group_id `number
紫鸟令牌/密钥 SensitiveString,禁止进入通用日志
店铺分页响应 PaginatedResult<ShopSummary>

迁移/实现注意事项

  1. 页面级权限只决定是否显示和进入店铺中心,不新增“查看密码”“编辑店铺”等按钮权限模型。
  2. 后端现有角色和数据权限校验必须保持;前端隐藏按钮不是安全措施。
  3. 编辑店铺和店铺密钥的表单不能共用一个无类型的大对象,避免提交多余字段。
  4. 删除、重置密钥、覆盖账号等不可逆操作必须使用明确的确认文案。
  5. 分组数据加载应有缓存但必须有失效机制;页面切换不应重复创建无限轮询或请求。
  6. 店铺凭证不能出现在错误消息、网络日志、埋点和前端异常上报中。