跳至主要内容

REFERENCE

SDK 範例

@asgard-js/core 與 @asgard-js/react 的用法與可以直接操作的範例。

TABLE / CHART 進階功能

table 與 chart 兩個模板除了基本渲染之外還各有一組進階能力:TABLE 可以在表格旁附上產生它的 SQL 並讓使用者把資料下載走,CHART 可以一次給多種圖表讓使用者自己切換。兩者都不需要任何 props,後端在模板裡填了欄位就會出現。

  1. TABLE:SQL 分頁​

    table 物件有兩個選用欄位:

    欄位型別說明
    sqlstring產生這張表的查詢,在 SQL 分頁以帶語法高亮的程式碼區塊呈現
    sqlExplanationstring查詢說明,以 Markdown 渲染在 SQL 下方

    任一個有值就會在表格上方長出 Table / SQL 兩個分頁;兩個都沒有時連分頁列都不會出現,就只是 一張普通的表格。兩個欄位各自獨立——只給 sqlExplanation 不給 sql 也是合法的,SQL 分頁就只有 說明文字。

  2. TABLE:下載​

    下載按鈕出現在標題列右側,條件是在 Table 分頁且有資料(切到 SQL 分頁時會消失)。點開是 兩個選項:

    格式產出
    CSV逗號分隔,值含 ,/"/換行時加引號並把 " 跳脫成 ""。檔案開頭加了 BOM,Excel 開中文才不會亂碼
    JSON Lines一列一個 JSON 物件,以 columns 的 key 為鍵

    檔名是 <標題>_<YYYY-MM-DD>.<副檔名>,標題裡非中英數的字元會被換成底線。

    下載的是全部資料,不是當前頁

    pagination 只影響畫面上顯示幾列,下載一律匯出 data 的完整內容。整份檔案都在前端從當前資料 產生,不會回頭打後端。

    兩種格式匯出的都是套用 format 之後的顯示值,不是原始值——CURRENCY 欄位出來是 "$135,000" 而不是 135000。要拿原始數值做後續運算的話,這不是合適的來源。

    下載完成後右下角會跳出提示條,可以直接開啟剛下載的檔案,5 秒後自動收起。

  3. TABLE:欄位與格式​

    interface TableData {
    rowType: "OBJECT" | "ARRAY";
    columns: { header: string; key?: string; format?: "DATE" | "DATE_TIME" | "CURRENCY" }[];
    pagination: { size: number } | null;
    data: Record<string, unknown>[] | unknown[][];
    sql?: string;
    sqlExplanation?: string;
    }

    rowType 決定怎麼從一列取值,也決定表頭長什麼樣:

    • OBJECT — 每列是物件,用 column.key 取值。表頭會顯示兩行:header 在上、key 在下。
    • ARRAY — 每列是陣列,按欄位順序取值(key 用不到)。表頭只有 header 一行。

    format 影響儲存格的呈現:DATE 走 toLocaleDateString()、DATE_TIME 走 toLocaleString()、 CURRENCY 格式化成新台幣(無小數)。沒給 format 就直接轉成字串;null / undefined 一律顯示 成空字串。

  4. CHART:多種圖表切換​

    chartOptions 是一個陣列,每個元素是一種畫法:

    欄位型別說明
    chartOptions[].typestring識別字,defaultChart 用它比對
    chartOptions[].titlestring下拉選單顯示的名稱
    chartOptions[].specobjectVega 或 Vega-Lite spec
    defaultChartstring預設選中的 type
    下拉選單只在超過一個 option 時出現

    只給一個 option 時圖表照畫,但沒有可切換的東西,選單也就不會渲染。

    另外 defaultChart 對不到任何 type 時會退回第一個 option 的 spec,不會報錯——所以填錯字 只會安靜地畫出第一張圖。

    {
    type: MessageTemplateType.CHART,
    title: "各區銷售趨勢",
    text: "同一份資料提供兩種圖表。",
    defaultChart: "bar",
    chartOptions: [
    { type: "bar", title: "長條圖", spec: barSpec },
    { type: "line", title: "折線圖", spec: lineSpec },
    ],
    }
  5. CHART:渲染時 SDK 會動 spec​

    送進去的 spec 不是原封不動被畫出來的。SDK 會複製一份再改兩件事:

    1. 背景固定成白色。 這是刻意的——深色主題下 Vega 預設的軸標與圖例文字是深色的,透明背景會 讓它們幾乎看不見。
    2. 寬度跟著容器跑。 用 ResizeObserver 量外框寬度寫進 spec.width,並補上 autosize: { type: "fit", resize: true, contains: "padding" }。所以 spec 裡自己寫的 width 會被覆蓋,height 則保留。

    Vega 內建的 actions 選單(存檔/看原始碼那顆)一律關閉。

  6. 也看看​

    • 訊息模板 — 全部模板類型總覽
    • 主題 — 調整聊天介面配色(圖表背景不受影響,見上)

準備好開始了嗎?

想知道 Asgard 怎麼用在你的團隊?跟我們聊聊。

聯絡我們