醫智匯

static-app

static-app

怎麼用

打開你的 AI 助手,把下面這句話貼給它。下面那一大段是寫給它看的,你不必讀。

請照平台的 static-app 這個 skill 幫我做

適用:使用者想要一個「打開就能用」的頁面,例如劑量換算、流程對照表、衛教單、檢查前準備清單。

不存任何資料、不需要知道使用者是誰——這是最簡單也最快能上線的類型。

什麼時候用這個 skill

  • 使用者描述的需求是「查」「算」「看」,沒有「登記」「填寫」「記錄誰做了什麼」。
  • 內容可以寫死在頁面裡,或由使用者在畫面上輸入後即時計算。
  • 若需要留下紀錄(誰填了、填了什麼),改用 form-app。

做法

  • 建立應用時 archetype 選 A,manifest 的 data.collects 留空、skills_used 填 static-app。
  • 簡單的工具一個 index.html 就好,CSS 與 JavaScript 直接寫在檔案裡。內容多的(衛教網站、多個主題)可以分成多頁

(about.html,網址 /about 就打得開),也可以把樣式、程式、圖片放進 css/、js/、img/——平台每一頁都支援。

  • 東西只能從應用資料夾或平台載入:不要引用外部 CDN、Google Fonts、外部網址的圖片。中文字型用平台書架的 noto-sans-tc(黑體)、noto-serif-tc(明體),清單在 https://platform.wanfangai.tw/lib/index.json。上線後安全設定(CSP)一定會擋外部的,

安全檢查卻只會警告、不會攔,所以要自己避免;把它列進 external_endpoints 也沒有用(那只開放 fetch 連線)。

