Files
dianxiaomi-crossborder-play…/temu建品/STATUS.md
T

119 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 无效,一次没关标签就会攒一堆)。