Pārlūkot izejas kodu

fix: 云端动作文案规范化——「从云端拉取」→「云端拉取」,去掉随意表述

按钮及全部引用处统一为「云端拉取」;「点」→「点击/执行/可用」,
「推上云端」→「推送云端」,「拉回本地湖」→「覆盖本地湖」;
顺带修正 README/指引中过时的按钮位置(云端拉取在数据中台页、推送云端在数据采集页)。
KenZ1117 2 nedēļas atpakaļ
vecāks
revīzija
0be76859c9
4 mainītis faili ar 11 papildinājumiem un 11 dzēšanām
  1. 1 1
      README.md
  2. 1 1
      docs/钉钉问数上线指引.md
  3. 8 8
      public/index.html
  4. 1 1
      public/reports.js

+ 1 - 1
README.md

@@ -34,7 +34,7 @@
 - **BI 展示**:KPI 卡片 + 明细 / 按门店 / 按日期三种视图,列可自定义显示(列设置),支持排序、门店筛选、名称搜索与 CSV 导出。
 - **趋势图表**(独立菜单):环比指标条(7 项指标 vs 上期 ±%)、主指标趋势(可叠加上期虚线对比)、门店排行 Top10、转化漏斗(曝光→进店→下单)、门店对比 Top5 折线;一键导出自包含 HTML 经营周报。
 - **智能问数机器人**:仅经营分析相关页面显示的右下角悬浮助手,弹窗对话、支持上下文追问(如先问"上月营业额Top5门店"再问"那二店的单量呢"),回答可附图表并一键应用到数据采集报表。需在「系统设置 → API 设置 → 对话模型」选择对话模型(未保存时默认 deepseek-v4.1-flash,Key 留空复用生图 API Key)。
-- **钉钉 AI 表格同步(三表单粒度)**:把数据湖增量推送到钉钉 AI 表格(在线主档案/共享层),云端按维度拆三张表——门店明细 / 连锁汇总 / 公司汇总,每张表内粒度唯一,钉钉 AI 问数或人工透视都不会跨维度把数字加翻倍;区间汇总行不上云(可由门店行推导)。其他电脑在「系统设置 → 钉钉 AI 表格」点「从云端拉取」即可补全本地数据(新账号自动注册主体),报表/图表/问数照常使用。需钉钉企业内部应用(开通 AI 表格 API 权限),配置 AppKey/AppSecret/Base ID/三张表名(留空用默认名)。定时自动同步完成后也会自动推送云端。
+- **钉钉 AI 表格同步(三表单粒度)**:把数据湖增量推送到钉钉 AI 表格(在线主档案/共享层),云端按维度拆三张表——门店明细 / 连锁汇总 / 公司汇总,每张表内粒度唯一,钉钉 AI 问数或人工透视都不会跨维度把数字加翻倍;区间汇总行不上云(可由门店行推导)。其他电脑在「数据中台」页执行「云端拉取」即可补全本地数据(新账号自动注册主体),报表/图表/问数照常使用。需钉钉企业内部应用(开通 AI 表格 API 权限),配置 AppKey/AppSecret/Base ID/三张表名(留空用默认名)。定时自动同步完成后也会自动推送云端。
 - **同步记录诊断**:每次同步的步骤记录会携带请求参数与返回概况(行数/非零行/订单与营业额合计),门店粒度返回全零时自动标记「⚠全零」,便于远程排查。
 - **取数诊断脚本**:在装有商家客户端的电脑上运行 `node scripts/diagnose-napos.js [日期] [门店ID]`,对门店维度取数做参数对照实验并生成 JSON 诊断报告,拷回开发机即可定位取数异常。
 - **MCP 工具**:`node reports-mcp.js` 启动 stdio MCP server(reports_list_entities / reports_summary / reports_query),注册到 `~/.workbuddy/mcp.json` 即可供 Agent 直接查数,与 napos-mcp(取数)形成闭环。

+ 1 - 1
docs/钉钉问数上线指引.md

@@ -30,7 +30,7 @@
 
 ## 三、数据推送与核对
 
-1. 「数据中台」页对应主体点「推送」,或同步完成后自动推送(含定时自动同步)。
+1. 「数据采集」页同步历史面板的「推送云端」,或同步完成后自动推送(含定时自动同步)。
 2. 首次切换到三表后推送为全量(表名指纹变化自动触发,无需手动强推)。
 3. 核对口径:三张云端表行数之和 = 本地湖行数 − 本地区间汇总行数;门店行大量全零会被「全零拦截」挡下(确认无误可强推)。
 4. 历史连锁/汇总行:旧版本行键缺连锁ID,同日多连锁曾互相覆盖。修复后新同步自动正确;如需回补历史,在装有商家客户端的机器上对历史区间重跑一次同步再推送。

+ 8 - 8
public/index.html

@@ -281,7 +281,7 @@
                   <li><b>验证调试端口:</b>客户端带参启动后,浏览器打开 <code>http://127.0.0.1:9669/json/version</code> —— 看到一段 JSON(含 "Browser")就是通的;打不开就是客户端没带参。</li>
                   <li><b>macOS 带参启动:</b>⌘Q 完全退出客户端(活动监视器确认进程没了)→ 终端执行:<code>open -a "淘宝闪购商家版" --args --remote-debugging-port=9669</code></li>
                   <li><b>Windows 带参启动:</b>任务栏右键完全退出(任务管理器确认)→ 右键快捷方式 → 属性 → 「目标」末尾加 <code>--remote-debugging-port=9669</code> → 以后都用这个快捷方式启动。</li>
