# 店小秘编辑器「保存静默拦截」诊断法 ## 症状 点「保存」→ **不发任何 POST**、**没有任何界面提示**、**无 `.ant-form-item-has-error`**。 四个平台(速卖通/SHEIN/Temu)独立复现同一现象。 ## 根因 校验确实失败了,但报错被 **`MYJ.message.error` 吞掉**——它只在屏幕角落闪一下, 而且有些报错是**层层递进**的(修完 A 才显示 B),所以肉眼和 DOM 扫描都抓不到。 ## 诊断步骤 1. 打开目标平台的建品页,填完所有能填的字段 2. **在点保存之前**注入钩子,劫持消息库: ```js window.__cap=[]; function wrap(obj,name,label){ const o=obj[name]; obj[name]=function(){ window.__cap.push(label+': '+[...arguments].map(a=>typeof a==='string'?a:JSON.stringify(a)).join(' ')); return o.apply(obj,arguments); }; } ['error','warning','info','success'].forEach(k=>wrap(MYJ.message,k,'MYJ.'+k)); ['error','warning','info','success'].forEach(k=>wrap(antd.message,k,'antd.'+k)); ``` 3. 点「保存」,等 9 秒 4. 读 `window.__cap` —— 被吞掉的真实报错就在里面 ## 已定位的结果 | 平台 | 被吞掉的报错 | 性质 | |---|---|---| | 速卖通 | `商品说明书 → 请上传文件!` | **类目相关**的资质文件要求(Pet Medical 等类目强制) | | SHEIN | `有必选规格未选择,请完善后再提交` | 类目定义的必选规格未选全 | | Temu | `产地选择中国时,省份必填` → `产品变种不能为空!` | **条件必填**(选中国才出现省份)+ 变种 | ## 修复要点 - **速卖通**:换一个不要求资质文件的类目即可(已验证:温度计从 Pet Medical 换到 `Tools/仪器仪表/温湿度` 后立刻存进去) - **SHEIN**:需把类目要求的**全部**规格(不止主规格颜色)都选中 - **Temu**:省份必须走 **UI 选择**(直接改 `region2Id` store 无效),且必须生成变种行 ## 教训 `必填项扫描`(找 `.ant-form-item-required` 且为空)**不够**—— 条件必填字段(Temu 省份)和类目相关的文件字段(速卖通说明书)都不在这个扫描范围内。 以后遇到「点了没反应」,第一步就该挂这个钩子。 ## 为什么这条要单独记住(整轮唯一的方法论级收获) 在 SHEIN 和 Temu 上,我们花了**几十轮**去猜「到底哪个字段没填」:扫 DOM、翻 store、 逐个试填——**全部无效**。挂上钩子后,两个平台的真实报错**一次全暴露** (SHEIN `有必选规格未选择`、Temu `产地…省份必填` → `产品变种不能为空` → … 层层递进)。 所以它不是「一个调试技巧」,而是**顺序问题**:先让平台把话说出来,再动手填。 配套的三条(都是这一轮才踩出来的): 1. **类目弹窗没确认关掉就往下走** → 后面的点击全被挡住,最后报的却是别的错 (Temu 第一轮 13 条都表现为「请上传预览图」) 2. **`.attr-label.required`** 这类类目动态属性(下拉、勾选组)不填,只给一句 「产品信息中有错误,请检查」——必填扫描同样扫不到 3. **同一个弹窗可能是「单格」的**(Temu 预览图:勾「全部」只作用当前行), N 行要走 N 遍