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