From 5388f40c03ca25b5828be2436e3e8471c0e01d3a Mon Sep 17 00:00:00 2001 From: uncle6me-web Date: Fri, 7 Aug 2026 18:39:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(portal-ui):=20=E8=A8=AD=E5=AE=9A=E9=A0=81?= =?UTF-8?q?=E3=80=8C=E5=8C=AF=E5=87=BA=E8=A8=BA=E6=96=B7=E6=AA=94=E7=B5=A6?= =?UTF-8?q?=E6=88=91=E5=80=91=E7=9C=8B=E3=80=8D=E6=8C=89=E9=88=95=EF=BC=88?= =?UTF-8?q?=E6=AA=A2=E4=BF=AE=E5=AD=94=E5=89=8D=E7=AB=AF=EF=BC=8C2026-08-0?= =?UTF-8?q?7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit leo 直接指令的簡化版規格:一顆按鈕、按下去下載一個檔案、用戶自己把檔案傳出去—— 同意天然內建在「他自己按、自己傳」這個動作裡,不需要額外授權流程或內部概念外露。 按鈕打 GET /portal/data/diagnostics,把回應存成單一 JSON 檔(不是要解壓的一包) 直接觸發瀏覽器下載,檔名帶時間戳。沿用既有 authHeaders/safeJson/guard401/friendlyErr helper(與同頁其餘按鈕同一套錯誤處理慣例)。 既有前端輕量測試(safejson.test.mjs/os-split.test.mjs)跑過,18/18 全綠,未受影響。 --- console-ui/public/portal/index.html | 45 +++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/console-ui/public/portal/index.html b/console-ui/public/portal/index.html index b0a51b8..9278fac 100644 --- a/console-ui/public/portal/index.html +++ b/console-ui/public/portal/index.html @@ -415,6 +415,18 @@ if (!window.ARCRUN_API_BASE) { 文件整理成知識卡的部分,請在同步小幫手(電腦上的托盤圖示)的「AI 設定…」填一把 Gemini API Key。 + +
+
疑難排解
+
搜尋或同步有問題時,可以匯出一份狀態檔給我們,幫你更快找到問題(只有統計數字,不含你的任何文件內容)。
+
+ +
+
+
@@ -924,6 +936,39 @@ function taipeiMonthDay(ms) { var d = new Date(ms + TAIPEI_OFFSET_MS); return { dropSession(); }); + // ── 檢修孔(2026-08-07 leo 直接指令)────────────────────────────────────── + // 「按鈕下載一個檔案,把檔案發給我」:按下去打 /portal/data/diagnostics, + // 存成單一 JSON 檔(不是要解壓的一包)直接觸發瀏覽器下載。不彈視窗、不要求 + // 用戶理解內容——他只需要按一下、把跳出來的檔案傳給我們。 + (function () { + var btn = $('st-diag-export'); + if (!btn) return; + btn.addEventListener('click', function () { + var st = $('st-diag-status'); + btn.disabled = true; + st.textContent = '匯出中…'; + fetch(API_BASE + '/portal/data/diagnostics', { headers: authHeaders() }) + .then(function (r) { return safeJson(r).then(function (d) { return { ok: r.ok, status: r.status, d: d }; }); }) + .then(function (x) { + btn.disabled = false; + if (guard401(x.status)) return; + if (!x.ok) { st.textContent = '匯出失敗,請稍後再試'; return; } + var blob = new Blob([JSON.stringify(x.d, null, 2)], { type: 'application/json' }); + var url = URL.createObjectURL(blob); + var a = document.createElement('a'); + var stamp = new Date().toISOString().slice(0, 19).replace(/[:T]/g, '-'); + a.href = url; + a.download = 'arcrun-diagnostics-' + stamp + '.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + setTimeout(function () { URL.revokeObjectURL(url); }, 2000); + st.textContent = '已下載——把這個檔案傳給我們就可以了'; + }) + .catch(function (e) { btn.disabled = false; st.textContent = friendlyErr(e); }); + }); + })(); + // t87 07-28 leo:知識庫網址 helper(只有 origin,不含 /portal/# 後綴),兩處 UI 共用 function copyOriginUrl(btn) { var url = location.origin;