店管家 · 批量设置简称与结算价（示例插件）
================================================

干什么
  用店管家的**协议接口**批量给 SKU 写「商品简称」和「结算价」——把原来"易语言 + 浏览器填表"那套换成插件：
    ① 读取商品与 SKU 明细（商品ID / SKU编码 / 规格 / 厂家 / 当前简称 / 当前结算价）
    ② 在「**填写表**」里按 **SKU编码 填一次**（同一个编码下的多个商品/规格**只填一次**，重复的不用管）
    ③ 一键批量写回（套用到该编码下的所有行），逐行显示成功/失败，能导出 CSV 复核

怎么用（四步）
  ① 登录：填店管家**手机号 + 密码** → 点「登录」（协议登录，不开浏览器）。
     万一失败用「打开登录页（兜底）」：弹出的窗口里自己登录，**登录成功会自动采集**，然后关窗即可。
  ② 读取商品（第 ① 步，顶部）
     · **至少填一个筛选条件**（三个可任意组合，同时生效）：选一个即可，都不填按钮是禁用的
         SKU编码 → `SkuCargoNumber`（SKU 货号，支持部分匹配，**推荐**，最快）
         商品ID  → `ProductId`
         标题    → `InputProductName`（商品名模糊）
     · 商品状态（`ProductStatus`）：**0=全部商品（默认）/ 1=上架商品 / 2=下架商品**（界面下拉框选）。
     · 为什么至少填一个：不筛就是全量读，商品几万条会跑几分钟并且**超时/被断开**。
     · 读取是**分页 + 分批**的：商品列表**每页固定 500 条**、翻页间隔 1 秒；
       SKU 明细**分批取**（`productCodes[]` 一次最多 500 个商品）、**批间间隔固定 1 秒**（都写死，不给调）；
       **每批回来就立刻显示到下面表格**（边读边出，不用等全部读完）；进度一直显示，**随时可点「停止读取」**。

③ **在「填写表」里填**（第 ② 步，**按 SKU 编码去重，同一编码只填一次**）
     · 表格列：SKU编码 | **商品简称（填一次）** | **结算价（填一次）** | 当前简称 | 当前结算价 | 匹配行数 | 执行状态。
     · 同一个 SKU 编码在明细里有几行（不同商品/规格）**都只出现一行**；填一次，执行时**套用到它下面的所有行**。
       「匹配行数」就是它会套用几行。
     · 填哪个就只设置哪个（只填简称 → 只改简称）。
     · 改完 **1.5 秒自动存**到本插件 `配置/填写表.json`（也有「保存填写」按钮手动存），下次打开自动带回来。
     · 「清空填写」只清你填的值，不动读取结果；「只看未填的」方便补填。

④ 执行（第 ② 步右侧）
     · 「开始设置」把填写表里的值**套用到该 SKU 编码下的每一行**；成功/失败逐行显示（填写表显示汇总、明细表显示每行）。
     · **固定串行、每步固定间隔 1 秒**（都不给调：并发会被店管家判异常）。
     · 「只跑未成功的」用于失败重试（「重试失败行」会自动打开它）；「导出结果 CSV」写在 `导出/` 并自动打开。

⑤ 表格分页（防止卡顿）
     · 「填写表」和「SKU 明细」都是 **50 条一页**（页面底部有分页条）—— 明细几千行时**只渲染当前页**，不会卡。
     · **分页只是"显示"**：执行、导出用的都是**全部数据**，不受当前页码影响；「匹配行数」也照旧按全部算。

用的是哪些店管家接口
  · 读商品      POST /Product/LoadList
  · 读 SKU 明细 POST /Product/GetSettlementProductList      （productCodes[]）
  · 写简称      POST /Product/SaveShortTitleOrWeight        （写 SkuShortTitle）
  · 写结算价    POST /FinancialSettlement/SetProductSettlementPrice（按 SKU × 厂家）
  登录态（token / traceId / dbname / 数据域名 / Cookie）由客户端保存，插件不用管。

和原易语言工具的差异（有意修正）
  1. SKU 明细遍历 `Data.products` **全部商品**（原版只处理 `products[1]`，多商品时会漏）；
  2. 「商品总数」取商品列表接口的 `Total`（原版取错了对象）；
  3. `ProductStatus`（商品状态）做成**下拉框**：0=全部商品（默认）/ 1=上架商品 / 2=下架商品；
  4. 商品列表改成**分页读 + 必须筛选**（原版一次 `PageSize=20000` 全量拉，商品多时必然超时/卡死）；
     SKU 明细改成**分批取（每批最多 500 个商品）+ 批间固定 1 秒**（**不用并发**：并发会让店管家平台异常），可中途停止；
  5. 要设置的值**直接在 SKU 明细表格里填**（原版是另开一个"SKU编码/简称/结算价"小表），改完自动存本地、下次带回来。

开发相关
  · 本插件只用了 `云捷.店管家` + `云捷.文件`，接口说明见开发包 `参考/17-多平台接口清单.md` 第 5 节、
    `参考/08-宿主能力.md` 第 15 节。
  · 本地调试：开发者中心 → 测试本地目录 → 选本目录即可（改 `app.js` 刷新页面就生效）。