需要套件(圖表、樣式…)先用平台提供的(llms.txt §4.9,清單 https://platform.wanfangai.tw/lib/index.json),平台沒有才下載進資料夾。

圖片、音檔、PDF 放進資料夾,整個資料夾壓縮後不能超過 50 MB;PDF 用連結在新分頁打開,不要內嵌在頁面裡(會被擋)。

內容多、要分好幾頁的(衛教網站、成果報告)改用 content-site。

  • 不要用 eval、不要用 http:// 的資源、不要放任何金鑰。
  • 手機優先:主要操作按鈕至少 44px 高,文字不小於 16px,欄位一次只問一件事。
  • 頁面最上方寫清楚「這個工具做什麼、資料來源是誰、最後更新日期」;最下方放負責人單位。

搬現有的 HTML 資料夾(使用者已經做好一個網頁)

使用者說「我有一個做好的網頁/資料夾,想放上平台」時照這段做。2026-10-15 Gary 整理的情境:同仁自己或請人做過,檔案在電腦裡。

  • 就在原本的資料夾做,不要另開新資料夾、不要重寫。分級問診、建立應用後,平台回的起始檔案只取 `app-manifest.yml` 與 `.wanfangai-version`

寫進原本資料夾的最上層;範本的 index.html 不要蓋掉他的。首頁要叫 index.html(不是的話改名,或加一個連過去的 index.html)。

  • 先找外部網址,再存版本:在所有 .html、.css、.js 裡找 http://、https://、//(<script src>、<link href>、CSS 的 @import 與 url(、<img src>)。

| 找到的 | 改成 |

|---|---|

| CDN 上的套件(jQuery、Bootstrap、Chart.js…) | 平台書架有的用書架(清單 https://platform.wanfangai.tw/lib/index.json),沒有的下載進資料夾、改成相對路徑 |

| Google Fonts | 書架的 noto-sans-tc/noto-serif-tc(見上面「做法」第 3 點) |

| 別的網站上的圖片 | 下載進資料夾(確認可以用、沒有病人資料) |

| <iframe> 嵌 YouTube、Google 地圖、Google 表單 | 平台不准任何內嵌:改成一般連結(target="_blank") |

一般的超連結(<a href="https://…">)不用改。改了什麼、為什麼,一項一項告訴使用者。

  • 路徑:要用相對路徑(css/style.css)或從網址根算起(/css/style.css);file:///C:/…、C:\… 這種本機路徑上線一定壞。

檔名大小寫要跟 HTML 裡寫的一模一樣——Windows 不分大小寫,平台的伺服器分:Logo.PNG 寫成 logo.png,在他電腦上好好的、上線就破圖。

  • 存在瀏覽器裡的舊資料不會跟過來:原本的網頁如果用 localStorage 存東西(例如勾選清單、草稿),搬到平台的網址後是另一個網站,打開是空的。

先問使用者那些資料要不要留:要留就請他在舊網頁匯出(沒有匯出鈕就先加一個),要多人共用的改用平台的資料服務(form-app)。

  • 存版本:檔案多或有圖片就打包上傳(wanfangai_upload_url → 外掛的 pack-upload.cjs → wanfangai_save_version 帶 upload_id),整個資料夾不能超過 50 MB。

資料夾裡不該上線的東西(舊版備份、Word 原稿、.env)先移出去。

  • 發佈試用版後,每一頁都點開、看瀏覽器主控台有沒有紅字(被擋的外部東西會出現在那裡),再請使用者自己點一次。

骨架

<!doctype html>
<html lang="zh-Hant">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>工具名稱</title>
  <style>
    body { font-family: system-ui, sans-serif; margin: 0; padding: 16px; line-height: 1.6; }
    button { min-height: 44px; font-size: 16px; }
  </style>
</head>
<body>
  <h1>工具名稱</h1>
  <p>一句話說明用途。</p>
  <!-- 表單與結果區 -->
  <script>
    // 所有邏輯寫在這裡;不要 fetch 外部網址
  </script>
</body>
</html>

存成 PDF

使用者要把畫面上的結果(計算結果、對照表)印出來、或存成檔案交出去時,用瀏覽器的「列印 → 另存為 PDF」,不用套件(jsPDF 沒有中文字型,不要用)。

2026-10-15 用 Chrome 實測:書架的中文字型會嵌進 PDF、長表格跨頁時表頭會重複、圖表完整。

  • 放一顆按鈕:<button type="button" class="no-print" onclick="window.print()">存成 PDF</button>,

旁邊一句「在列印視窗的『目的地』選『另存為 PDF』;不要日期與網址就取消勾選『頁首及頁尾』」。

  • 在 <style> 最後加列印樣式——選單、按鈕不印,表格的列不切半、每頁重複表頭,圖不超出紙張:

```css

@media print {

@page { size: A4; margin: 15mm; }

nav, button, .no-print { display: none !important; }

body { padding: 0; font-size: 11pt; color: #000; background: #fff; }

h1, h2, h3 { break-after: avoid; }

tr, img, canvas, figure, .card, .chart { break-inside: avoid; }

thead { display: table-header-group; }

table { width: 100%; }

canvas, img { max-width: 100% !important; height: auto !important; }

  • { print-color-adjust: exact; -webkit-print-color-adjust: exact; }

}

```

  • 只想印某一塊(例如一筆紀錄、某個篩選後的清單):其他區塊加 class="no-print"。
  • 想讓每台電腦印出來的字都一樣,用書架的黑體:<link rel="stylesheet" href="https://platform.wanfangai.tw/lib/noto-sans-tc@5.3.1/400.css">,font-family: 'Noto Sans TC', system-ui, sans-serif(粗體再載 700.css)。

發佈前檢查

  • 有「存成 PDF」的:在瀏覽器按一次看預覽——中文正常、按鈕與選單沒印出來、表格沒切半、圖完整。
  • check.sh(或 POST /precheck)沒有 blocker。
  • manifest:security_level: 1、visibility 依使用者需求(多數選 hospital)、data.collects: []。

即使頁面上有假病人案例、示範排班表這類內容,`collects` 還是留空——它問的是「存了什麼」,

不是「顯示了什麼」。填了會讓這個工具被標成「會存資料」,而且不能設為公開(見 synthetic-data)。

  • 若內容含病人資訊或員工個資,這個 skill 不適用,請回到分級問診。

用到的平台套件

照這份做法做的工具,會從平台載入這些: