# Joom 建品配方(已跑通,批量进行中) 路由:`https://www.dianxiaomi.com/web/joomProduct/add` 列表:`/web/joomProduct/{draft=采集箱, offline=待发布}` 脚本:`jmbatch.mjs`(`node jmbatch.mjs` 全量 · `node jmbatch.mjs ` 单条 · `--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**) | ## 单条顺序(不能换) 1. **勾店铺**:`店铺名称` 是 `.d-checkbox-group-wrapper`,共 **85 个复选框** = `全部` + 84 家店。 勾「第一个非全部」= `Dummer-Pets`。⚠️ **别碰 `全部`**(那是铺满 84 家店)。 2. **选类目**:`产品分类` 是可搜索 `.ant-select`(不是 SHEIN/Temu 的弹窗)。点开 → `Input.insertText(cat_kw)` → 在 `.ant-select-item-option` 里选**去掉括注后完全相等**的, 没有就退到第一个(Joom 类目比 1688 粗,实测「发圈」只能落到「发夹(Hairpins)」)。 3. 填 store(标题/ParentSKU/描述/标签 + 价格/库存/运费/报关金额 + 主图/详情图) 4. `fillRequiredSelects()`(复用 SHEIN 的兜底)→ **敏感货类型 = 普通货** 5. **详情图语言** → 目标项**标签就叫「详情图」**(不含"语言"二字): 下拉是虚拟滚动的,前 10 项没有「英语」→ 先 `Input.insertText('英')` 过滤, 再点含「英」的项(否则会落到「阿拉伯语」) 6. 保存 → `您的产品已保存到「待发布」` ## 钩子新抓出的两条「没标必填但必须填」 | 被吞的报错 | 真相 | |---|---| | `MYJ.error: 运费不能为空` | 运费**没有** `*`,但必须填(给 `0` 即可) | | `MYJ.error: 请选择详情图语言且至少添加一张详情图` | 语言必选;图片 store 已赋值也要选语言 | ## 与其它平台的差异 - 店铺:Joom 是**复选框组**(多选=铺多店),SHEIN/Temu/Lazada 是下拉 - 类目:Joom 是**可搜索下拉平铺列表**,SHEIN/Temu 是「选择类目」弹窗(搜索→点结果→关弹窗) - 数据落点:Joom 用 `smtChoice*`(与 aliChoice 同构),SHEIN/Temu 各有自己的 `shein*` / `temu*` - **不消耗 EAN**(GTIN 非必填、`showGtin=false`)