3.5 KiB
3.5 KiB
Joom 建品配方(已跑通,批量进行中)
路由:https://www.dianxiaomi.com/web/joomProduct/add 列表:/web/joomProduct/{draft=采集箱, offline=待发布}
脚本:jmbatch.mjs(node jmbatch.mjs 全量 · node jmbatch.mjs <pid> 单条 · --dry 只构建)
断点:jm_done.json 逐条日志:jm_batch.log 实际落到的类目:joom_route.json
⭐ 关键发现:Joom 的表单数据不在 joom* store 里
商品主体数据落在 smtChoiceAddBasicStore(速卖通全托管的 store),
Joom 与 aliChoice 共用同一套 smtChoice* store。定位方法:在页面上手输一个
哨兵串(PROBE-TITLE-XYZ),再遍历所有 pinia store 的 $state 找它落在哪。
| 字段 | 落点 |
|---|---|
| 店铺 | smtChoiceAddBasicStore.formState.shopIds[] / shopId(店铺是复选框组,不是下拉) |
| 类目 | smtChoiceAddBasicStore.formState.categoryId(复合串 1473…-16-2-118-2600…) |
| 标题 / ParentSKU / 描述 / 标签 | smtChoiceAddBasicStore.formState.{name, parentSku, description, tags[]} |
| 价格 / 库存 / 运费 / MSRP / 报关金额 | joomAddPriceStore.formState.{price, inventory, shipping, msrp, declaredValue} |
| 主图 / 详情图 | joomAddImageStore.formState.imageList[] / detailImageList[0].images[](吃 {url,imgUrl,name,width,height} 数组) |
| SKU / 颜色 / 尺码 | joomSkuDataStore.formState.skuDataList[] / joomSkuAttrStore.formState.{colorValues,sizeValues} |
| 自定义属性 | smtChoiceAddAttrStore.formState.customAttrs[] |
类目属性(attrsInfo.attrsList 10 条) |
joomAddStore.attrsInfo(joomAddStore 没有 formState) |
单条顺序(不能换)
- 勾店铺:
店铺名称是.d-checkbox-group-wrapper,共 85 个复选框 =全部+ 84 家店。 勾「第一个非全部」=Dummer-Pets。⚠️ 别碰全部(那是铺满 84 家店)。 - 选类目:
产品分类是可搜索.ant-select(不是 SHEIN/Temu 的弹窗)。点开 →Input.insertText(cat_kw)→ 在.ant-select-item-option里选去掉括注后完全相等的, 没有就退到第一个(Joom 类目比 1688 粗,实测「发圈」只能落到「发夹(Hairpins)」)。 - 填 store(标题/ParentSKU/描述/标签 + 价格/库存/运费/报关金额 + 主图/详情图)
fillRequiredSelects()(复用 SHEIN 的兜底)→ 敏感货类型 = 普通货- 详情图语言 → 目标项标签就叫「详情图」(不含"语言"二字):
下拉是虚拟滚动的,前 10 项没有「英语」→ 先
Input.insertText('英')过滤, 再点含「英」的项(否则会落到「阿拉伯语」) - 保存 →
您的产品已保存到「待发布」
钩子新抓出的两条「没标必填但必须填」
| 被吞的报错 | 真相 |
|---|---|
MYJ.error: 运费不能为空 |
运费没有 *,但必须填(给 0 即可) |
MYJ.error: 请选择详情图语言且至少添加一张详情图 |
语言必选;图片 store 已赋值也要选语言 |
与其它平台的差异
- 店铺:Joom 是复选框组(多选=铺多店),SHEIN/Temu/Lazada 是下拉
- 类目:Joom 是可搜索下拉平铺列表,SHEIN/Temu 是「选择类目」弹窗(搜索→点结果→关弹窗)
- 数据落点:Joom 用
smtChoice*(与 aliChoice 同构),SHEIN/Temu 各有自己的shein*/temu* - 不消耗 EAN(GTIN 非必填、
showGtin=false)