-                  <li>回到本页点「刷新」,徽章变「客户端已连接」后同步即可。若同步弹窗报 <code>Failed to fetch</code>,先确认服务在跑(启动窗口未关闭)。</li>
+                  <li>回到本页点击「刷新」,徽章变「客户端已连接」后同步即可。若同步弹窗报 <code>Failed to fetch</code>,先确认服务在跑(启动窗口未关闭)。</li>
                 </ol>
                 <div class="help-popover-note">注意:客户端每次重启都必须带参启动,否则端口不会开启。</div>
               </div>
@@ -328,16 +328,16 @@
         <div class="page-header">
           <div>
             <h1>数据中台</h1>
-            <div class="sub">本地数据湖全景与明细数据(含全部原始字段),可从云端拉取补全</div>
+            <div class="sub">本地数据湖全景与明细数据(含全部原始字段),支持云端拉取补全</div>
           </div>
           <div class="toolbar">
             <button class="btn btn-ghost btn-small" id="btnLakeRefresh">
               <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12a8 8 0 1 1-2.3-5.6"/><path d="M20 4v5h-5"/></svg>
               刷新
             </button>
-            <button class="btn btn-primary btn-small" id="btnLakePull" title="以钉钉 AI 表格(云端主档案)为准,拉回本地湖;未注册的账号自动创建主体">
+            <button class="btn btn-primary btn-small" id="btnLakePull" title="以钉钉 AI 表格(云端主档案)为准覆盖本地湖;未注册的账号自动创建主体">
               <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3v12"/><path d="M7 10l5 5 5-5"/><path d="M4 21h16"/></svg>
-              从云端拉取
+              云端拉取
             </button>
             <span class="badge" id="lakeSyncBadge"></span>
           </div>
@@ -370,7 +370,7 @@
                     <li><b>不产生重复:</b>每一行的身份是「日期×账号×维度×门店」,多台电脑写同一行只会覆盖,不会重复。</li>
                     <li><b>数据新者胜:</b>推送时对比本地取数时间与云端修改时间,旧数据不会覆盖云端新数据(跳过并计数)。</li>
                     <li><b>全零拦截:</b>大批量指标全零(疑似取数异常)时拒绝推送,防止坏数据污染云端主档案。</li>
-                    <li><b>拉取以云端为准:</b>其他电脑「从云端拉取」后,本地同键行被云端版本覆盖。</li>
+                    <li><b>拉取以云端为准:</b>其他电脑执行「云端拉取」后,本地同键行被云端版本覆盖。</li>
                   </ol>
                 </div>
               </span>
@@ -389,7 +389,7 @@
             </table>
             <div id="lakeEmpty" class="empty-hint" hidden>
               <div class="empty-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20V11M10 20V4M16 20v-6M2.5 20h19"/></svg></div>
-              <p>本地湖为空<br><small>取数机先「同步数据」推上云端,本机点右上角「从云端拉取」</small></p>
+              <p>本地湖为空<br><small>取数机先「同步数据」推送云端,本机可用右上角「云端拉取」补全</small></p>
             </div>
           </div>
         </div>
@@ -466,7 +466,7 @@
             </table>
             <div id="reportEmpty" class="empty-hint" hidden>
               <div class="empty-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20V11M10 20V4M16 20v-6M2.5 20h19"/></svg></div>
-              <p id="reportEmptyText">暂无数据<br><small>取数机先「同步数据」推上云端,本机点右上角「从云端拉取」</small></p>
+              <p id="reportEmptyText">暂无数据<br><small>取数机先「同步数据」推送云端,本机可用右上角「云端拉取」补全</small></p>
             </div>
           </div>
           <div class="report-pager" id="reportPager"></div>
@@ -710,7 +710,7 @@
                   <button type="button" class="settings-link settings-link-btn" id="btnTestAitable"><span>测试连通</span></button>
                   <span id="aitableStatus" class="badge"></span>
                 </div>
-                <div class="help">架构:取数机「同步 → 自动推送」(数据采集页有手动推送按钮),其他电脑在「数据中台」页从云端拉取。推送/拉取入口分别在数据采集与数据中台页,本面板只管配置。</div>
+                <div class="help">架构:取数机「同步 → 自动推送」(数据采集页有手动推送按钮),其他电脑在「数据中台」页执行「云端拉取」。推送/拉取入口分别在数据采集与数据中台页,本面板只管配置。</div>
                 <div class="panel-save-row">
                   <button class="btn btn-primary btn-small" id="btnSaveAitable">保存设置</button>
                   <span id="aitableSaveStatus" class="badge"></span>

+ 1 - 1
public/reports.js

@@ -1462,7 +1462,7 @@
         badge.className = 'badge badge-fail';
       } else if (typeof data.pending === 'number' && data.pending > 0) {
         badge.textContent = `待推送 ${data.pending} 行`;
-        badge.title = '点「推送云端」会把上次推送之后的全部增量一次性推上钉钉 AI 表格';
+        badge.title = '「推送云端」会把上次推送之后的全部增量一次性推送至钉钉 AI 表格';
         badge.className = 'badge badge-warn';
       } else {
         badge.textContent = '已同步至云端';