專案

一般

配置概況

動作

Feature #1365

進行中

[FE] LINE LIFF Connector Status UI mapping

是由 陳國瑋28 天 前加入. 於 20 天 前更新.

狀態:
Resolved
優先權:
Normal
被分派者:
開始日期:
2026-07-06
完成日期:
完成百分比:

0%

預估工時:

概述

目的

調整 LINE LIFF 充電樁狀態頁面的 Connector Status UI mapping,讓 FE 能依 websocket / initial API 回傳的 connectorData.status 正確呈現狀態、CTA、Label、離峰充電 switch 與排隊行為。

此需求目標是 react/web 的 LIFF 充電頁,不是 Branch Admin UI。

適用畫面

  • Public charging page:/charger/{connectorId}
  • Private charging page:/charger/{connectorId}/private

資料來源

FE 應使用以下資料來源合併顯示:

  • Initial API:GET /api/connector/info/{buildingId}/{connectorId}
  • WebSocket connector update
  • connectorData.status:UI 邏輯判斷來源
  • connectorData.statusLabel:中文顯示文字來源
  • connectorData.enableOffPeak:離峰充電 switch 狀態
  • connectorData.nextOffPeakTimeStart
  • connectorData.nextOffPeakTimeEnd

statusLabel 只作為顯示文字,不應作為 FE 邏輯判斷來源。

WebSocket URL 與參數

FE 應使用環境變數 NEXT_PUBLIC_CHARGING_WS_URL 作為 websocket base URL。

建議設定值:

NEXT_PUBLIC_CHARGING_WS_URL=wss://{hq-api-domain}/ws/connector

實際連線 URL:

wss://{hq-api-domain}/ws/connector/{buildingId}/{connectorId}?xLineId={lineId}

參數說明:

位置 參數 必填 說明
path buildingId yes 社區 ID;用於 websocket session routing 與後端驗證住戶是否已綁定該社區。
path connectorId yes 充電樁 ID;用於訂閱單一 connector 的 initial data 與後續 update。
query xLineId yes LINE user id。Browser WebSocket 無法自訂 header,因此以 query string 傳遞等效的 X-Line-ID

FE URL 組法需支援兩種形式:

  • base URL 形式:NEXT_PUBLIC_CHARGING_WS_URL=wss://{hq-api-domain}/ws/connector,FE 自動補上 /{buildingId}/{connectorId}
  • placeholder 形式:NEXT_PUBLIC_CHARGING_WS_URL=wss://{hq-api-domain}/ws/connector/{buildingId}/{connectorId},FE 直接替換 {buildingId}{connectorId}

若缺少 NEXT_PUBLIC_CHARGING_WS_URLbuildingIdconnectorIdxLineId,FE 不應建立 websocket 連線,並應進入 error/fallback 狀態。

Status Mapping

status statusLabel UI Tone 行為
AVAILABLE 待命 green 可開始充電;Private 可切換離峰充電
ENQUEUED 排隊中 blue Private 顯示離峰排隊狀態與取消排隊
PREPARING 準備中 orange 可停止充電;不可切換離峰充電
CHARGING 充電中 green 可停止充電;顯示充電資訊
SUSPENDEDEVSE 充電站暫停 yellow 可停止充電;不可開始充電;不可切換離峰充電
SUSPENDEDEV 車輛暫停 yellow 可停止充電;不可開始充電;不可切換離峰充電
FINISHING 結束中 yellow read-only;不可再次充電
RESERVED 已預約 blue/neutral read-only;不可開始充電
UNAVAILABLE 不可用 gray read-only
FAULTED 故障 red read-only
unknown/null 未知狀態 gray read-only;不可 fallback 成 AVAILABLE

UI Color Tone

請 follow 目前 react/web 既有色碼基準:

Tone 建議色碼
green #00c300
red #ef4444
orange #f59e0b
yellow #facc15
blue #3b82f6
gray #9ca3af

CTA 行為

Public page:

status CTA
AVAILABLE 顯示開始充電
PREPARING / CHARGING / SUSPENDEDEVSE / SUSPENDEDEV 顯示停止充電
FINISHING / RESERVED / UNAVAILABLE / FAULTED / unknown/null 不顯示可操作 CTA,只顯示狀態

Private page:

status CTA
AVAILABLE + enableOffPeak=false 顯示立即充電
AVAILABLE + enableOffPeak=true 立即充電 disabled,因為已啟用離峰充電
ENQUEUED 顯示取消排隊
PREPARING / CHARGING / SUSPENDEDEVSE / SUSPENDEDEV 顯示停止充電
FINISHING / RESERVED / UNAVAILABLE / FAULTED / unknown/null 不顯示可操作 CTA,只顯示狀態

離峰充電行為

