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

89 lines
5.4 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 全托管)。