后台看到子商品 quantity 大于0,前台颜色仍灰掉,不能只重建价格索引。色板是否可选取决于当前 Website 对应 Stock 中每个简单商品的可售状态。

按顺序解决

  1. 先记录问题页面的 Store、Website、父SKU和被禁用的子SKU。确认子商品已启用、分配到同一 Website,并且必选属性值没有为空。
  2. 检查 Website 绑定的 stock_id,再核对子SKU所在 Source 是否属于该 Stock、Source Item 的 status 是否为1。数量大于0但 status 为0仍会被判为不可售。
  3. 查询 reservation 汇总;若存在取消或失败订单留下的负数,使用官方 list-inconsistencies 输出确认后再创建补偿,不要直接删除 inventory_reservation。
  4. 修复来源或 reservation 后,只重建 inventory、configurable 与价格相关索引并清理 block/FPC;随后重新请求产品 JSON 配置,确认该 option 对应的 salableProducts 已恢复。

检查命令

SELECT stock_id,website_id FROM inventory_stock_sales_channel WHERE website_id=:website_id;
SELECT source_code,sku,quantity,status FROM inventory_source_item WHERE sku IN ('CHILD-RED-S','CHILD-RED-M');
SELECT stock_id,sku,SUM(quantity) reserved FROM inventory_reservation WHERE sku='CHILD-RED-S' GROUP BY stock_id,sku;
bin/magento inventory:reservation:list-inconsistencies -r
bin/magento indexer:reindex inventory catalog_product_price

验证结果

用同一Store分别测试有货、无货两个子SKU;有货色板可选并能加入购物车,无货项仍保持禁用。再切换另一个Website,确认库存范围没有串站。

注意:如果数据库状态正确但只有某台Web节点异常,检查各节点 generated、静态资源版本和FPC是否一致。