Private page 才顯示離峰充電 switch。

  • 只有 AVAILABLE 狀態可以切換離峰充電 switch。
  • enableOffPeak=true 時,不可立即充電。
  • ENQUEUED 時顯示離峰排隊狀態。
  • ENQUEUED 時顯示 nextOffPeakTimeStart / nextOffPeakTimeEnd 作為離峰時段。
  • ENQUEUED 時提供取消排隊 CTA。
  • 取消排隊成功後,離峰充電模式應同步呈現為 OFF。
  • enableOffPeak 為 null 或 undefined 時,不可沿用舊 switch 狀態造成 stale UI;應以 disabled/read-only 狀態處理。

實作要求

  • 建立集中式 status metadata / mapping,避免 Public / Private page 各自寫分散判斷。
  • status 是 UI 邏輯判斷來源。
  • statusLabel 是中文顯示來源。
  • unknown/null status 必須顯示 未知狀態,且不可被視為 AVAILABLE
  • 移除目前 FINISHING 可重新開始充電的 UI 行為。
  • 補齊 SUSPENDEDEVSESUSPENDEDEVRESERVED 的 UI 狀態。
  • websocket live data 與 initial API data 合併後,畫面應即時更新。

驗收條件

  • LIFF Public / Private Connector Status page 都能正確顯示所有 status。
  • FE 使用 NEXT_PUBLIC_CHARGING_WS_URL 組成 wss://{hq-api-domain}/ws/connector/{buildingId}/{connectorId}?xLineId={lineId} 連線。
  • 缺少 websocket URL、buildingIdconnectorIdxLineId 時,FE 不建立 websocket 並進入 error/fallback 狀態。
  • unknown/null status 不會顯示為待命,也不會出現開始充電 CTA。
  • FINISHING 不會顯示開始充電或再次充電 CTA。
  • Private page 只有 AVAILABLE 可切換離峰充電。
  • enableOffPeak=true 時,立即充電不可操作。
  • ENQUEUED 顯示排隊中、離峰時段與取消排隊。
  • websocket 收到 status update 後,status label、CTA、離峰 switch、排隊資訊會同步更新。

相關的議題清單 2 (2 進行中0 已結束)

關聯至 EMS - Feature #1366: [API] Connector WebSocket payload add statusLabelNew陳國瑋2026-07-06

動作
關聯至 EMS - Feature #1376: [FE/API] Branch Admin Connector Status WebSocket realtime updateNew陳國瑋2026-07-07

動作

是由 陳國瑋28 天 前更新

依 Ken 要求補充 websocket payload 的 connectorData.statusLabel 欄位與 FE 使用規則。

是由 陳國瑋28 天 前更新

  • 關聯至 Feature #1366: [API] Connector WebSocket payload add statusLabel 已新增

是由 陳國瑋28 天 前更新

API payload 欄位 connectorData.statusLabel 的後端實作票已建立:#1366。

是由 陳國瑋27 天 前更新

  • 被分派者 設定為 鍾正剛

是由 陳國瑋27 天 前更新

是由 陳國瑋27 天 前更新

  • 主旨[FE] Branch Admin Connector WebSocket Status UI mapping 變更為 [FE] LINE LIFF Connector Status UI mapping

是由 陳國瑋27 天 前更新

  • 關聯至 Feature #1376: [FE/API] Branch Admin Connector Status WebSocket realtime update 已新增

是由 陳國瑋27 天 前更新

是由 鍾正剛27 天 前更新

已完成開發,branch: feature/issue-1365-line-liff-connector-status

主要變更:

  • app/charger/charge.ts 建立集中式 status metadata(tone/label/CTA flag),涵蓋 AVAILABLE/STANDBY/ENQUEUED/PREPARING/CHARGING/SUSPENDEDEVSE(alias SUSPENDED_EVSE)/SUSPENDEDEV(alias SUSPENDED_EV)/FINISHING/RESERVED/UNAVAILABLE/FAULTED/unknown,unknown 不再 fallback 成 AVAILABLE
  • Public/Private dashboard 改由集中 metadata 判斷 CTA,移除 FINISHING 可重新開始充電的錯誤行為
  • statusLabel 傳遞路徑:WS store (ChargingConnectorData)、use-dashboard-data 合併邏輯已支援,若無此欄位則 fallback 為 mapping table 中文 label(後端 #1366 statusLabel schema 目前 sandbox 環境無法連線驗證是否已上線,程式已相容兩種情況)
  • 離峰充電開關支援 enableOffPeak 為 null/undefined 的三態 disabled 顯示,不再沿用舊值造成 stale UI
  • 新增手動 QA 檢查清單 docs/connector-status-qa-checklist.md(專案無自動化測試框架)

備註:yarn lint 在此環境因 eslint-config-next 相容性問題本身即無法執行(與此次改動無關,base branch 亦同),已改用 tsc --noEmit 驗證型別正確性,通過無誤。

是由 鍾正剛20 天 前更新

  • 狀態New 變更為 Resolved
動作

匯出至 Atom PDF