速卖通配方快照:补 Vue+Pinia 模型自检(字段映射)+ 类目弹窗未关会丢字段的兜底

This commit is contained in:
agent committed 2026-10-04 17:34:11 +08:00
1 parent 9bc7792464
commit c0fa1ce434
1 file changed
+43
+43
View File
@@ -72,6 +72,15 @@
7. **`pageList` 不返回 `detail` / `packageWeight` / `packageLength`**(100 行全空)→
**不能**用它判断描述/重量/尺寸是否存进去,只能看保存时有没有报错。别把空值当「没保存」。
### ⚠ 类目弹窗「点了行但没关窗」→ 后面所有字段都填不进去(2026-09-30 实测)
`pickCategoryBySearch` 点结果行后**有时弹窗不关**。不关的弹窗会挡住后续所有点击:
标题/价格/库存/来源URL 全部写不进去(但类目已选,看起来「像成功了」)——
上一版就是这样,保存时报的却是别的字段,或直接存成空字段。
**现在两处兜底**:① `closeCategoryModal()` 主动确认并 Esc/点「关闭」强关;
② **模型自检** `smtModelGaps()` 会在保存前报出 `subject(标题)/skuPrice(价格)/ipmSkuStock(库存)` 为空 → 跳过保存。
实测四个品修完后 `gaps=[]`(title 115–127 / price 5.3–15.9 / stock 999 / desc 1990–3252)。
## 3. 脚本
```bash
@@ -124,3 +133,37 @@ XAGOKS9C ✅ 待发布 1 | 草稿 0 | 托特包 ¥15.90 图6
★ **页面上的店铺下拉是子集**:速卖通页只列 10 家,`shopMap` 里是 61 家。
判断「这个登录有没有某平台店铺」用 `readAccountShops`;判断「这个店能不能在这个页面选到」才用 `listShopOptions`。
## 附二:Vue 3 + Pinia 模型层自检(2026-09-30 加,**保存前必做**)
店小秘所有平台添加页都是 **Vue 3.5.4 + Pinia**(`#app.__vue_app__.config.globalProperties.$pinia`)。
**DOM 里显示的值 ≠ 表单模型里的值**;填了 DOM 而模型为空时点保存会「静默失败」或存成空字段。
→ 保存前读模型自检:`smtModelSnapshot(c)` + `smtModelGaps(model)`,**gaps 非空则跳过保存**。
速卖通的字段映射(实测,`smtAddBasicStore.formState` / `smtAddProductStore.formState`):
| 业务字段 | 模型路径 |
|---|---|
| 店铺 / 类目 / 标题 | `smtAddBasicStore.formState.{shopId,categoryId,subject}` |
| 价格 / **货值** / 库存 / 编码 | `smtAddProductStore.formState.{skuPrice,cargoPrice,ipmSkuStock,skuCode}` |
| 重量 / 尺寸(长宽高) | `packageWeight` / `packageLength,packageWidth,packageHeight` |
| 是否原箱 | `originalBox`("0"=否) |
| **物流属性** | `specialProductTypeList`(普货 = `["1983471271:2025103"]`) |
| 图片 | `imageList[]` |
| **描述** | `smtAddStore.describeInfoData.detail`(PC端)/ `mobileDetail`(无线端) |
一次干净的 dry 实测(RV8I478D):
```
shopId=135223 categoryId=201717001 subjectLen=121
skuPrice=6.65 cargoPrice=5.5 ipmSkuStock=999 skuCode=ZSJLQ_1be
packageWeight=0.10 dims=28/16/1 originalBox=0
specialProductTypeList=["1983471271:2025103"] images=6 descLen=1935 → gaps=[]
```
结论:**描述确实是写进模型的**(1935 字符,在 `describeInfoData.detail`);**物流属性的 UI 路径也确实会提交到模型**。
之前「描述可能没保存」的疑虑到此消除;`pageList` 不返回这些字段只是列表投影问题。
其它平台 store 命名同构(`<platform>` = smt / shopeeGlobal / tiktokGlobal / ozonProduct):
`<platform>AddStore`(编排+描述)· `BasicStore` · `ProductStore` · `AttrStore` · `OtherStore`
· `SkuDataStore`/`SkuAttrStore`(变种)· `PackageStore`/`DescStore`(Shopee/Ozon)。
公共:`activity` `global` `user` `userPlatforms` `batchImageTaskStore` `*Translate*`。
用 `vueStores(c)` 列全部、`readPinia(c, storeId, path)` 读任意字段。