huangzd1997
085f352320
task-97(店铺中心): 实现店铺数据空状态和错误状态
...
新增 shop-list-feedback.ts:店铺/密钥列表空态文案(含筛选无结果)与请求错误
归一为可展示文案。
TDD: task-97.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:51:51 +08:00
huangzd1997
6368ee376f
task-96(店铺中心): 实现店铺账号字段校验
...
新增 shop-manage-field-validators.ts:分组/店铺名/商城/账号/密码逐字段校验
与汇总,错误文案与后端 NotBlank/Size 规则一致。
TDD: task-96.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:51:13 +08:00
huangzd1997
29641e20a7
task-95(店铺中心): 实现店铺删除确认
...
新增 shop-manage-delete.ts(删除确认文案 + 删除后目标页回退) 并在
shop-manage-api.ts 增加 deleteShopManage(DELETE /api/admin/shop-manages/{id})。
TDD: task-95.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:50:16 +08:00
huangzd1997
0a1e778ef6
task-94(店铺中心): 实现店铺凭证明文短时展示
...
新增 shop-credential-reveal.ts:复用 secret-mask 会话,店铺密码读取后默认
5 秒短时展示,读取失败/离开即清空,明文不写持久化/日志。
TDD: task-94.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:49:25 +08:00
huangzd1997
7fa9b5ccf3
task-93(店铺中心): 实现店铺凭证字段分离
...
新增 shop-credential-model.ts:凭证明文仅经凭证端点解码且落 SensitiveString,
与列表行(仅掩码)字段分离;shop-manage-api.ts 增加 fetchShopCredential
(GET /api/admin/shop-manages/{id}/credential?shop_name=…)。
TDD: task-93.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:48:26 +08:00
huangzd1997
813ab5db7b
task-92(店铺中心): 实现编辑店铺表单
...
新增 shop-manage-edit-form.ts(店铺行预填编辑字段,密码掩码不回填需重录),
补充 toShopManageUpdateRequest(不含 createdById),并在 shop-manage-api.ts 增加
submitUpdateShopManage(PUT /api/admin/shop-manages/{id})。
TDD: task-92.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:47:01 +08:00
huangzd1997
58ea911d66
task-91(店铺中心): 实现新增店铺表单
...
新增 shop-manage-form-model.ts(分组/店铺名/商城/账号/密码校验与 camel 创建
请求体,密码按敏感字段处理) 并在 shop-manage-api.ts 增加 submitCreateShopManage
(POST /api/admin/shop-manages,createdById 由当前会话提供)。
TDD: task-91.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:45:45 +08:00
huangzd1997
9293cd0976
task-90(店铺中心): 实现店铺分组选项加载
...
新增 shop-group-model.ts(ShopManageGroupItemVo 下拉项解析) 并在
shop-manage-api.ts 增加 fetchShopManageGroups(GET /api/admin/shop-manages/groups,
后端限定普通管理员可访问分组)。
TDD: task-90.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:44:47 +08:00
huangzd1997
6ccd5ce1af
task-89(店铺中心): 实现店铺筛选和分页
...
新增 shop-manage-list-state.ts:分组/店铺名筛选归一与激活判断、列表参数/
查询序列化及分页信息派生;与 DTO 分页钳制对齐。
TDD: task-89.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:43:37 +08:00
huangzd1997
42722d0cc6
task-88(店铺中心): 实现店铺列表加载
...
新增 shop-manage-model.ts(ShopManagePageVo camel 解析,仅保留密码掩码)
与 shop-manage-api.ts(GET /api/admin/shop-manages 加载适配)。
TDD: task-88.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:42:34 +08:00
huangzd1997
bef09cb5b5
task-87(店铺中心): 实现密钥删除确认和刷新
...
新增 shop-key-delete.ts(删除确认文案 + 删除后目标页回退) 并在 shop-key-api.ts
增加 deleteShopKey(DELETE /api/admin/shop-keys/{id})。
TDD: task-87.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:41:37 +08:00
huangzd1997
9060464afd
task-86(店铺中心): 实现密钥敏感字段掩码
...
新增 secret-mask.ts:店铺密钥令牌等凭证明文默认掩码展示,主动点击后按可注入
时间短时揭示、超时清空;明文不写入全局状态/持久化存储/地址栏/日志。
TDD: task-86.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:40:39 +08:00
huangzd1997
be6a17d4bd
task-85(店铺中心): 实现编辑店铺密钥表单
...
新增 shop-key-edit-model.ts(由列表行预填备注/紫鸟账号/令牌,令牌仅内存内
沿用) 并在 shop-key-api.ts 增加 updateShopKey(PUT /api/admin/shop-keys/{id})。
TDD: task-85.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:39:04 +08:00
huangzd1997
72a8f75dc5
task-84(店铺中心): 实现新增店铺密钥表单
...
新增 shop-key-form-model.ts(备注/紫鸟账号/令牌校验与 camel 请求体序列化,
镜像 Java NotBlank/Size 规则,令牌去 Bearer 前缀) 并在 shop-key-api.ts 增加
submitCreateShopKey(POST /api/admin/shop-keys)。
TDD: task-84.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:38:02 +08:00
huangzd1997
119095a57b
task-83(店铺中心): 实现店铺密钥筛选和分页
...
新增 shop-keys-list-state.ts:密钥页本地关键词过滤(备注名/紫鸟账号)与分页
信息派生(页码钳制/首末/前后页)。Java 密钥接口无服务端筛选,搜索在已加载
当前页行上本地过滤,纯逻辑可测。
TDD: task-83.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:36:19 +08:00
huangzd1997
8c6088bdc9
task-82(店铺中心): 实现店铺密钥列表加载
...
新增 shop-key-model.ts(ShopKeyPageVo camel 解析、白名单状态归一、snake
兜底) 与 shop-key-api.ts(GET /api/admin/shop-keys 加载适配);纯逻辑解析、
页面不内联请求。
TDD: task-82.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:34:26 +08:00
huangzd1997
93033e94db
task-81(店铺中心): 定义店铺和店铺密钥 DTO
...
新增 src/pages/shop/shop-dto.ts 纯逻辑 DTO:ShopKeyItem/ShopSummary/
ShopCredential/SensitiveString 等类型边界与分页归一/查询序列化(店铺接口
camelCase);凭证明文与紫鸟令牌按敏感字段建模,禁止进入通用日志。
TDD: task-81.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 16:32:08 +08:00
huangzd1997
7ccabf859f
task-80(ASIN 数据中心): 完成 ASIN 数据中心真实流程验收
...
live 验收(8/8 通过, 对 api.aishufu.top:18080 admin 账号): 登录可达性、
未登录 401、query-asin 列表+筛选(camel)、skip-price 列表(snake)、去重汇总
列表、商品类目树、类目新建→删除可逆写循环, 均经真实响应与项目解析器验证。
2026-09-05 16:21:45 +08:00
huangzd1997
3828c90b4c
task-79(ASIN 数据中心): 实现商品类目新增/编辑/导出
...
POST /api/admin/product-category + PUT /product-category/{id} 保存适配
(名称必填/排序可选非负整数校验), 导出 URL(keyword), 8 个契约测试。
2026-09-05 16:17:15 +08:00
huangzd1997
a46c35f01d
task-78(ASIN 数据中心): 实现商品类目树加载和搜索
...
GET /api/admin/product-categories(+keyword) 树(嵌套 children/path/level/
childCount)与 /product-categories/search 分页搜索解析, 9 个契约测试。
2026-09-05 16:15:56 +08:00
huangzd1997
c1d6ce6d20
task-77(ASIN 数据中心): 实现最低价 ASIN 详情编辑抽屉
...
抽屉副标题/5 国家草稿(ASIN+最低价)与变更差异(清空 ASIN→删除, 仅清价→
update)纯逻辑, 保存走 PUT/DELETE /api/admin/skip-price-asins/{id}/countries/{country},
10 个契约测试。
2026-09-05 16:14:22 +08:00
huangzd1997
d9b1b980ca
task-76(ASIN 数据中心): 实现最低价 ASIN 导入与删除导入
...
POST /api/admin/skip-price-asins/import、/delete-import(file+group_id
必填) 启动 + GET 进度轮询, 复用新增通用导入进度模型(含 deletedCount),
8 个契约测试。
2026-09-05 16:12:47 +08:00
huangzd1997
43c7c03aee
task-75(ASIN 数据中心): 实现最低价 ASIN 列表和筛选
...
GET /api/admin/skip-price-asins 列表解析(SkipPriceAsinPageVo, 每店铺
5 国家 ASIN+最低价) + 分组/店铺名/ASIN/国家/最低价区间筛选 snake 序列化,
新增共享国家字典, 9 个契约测试。
2026-09-05 16:11:43 +08:00
huangzd1997
ad6658e490
task-74(ASIN 数据中心): 实现查询 ASIN 详情抽屉
...
抽屉副标题/5 国家草稿与变更差异(空值→删除)纯逻辑, 保存走 PUT/DELETE
/api/admin/query-asins/{id}/countries/{country}, 9 个契约测试。
2026-09-05 16:09:31 +08:00
huangzd1997
a9b4a56986
task-73(ASIN 数据中心): 实现查询 ASIN 导入删除
...
POST /api/admin/query-asins/delete-import(file+可选groupId) 启动导入删除,
GET /delete-import/{importId} 轮询(复用 QueryAsinImportProgressVo 含
deletedCount), 新增删除结果文案, 9 个契约测试。
2026-09-05 16:07:48 +08:00
huangzd1997
5058baffe0
task-72(ASIN 数据中心): 实现查询 ASIN 导入与轮询
...
POST /api/admin/query-asins/import(file+可选groupId) 启动导入添加, GET
/import/{importId} 轮询进度(QueryAsinImportProgressVo 含 deletedCount),
11 个纯逻辑契约测试覆盖启动/轮询/终态/文案。
2026-09-05 16:06:40 +08:00
huangzd1997
9d25f13fe9
task-71(ASIN 数据中心): 实现查询 ASIN 列表和筛选
...
GET /api/admin/query-asins 列表解析(QueryAsinPageVo, 每店铺 5 国家 ASIN 宽行)
+ 分组/店铺名/ASIN/国家筛选归一与 camel 序列化(页大小上限 100 对齐后端),
9 个纯逻辑契约测试覆盖正常/边界/异常路径。
2026-09-05 16:05:10 +08:00
huangzd1997
4c78c64569
task-70(ASIN 数据中心): 实现品牌数据库删除确认
...
invalid-asin-model.ts 增 invalidAsinDeleteText 二次确认文案(含 ASIN 值/不可恢复语义);
invalid-asin-api.ts 增 deleteInvalidAsin DELETE /api/admin/invalid-asin-data/{id}。
8 用例全过,515 单测 + build 绿。
2026-09-05 15:58:23 +08:00
huangzd1997
62bf4f005d
task-69(ASIN 数据中心): 实现品牌数据库新增/编辑表单
...
invalid-asin-form-model.ts 纯模型:createEmptyInvalidAsinForm/invalidAsinFormFromItem 回填、
validateInvalidAsinForm 镜像后端(ASIN 必填<=128/品牌<=128/manual 必选分组)、toCreate 请求(camel)、
toUpdate 请求(自动导入默认不迁组);invalid-asin-api.ts 增 createInvalidAsin POST 与
updateInvalidAsin PUT /api/admin/invalid-asin-data。8 用例全过,507 单测 + build 绿。
2026-09-05 15:57:33 +08:00
huangzd1997
43463e12ca
task-68(ASIN 数据中心): 实现品牌数据库列表查询
...
品牌数据库面板即 invalid-asin-data;新增 invalid-asin-model.ts 解析 InvalidAsinDataPageVo(camel
dataValue/brand/groupId/groupName/recordSource/createdAt) + recordSourceLabel(MANUAL 手动新增),
invalid-asin-api.ts fetchInvalidAsinPage GET /api/admin/invalid-asin-data(支持 ASIN/品牌/分组过滤)。
8 用例全过,499 单测 + build 绿。
2026-09-05 15:42:03 +08:00
huangzd1997
27afc4470a
task-67(ASIN 数据中心): 实现去重汇总删除导入流程
...
dedupe-import-model.ts 增 importOutcomeText 各状态可读文案(pending/running/success/failed);
dedupe-import-api.ts 增 startDedupeDeleteImport POST /delete-import 与
fetchDedupeDeleteImportProgress GET /delete-import/{id},复用导入进度解析。
8 用例全过,491 单测 + build 绿。
2026-09-05 15:40:25 +08:00
huangzd1997
ce27161bbb
task-66(ASIN 数据中心): 实现去重汇总导入轮询和终态
...
dedupe-import-model.ts 增 parseDedupeImportProgress(status/计数/errorMessage,缺省 pending、
未知状态不改) + importTaskFinished/importTaskSucceeded 终态判定;dedupe-import-api.ts 增
fetchDedupeImportProgress GET /api/admin/dedupe-total-data/import/{importId}。
8 用例全过,483 单测 + build 绿。
2026-09-05 15:39:29 +08:00
huangzd1997
abc8ed72d4
task-65(ASIN 数据中心): 实现去重汇总导入任务创建
...
dedupe-import-model.ts 纯解析 importId + isAllowedImportFile(xlsx/xls);dedupe-import-api.ts
startDedupeImport 以 FormData(file+groupId) multipart POST /api/admin/dedupe-total-data/import。
8 用例全过,475 单测 + build 绿。
2026-09-05 15:38:31 +08:00
huangzd1997
23037c669d
task-64(ASIN 数据中心): 实现去重汇总导出等待状态
...
新增 dedupe-total-export.ts 纯模型:buildDedupeExportQuery/toExportUrl 按用户名/日期区间/
分组/国家构造 /api/admin/dedupe-total-data/export 下载地址(空白/非法条件不下发),
DedupeExportStage + exportStageHint 提供运行/完成/失败等待提示。8 用例全过,467 单测 + build 绿。
2026-09-05 15:37:31 +08:00
huangzd1997
fb420c2988
task-63(ASIN 数据中心): 实现去重汇总日期和国家筛选
...
新增 dedupe-total-filter.ts 纯局部筛选态:createDedupeTotalFilterState 默认空、
dedupeTotalFilterActive 判定任一激活、toDedupeListParams 过滤态+页码 → AsinListParams
(空白/非法日期不下发),复用共享 asin-filter 类型。8 用例全过,459 单测 + build 绿。
2026-09-05 15:36:36 +08:00
huangzd1997
09b3d9f013
task-62(ASIN 数据中心): 实现去重汇总列表查询
...
新增 dedupe-total-model.ts 纯解析 DedupeTotalDataPageVo(camel items/total/page/pageSize,
条目 dataValue/country/groupId/groupName/uploader/username/createdAt,缺 id 过滤);
dedupe-total-api.ts fetchDedupeTotalList 复用共享筛选归一后 GET /api/admin/dedupe-total-data。
8 用例全过,451 单测 + build 绿。
2026-09-05 15:35:44 +08:00
huangzd1997
53b4cb52f3
task-61(ASIN 数据中心): 定义共享分页和筛选类型
...
新增 src/pages/asin/asin-filter.ts 纯共享层:AsinListParams 分页+keyword/username/日期区间/
groupId/国家筛选,normalizeAsinPageParams 钳制页码页大小并校验 ISO 日期,toAsinPageQuery
序列化 snake_case(仅下发非空),镜像 DedupeTotalDataController.page 参数契约。
8 用例全过,443 单测 + build 绿。
2026-09-05 15:26:42 +08:00
huangzd1997
8e5fc00945
task-60(账号/权限页面): 完成账号权限三页面真实 API 验收
...
新增 live 验收 task-60-account-live.test.ts:无凭据即可真实校验服务在线/登录页、
未登录 401、伪造 token 拒登(本机已跑通 3 例);带 AIIMAGE_LIVE_* 凭据时校验真实用户列表解析、
permission-menus 含 admin_users/admin_columns/admin_group_manage、分组列表、以及普通用户
创建→出现→删除闭环与授权 columnIds 读取。435 单测 + build 绿,live 目录 0 失败。
2026-09-05 15:25:13 +08:00
huangzd1997
eb526fef5d
task-59(账号/权限页面): 实现数据权限分组列表和摘要
...
新增 shop-group-model.ts 解析 Java ShopManageGroupItemVo(camel)并汇总(groupCount/memberTotal);
shop-group-api.ts GET /api/admin/shop-manages/groups;GroupsPage 去内联 http,改走 adapter
展示分组列表 + 顶部摘要统计卡。8 用例全过,435 单测 + build 绿。
2026-09-05 15:23:38 +08:00
huangzd1997
aeb226a0e6
task-58(账号/权限页面): 实现同级菜单排序交互
...
menu-manage-model.ts 增 siblingOrderAfterMove 同级内上下移(越界/缺失原序);menu-manage-api.ts
增 reorderMenus POST /api/admin/column/reorder({ordered_ids});MenusPage 每行上移/下移按钮
按同级组计算新顺序并提交后刷新。8 用例全过,427 单测 + build 绿。
2026-09-05 15:21:56 +08:00
huangzd1997
50a6cf12e7
task-57(账号/权限页面): 实现菜单删除前置校验
...
menu-manage-model.ts 增 menuDeleteReason 镜像后端仅删叶子约束(有子先删);menu-manage-api.ts
增 deleteMenu DELETE /api/admin/permission-menus/{id};MenusPage 行删除二次确认、
带子节点禁用/拦截并刷新。8 用例全过,419 单测 + build 绿。
2026-09-05 15:20:39 +08:00
huangzd1997
45a8161bb2
task-56(账号/权限页面): 实现菜单编辑表单
...
menu-manage-model.ts 增 menuFormFromNode 回填 + menuParentChangeReason 防环(自身/子孙不可为父);
menu-manage-api.ts 增 updateMenu PUT /api/admin/permission-menus/{id};MenusPage 行内编辑复用
Dialog(新增/编辑切换)校验后提交并刷新。8 用例全过,411 单测 + build 绿。
2026-09-05 15:19:37 +08:00
huangzd1997
aaa943a86d
task-55(账号/权限页面): 实现菜单新增表单
...
menu-manage-model.ts 增 createMenuForm/flattenMenuNodes/nextSiblingSort;menu-manage-api.ts
增 createMenu POST /api/admin/permission-menus(unwrap+解析落库节点);MenusPage 新增菜单
Dialog(名称/标识/父菜单/路由/排序)校验后提交并刷新。8 用例全过,403 单测 + build 绿。
2026-09-05 15:17:55 +08:00
huangzd1997
ffb16bea9a
task-54(账号/权限页面): 实现后台菜单列表加载
...
menu-manage-model.ts 增 buildMenuManageTree 按 parentId 组装展示树(同级按 sort+name);
menu-manage-api.ts GET /api/admin/permission-menus(menuType=admin) 扁平拉取并建树;
MenusPage 去内联 http,改走 adapter 展示默认展开树形菜单。8 用例全过,395 单测 + build 绿。
2026-09-05 15:16:25 +08:00
huangzd1997
5d9019a40d
task-53(账号/权限页面): 定义菜单管理 DTO
...
新增 menu-manage-model.ts 纯 DTO:parseMenuManageItem/List 归一 PermissionMenuItemVo(snake)、
MenuManageForm 工厂、validateMenuManageForm 镜像后端 NotBlank 文案、toMenuCreate/UpdateRequest
camelCase 对齐 Java PermissionMenuCreate/UpdateRequest(menuType=admin 固定)。8 用例全过,
387 单测 + build 绿。
2026-09-05 15:15:08 +08:00
huangzd1997
916f179fca
task-52(账号/权限页面): 实现用户列表加载/空/错状态
...
新增 user-list-state.ts 纯 phase 归一(loading>error>empty>ready)与空/错提示;
UsersPage 显式 loadError 态 + 错误 el-alert(带重试)、加载/错误/空相位决策、
删除按钮对超管禁用。8 用例全过,379 单测 + build 绿。
2026-09-05 15:11:18 +08:00
huangzd1997
47d1c6bf80
task-51(账号/权限页面): 实现用户删除确认和刷新
...
新增 user-delete-model.ts 纯模型:deleteConfirmMessage/deleteBlockReason 镜像 Java
deleteUser 约束(不能删自己/超管)、isDeletableUser。users.ts 增 deleteUser DELETE
/api/admin/user/{uid} 并由 unwrap 抛后端 message;UsersPage 删除改走 adapter、二次确认后
刷新列表(超管行直接告警拦截),不再内联 http.delete、不入 session store。
8 用例全过,371 单测 + build 绿。
2026-09-05 15:09:55 +08:00
huangzd1997
2077f871f8
task-50(账号/权限页面): 实现用户菜单授权提交
...
buildUserColumnPermissionPayload 序列化勾选 id 为 {columnIds}(去重升序、空=清空),
镜像 Java UserColumnPermissionUpdateRequest;submitUserMenuAuth PUT /api/admin/
permission-users/{userId}/columns(menuType=admin) 整树替换,success=false 由 unwrap 抛后端 message。
8 用例全过,363 单测 + build 绿。
2026-09-05 15:07:57 +08:00
huangzd1997
0fcee02189
task-49(账号/权限页面): 实现用户菜单授权数据加载
...
新增 user-menu-auth.ts 纯解析:parseMenuOptionList 归一 permission-menus 扁平项、
buildMenuOptionTree 按 parent_id 组装并按 (sort,key) 排序、parseUserGrantedColumnIds/
normalizeMenuIds 解包用户已授权 id 去重升序。user-menu-auth-api.ts 走 GET
/api/admin/permission-menus(menuType=admin) 与 /permission-users/{id}/columns 加载授权树与已勾选。
8 用例全过,355 单测 + build 绿。
2026-09-05 15:06:58 +08:00
huangzd1997
fba8e35118
task-48(账号/权限页面): 实现用户角色字段映射
...
新增 user-role-map.ts 纯映射:roleDomainOf 行 role/is_admin → 角色域(空 role 按 is_admin
推断、未知归 normal)、selectRoleOf 超管不可选、USER_ROLE_OPTIONS 下拉候选 admin|normal、
userRoleLockMessage 镜像后端约束(超管不可改、admin 不可调角色)。8 用例全过,347 单测 + build 绿。
2026-09-05 15:04:35 +08:00