119 lines
7.1 KiB
Markdown
119 lines
7.1 KiB
Markdown
# Temu 全托管(①Alimingpro, shopId 4021529)进展
|
||
|
||
## 已勘明
|
||
- 类目:1038 个,直接从 `temuAddBasicStore.dataState.categories` 读(不用滚动)
|
||
- 选类目:下拉需**先 scrollTop=0**(默认残留上次滚动位置)→ 滚动找 `.ant-select-item-option`
|
||
- 外包装形状:不规则 / 长方体 / 圆柱体
|
||
- 外包装类型:硬包装 / 软包装+硬物 / 软包装+软物
|
||
- 字段落点:
|
||
- `temuAddProductStore.formState.mainImage` → **数组**
|
||
- `temuAddProductStore.formState.materialImage` → **对象**(单个)
|
||
- `temuAddOtherStore.packageFormState` → `{packageShape, packageType, packageImages, inventoryRegion}`
|
||
- `temuAddSkuAttrStore.formState.skuAttrs` → `[{type:2,parentSpecId:1001,parentSpecName:"颜色",options:[]}]`
|
||
- `temuAddSkuDataStore.formState.skuDataList` → SKU 行
|
||
- 必填 9 项:店铺/分类/标题/产地/轮播图/素材图/外包装形状/外包装类型/外包装图片
|
||
|
||
## 未解(卡点)
|
||
1. 点「保存」不发任何 POST,且无校验红字 → 静默拦截
|
||
2. 程序化塞 `skuAttrs[0].options` **不生成** `skuDataList` 行(需走 UI)
|
||
3. 变种区只渲染出主题选择器(颜色/风格/材质…),**值输入控件没找到**;变种本身也非必填
|
||
4. `产品素材图` 在 DOM 里仍显示为空(store 已设)
|
||
5. 表单下方未发现价格/库存输入(可能随变种行生成)
|
||
|
||
---
|
||
## 更新:静默拦截已定位(用 MYJ.message.error 钩子)
|
||
|
||
Temu 被吞掉的报错是**层层递进**的:
|
||
1. ~~`产地选择中国时,省份必填,请完善后提交`~~ → 已解决
|
||
路径:`temuAddProductStore.formState.region2Id`(候选在 `region2Id` 同级 `regionCode`,31 个省)
|
||
注意:直接赋值 store 当时不生效,但**异步同步后 UI 会显示「北京市」**,再点保存即通过
|
||
2. **`产品变种不能为空!`** ← 当前唯一剩下的卡点
|
||
需要真正生成变种行(`temuAddSkuDataStore.formState.skuDataList`)
|
||
程序化塞 `temuAddSkuAttrStore.skuAttrs[0].options` **无效**
|
||
|
||
## 变种区控件(待继续)
|
||
- `.ant-select` #16 = 颜色主题选择器(主题候选:颜色/风格/材质/口味/…共18个)
|
||
- `.ant-select` #17 = 尺码
|
||
- 未找到独立的值输入框;值控件可能随主题选中后异步渲染
|
||
|
||
---
|
||
## 更新2:照 SHEIN 的解法推进,报错序列已剥到最后一层
|
||
|
||
Temu 的规格机制和 SHEIN **不同构**——没有 `theme-select-box`,
|
||
而是 **两个 `.theme-value-add` 块**(颜色 / 尺码),每块各有「值输入框(`input[class*="!w-200"]`) + 添加按钮」。
|
||
**值必须手动输进去再点「添加」**,程序化塞进 `skuAttrs[0].options` 完全无效。
|
||
|
||
### 报错序列(每修完一层才露出下一层)
|
||
| # | 报错 | 状态 | 解法 |
|
||
|---|---|---|---|
|
||
| 1 | 产地选择中国时,省份必填 | ✅ | `temuAddProductStore.formState.region2Id`(异步同步,需再点一次保存) |
|
||
| 2 | 产品变种不能为空! | ✅ | 两个 theme-value-add 各输一个值点「添加」→ `skuDataList` 生成 2 行 |
|
||
| 3 | 尺寸不能为0或空 | ✅ | SKU 表「尺寸(cm)」列每行有 **3 个子输入**(长/宽/高),要全填 |
|
||
| 4 | 净重必须小于重量 | ✅ | 净重填 90、重量填 100(不能相等) |
|
||
| 5 | **请上传预览图** | ⬜ 当前 | SKU 表「预览图」列需真实图片,不是文本 |
|
||
|
||
### SKU 表列(Temu 全托管)
|
||
`预览图 | 颜色 | 尺码 | SKU货号 | EAN UPC ISBN | 申报价格(CNY) | 尺寸(cm) | 重量(g) | 净重(g) | 建议售价 | SKU分类`
|
||
|
||
⚠️ EAN 用公司台账下一段:pc 3447 起(Walmart 已用 3400~3446)
|
||
|
||
---
|
||
|
||
## 更新3:预览图已解 → **首条已保存进待发布(2026-09-20)**
|
||
|
||
### 解法(点单元格,不是点表头)
|
||
表头那个「批量」下拉是**通用图片工具**(批量传图/压缩/加水印…),跟预览图无关,别点它。
|
||
真正的入口是**单元格本身**:
|
||
|
||
1. 用**真实鼠标事件**点 `.sku-image` 单元格(`mouseMoved` → `mousePressed` → `mouseReleased`;
|
||
DOM click 打不开)
|
||
2. 弹出下拉 `.myj-image-drop`:`本地图片 / 空间图片 / 网络图片 / **引用产品轮播图** / 引用采集图片`
|
||
3. 点「**引用产品轮播图**」→ 弹窗「**引用产品图片**」(列出产品轮播图,每个带「选择图片」)
|
||
4. 勾「**全部**」→ 点「**选择**」
|
||
5. 行数据出现 `image: {url, imgUrl, name, width, height}`,单元格变成真图
|
||
|
||
**关键坑:这个弹窗是「单格」的**——勾全部只作用**当前那一行**。N 行就要走 N 遍。
|
||
(`全部` = 把那 5 张轮播图都塞给这一格,单元格只显示第一张。)
|
||
|
||
现成脚本:`tmpv.mjs`(`node tmpv.mjs` 给所有 SKU 行挂图,`node tmpv.mjs 1 3` 只挂指定行)
|
||
|
||
### 结果
|
||
`/web/temu/choiceTemuList/offline`(**待发布**)搜标题命中:
|
||
`Hair Clips Set for Women Girls Fashion Hair Accessories 「①Alimingpro」 ... TM-TEST-1 TM-TEST-2 CNY 12.90`
|
||
保存成功弹「您的产品已保存到「待发布」,请在待发布页完成发布!」
|
||
|
||
### ⚠️ 路由纠正
|
||
店小秘的列表路由是 **`/draft` = 采集箱、`/offline` = 待发布**(之前搜 `/draft` 找不到东西就是这个原因)。
|
||
Temu 全托管列表 = `/web/temu/choiceTemuList/{draft|offline|online}`;
|
||
Temu 半托管 POP = `/web/popTemu/pageList/*`。保存接口是 `/api/pddkjProduct/add*.json`(拼多多跨境=Temu 全托管)。
|
||
|
||
---
|
||
|
||
## 更新4:批量完成(46/46 进待发布,2026-09-20)
|
||
|
||
脚本:`tmbatch.mjs`(`node tmbatch.mjs` 全量 · `node tmbatch.mjs <pid>` 单条 · `--dry` 只构建)
|
||
数据:`tk_input.json` × `temu_route.json`(pid → 中文类目名 + catId),`tm_done.json` 断点续跑。
|
||
|
||
### 单条顺序
|
||
`选店铺(①Alimingpro) → 选类目(弹窗搜索,按**最后一级路径精确匹配**,别用 contains,
|
||
否则「口哨」会选到「狗口哨」) → 标题/主图/素材图/包装图/产地(region2Id) → 变种值
|
||
(两个 .theme-value-add 各输值再点「添加」)→ 填 SKU 行(货号/EAN/价/尺寸/重量/净重)
|
||
→ 逐行挂预览图 → 保存`
|
||
|
||
### 这一轮新踩的坑
|
||
1. **主图必须满 5 张**,否则 `MYJ.error: 产品轮播图至少要上传5张!` → 图不够就重复补齐(`padImgs`)
|
||
2. **类目弹窗必须关掉**(同 SHEIN),否则预览图挂不上,最后只报「请上传预览图」——
|
||
第一轮 13 条就是这么挂的,补上「关弹窗 + 预览图重试」后**全部重跑成功**
|
||
3. **EAN 游标必须落盘**:`ean_cursor.json` + `ean_temu_used.txt`。
|
||
第一轮游标只在内存里,重跑换进程后从 3449 重发,和手工首条的口哨撞了号
|
||
(`6980309334492`)→ 用编辑页 `tm_fixean2.mjs` 改成 `6980309335512`,台账已补齐、当前无重复
|
||
|
||
### 结果
|
||
46/46 保存成功(+ 手工首条 = 47 条在待发布)。
|
||
EAN:pc **3447~3551** 已用,游标 → **3552**。
|
||
⚠️ 台账只在 KVM-2,**尚未回 S03 `/root/ean_*.txt`**。
|
||
|
||
### 编辑已有草稿
|
||
待发布列表里「编辑」按钮**必须用真实鼠标事件**点,而且会**新开一个标签**
|
||
`/web/temu/edit?id=<rowid>`(DOM click 无效,一次没关标签就会攒一堆)。
|