專案

一般

配置概況

動作

討論 #1423

進行中

Feature #1422: [功能開發] Backend Admin 營運 Dashboard(全案場適用,A17 首站)

[UI/UX] Dashboard Connector 即時狀態數量彈性顯示規則

是由 陳國瑋 於 約 2 個月 前加入. 於 15 天 前更新.

狀態:
New
優先權:
Normal
被分派者:

概述

閱讀基準: 主需求 #1422 與 HTML Mock v0.4/附件 #1121。以下沿用主票區塊編號,依畫面由上到下、由左到右說明。Mock 數字皆為假資料;功能適用所有案場,A17 不是固定規則。

06|Connector 即時狀態:本票要完成什麼

讓不同規模案場都能先看整體狀態,再看優先項目,最後按需打開完整清單。 Dashboard 不把所有 Connector 無上限展開,也不因只有 1~2 個就把卡片拉滿整列。

本票對應主票中下段的整列區塊。UI-DEC-001~021 的結果已整理進下方正文;已撤回的 008/009 只保留追溯,不是待開發需求。

Connector 即時狀態               總數/更新時間/品質/連線
  ↓
五項摘要:需留意|充電進行中|準備/排隊|可用|其他狀態
          (純資訊,不可點擊)
  ↓
優先項目卡片:依 Backend 順序,桌面8/平板6/手機4
  ↓
已顯示/總數、另有多少異常未顯示          查看全部
  │                                         │
點卡片 → 單支詳情                   完整清單 Drawer
                                   搜尋/摘要分類/Charge Group → 固定20筆分頁

1. 區塊標題列與資料時間

由左到右顯示「Connector 即時狀態」、Connector 總數、最後更新時間、freshness/stale 與即時連線狀態。

  • 案場/資料範圍由 Backend 決定,不在本區切案場。
  • 連線正常不代表所有來源都新鮮;資料品質與 WebSocket connection 分開呈現。
  • 本區沒有專用 Refresh/Retry。Socket 失敗或中斷,保留最後資料與時間,提示「已停止更新」;無資料為「—」,不是 0。整頁 reload 才重新嘗試,詳見第 7 節。

2. 五個摘要:先看完整統計,不從預覽卡推算

2.1 固定分類與判定順序

Backend 依同一份完整 Connector snapshot 分類,由上往下命中;一個 Connector 只屬於一類。分類只是唯讀呈現,不能覆寫原本的 OCPP/runtime/Queue。(UI-DEC-014/015)

順序/code 固定中文 分類條件
1 NEEDS_ATTENTION 需留意 isAbnormal=true;包含 OCPP OFFLINE、FAULTED、資料 STALE、Queue BLOCKED、SUSPENDED_EVSE、UNAVAILABLE、null/unknown/資料不足。
2 CHARGING 充電進行中 排除第一類後,runtime CHARGING/SUSPENDED_EV/FINISHING。
3 WAITING 準備/排隊 排除前兩類後,runtime PREPARING/ENQUEUED,或 Queue ELIGIBLE。
4 AVAILABLE 可用 排除前三類及下列特殊中性狀態後,runtime AVAILABLE。
5 OTHER 其他狀態 RESERVED、Queue NOT_PLUGGED/PAUSED/FINISHED,及已辨識、非異常且不屬前四類者;Unknown 不可放這裡。

NOT_PLUGGED 固定歸 OTHER,不當 WAITING;沿用 UI-DEC-015 的既定 mapping,不從中文 label 猜類別。這裡的「充電進行中」是顯示分類;上方 #1486 的同名 KPI 則計 canonical ACTIVE Session,不能要求兩者數字相等。

2.2 統計不變條件

  • 五類 count 無重複、無遺漏,加總=total。
  • NEEDS_ATTENTION.count=abnormalTotal。
  • item 的 displayBucket=NEEDS_ATTENTION 與 isAbnormal=true 必須一致。
  • 每個 item 保留 priorityReason/severity;同屬「需留意」仍可有不同細部排序。
  • 此分類不額外建立 #1463 的 Attention category 或告警。Backend counts 才是完整統計,FE 不從最多 8 張 preview 重算。

2.3 零值與互動(UI-DEC-016/017)

條件 顯示/互動
total>0 五項全部顯示,包含 count=0,固定順序;數字從0變非0不新增/移除項目。
total=0 隱藏摘要,顯示「尚未建立 Connector」與既有管理頁連結;Backend 仍回五個0,response shape 不變。
Loading/Error/Unknown 不以 falsy 判斷當成0,不顯示假正常空狀態。
任一摘要項目 不可點擊、不可觸發篩選、不開 Drawer、不導頁、不送request。

摘要用一般內容語意,不是 link/button/role=button,不設 tabindex、手型cursor、hover action、focus indicator、pressed/selected state。單支詳情仍由卡片、完整清單仍由「查看全部」負責。

例:只有1個 AVAILABLE,顯示「需留意0、充電進行中0、準備/排隊0、可用1、其他狀態0」,不是只剩一個摘要。

3. 預覽卡如何適應 1、2、30 或更多 Connector

3.1 一份 Top-8 payload,FE 只取前 8/6/4

寬度 最多顯示 排版
Desktop ≥1240px 8張 卡片約240~320px,左對齊、自動換欄;單卡最大寬度約360px,不拉滿。
Tablet 640~1239px 6張 寬時3欄×2列,窄時2欄×3列;不足以容納必要資訊就降欄。
Mobile <640px 4張 單欄;查看全部用全螢幕 Drawer。

欄數依可用寬度,不依 user-agent;不截斷 ID、status、stale 等必要資訊。(UI-DEC-001~003/013)

總數 桌面/平板/手機顯示筆數 重點
0 空狀態 不顯示假卡。
1 1/1/1 保留正常卡寬並靠左。
2 2/2/2 桌面雙卡靠左、手機單欄,不補空卡。
5 5/5/4 手機已有未顯示資料,不能用「9個以上」才提供查看全部。
7 7/6/4 平板與手機依自身上限。
8 8/6/4 只有桌面完整顯示8筆。
9、30、100或更多 8/6/4 不隨總數無限增加首頁高度;完整資料走Drawer。

Backend 對完整集合分類排序後回最多8筆,少於8回實際筆數。FE 不傳 viewport/device/requestedLimit、不要求三種 response,不重排或重判異常。

3.2 卡片由上至下的必要內容

內容 規則
Connector ID/車位 讓使用者辨識設備,不因卡片窄而截掉必要識別。
所屬 Charge Point 連線 badge OCPP ONLINE/OFFLINE/UNKNOWN,與runtime分開。
Connector runtime 如CHARGING/FAULTED/SUSPENDED;不能只剩一個綜合「在線」。
目前功率 API 有效數值與單位;未知null顯示無資料/—,不是0。
Active Session/Queue 若排隊顯示既有source、status、priority、statusReason、waitingSince/持續時間。
最後更新/stale 與來源品質一致;異常要有文字,不只靠色彩。
點擊行為 開啟單支detail drawer,有鍵盤操作與清楚focus。
同一個 Connector 可以同時有:
CP:OFFLINE
runtime:CHARGING
Queue:BLOCKED
      ↓
保留三層原始事實,summary只歸一個顯示分類;不寫回狀態。

Queue source 維持 MANUAL/OFF_PEAK。ROTATION 是既有 dispatch/slot 調度機制,不是新 queue source enum。等待時間只是資訊,不據此推導 timeout/SLA/isOverdue。(UI-DEC-010/011)

4. 哪些卡片排前面:Backend 統一排序

Preview、完整清單與 WebSocket 共用同一 ranking service/snapshot;同一 Connector 命中多條只採最高層級、不重複卡,保留其他原因供顯示。(UI-DEC-006/007/020)

優先層級 已確認條件
1 CP OFFLINE 且 Connector 有 Active Transaction
2 Connector FAULTED
3 CP OFFLINE、資料 STALE、Queue BLOCKED
4 SUSPENDED_EVSE、UNAVAILABLE
5 SUSPENDED_EV
6 CHARGING
7 PREPARING/Waiting
8 AVAILABLE

同層先按異常/狀態持續時間由久至新,再以 Connector ID 穩定排序。SUSPENDED_EVSE 與 SUSPENDED_EV 分開;Unknown 不 fallback AVAILABLE,Backend 提供保守且可解釋的 reason/severity。異常優先,未滿預覽再由其餘狀態補足。

舊文案更正: 第一層仍保留排序,但「提醒可能仍在離線充電或待 reconciliation」的舊解釋,已被 #1422、#1463 ATT-DEC-008/#1486 KPI-DEC-011 的較新邊界取代。只呈現連線與交易事實,不新增這些推測性 badge/原因/文案;本次不改排序、交易計數或作業狀態。

Footer 顯示多少沒被看見

hiddenCount = max(0, total - visibleCount)
hiddenAbnormalCount = max(0, abnormalTotal - visibleAbnormalCount)

visibleAbnormalCount 只計可見slice中 Backend 標 isAbnormal=true 者。這是FE純顯示計算,不是重建分類;數據不一致須顯示Partial/Error,不能靠clamp後宣稱正常。

例如total30、abnormalTotal10、桌面可見8筆且8筆異常:Footer 顯示另有22筆未顯示、另有2個異常,以及「查看全部30個Connector」。異常再多也不突破8/6/4上限。

5. 單支詳情與「查看全部」不是同一層

入口 打開什麼 資料與連線
預覽卡 單支 detail drawer GET /api/connector/info/{connectorId};沿用既有單Connector detail flow,開啟才使用其既有socket,關閉釋放,見#1424。
查看全部 N 個 Connector 完整清單 responsive Drawer REST search/分頁;不擴大Dashboard WS payload,不建立全清單每卡socket。

Overview 不內嵌所有Connector完整detail,Drawer內可看單支詳情或前往既有管理頁,但不能開出無上限per-Connector連線。

這裡的 Drawer 是什麼: 它不是跳到另一頁,而是從目前畫面右側滑出的暫時面板。桌面版保留部分 Dashboard 在背景;平板/手機可使用全螢幕 Sheet。使用者關閉後回到原入口與原 Dashboard 位置。單支 detail Drawer 只看一個 Connector;Full List Drawer 才是多筆搜尋、篩選與分頁。

6. 完整清單 Drawer:搜尋 → 固定排序 → 每頁20筆

6.1 畫面從上到下(UI-DEC-004/005/012/021)

  1. 標題、關閉:桌面右側約75vw(合理min/max);平板/手機全螢幕Drawer/Sheet。
  2. 搜尋:Connector ID、Charge Point ID、車位。
  3. 篩選:「摘要分類」、Charge Group。只在 Drawer 提供,首頁 preview 沒有搜尋/篩選,也沒有依總數 9 才出現的門檻。
  4. 單一responsive list:桌面緊湊列、窄畫面堆疊必要欄位,沒有Grid/Table切換。
  5. Footer:總筆數、頁次、上一頁/下一頁;另有既有Connector管理頁deep link。

「摘要分類」固定選項如下,與首頁五個摘要使用同一套 displayBucket;預設為「全部」。

UI 選項 Request displayBucket
全部 不傳/null
需留意 NEEDS_ATTENTION
充電進行中 CHARGING
準備/排隊 WAITING
可用 AVAILABLE
其他狀態 OTHER

首頁五項摘要仍是純資訊、不可點擊,不會開啟 Drawer 或預先套用篩選。V1 不把 Connector runtime status 與 Queue status 混成第三套 selector;兩者仍在每列中分層顯示。

關閉時focus回原「查看全部」按鈕,支援Escape、focus trap、可辨識標題及Loading/Empty/Error。首頁preview避免固定高度nested scrollbar;若使用scroll container須能鍵盤focus與捲動。Drawer內欄位與filter不因RWD改變語意。

6.2 每次都對完整資料集查詢(UI-DEC-019/020)

搜尋/篩選條件改變 → 回第1頁
                 ↓
POST /api/connector/search
目前案場完整集合 → filter → 共用priority sort → paginate(20)
                 ↓
content+Spring Page metadata → 當頁畫面/總數/頁次
  • Request沿用page/size,固定size=20、sortMode=DASHBOARD_PRIORITY;不另建pageSize或Dashboard專用search endpoint。
  • 畫面頁次從1開始;API adapter沿用既有endpoint的page convention,不改共用契約。
  • Response沿用content、totalElements、totalPages、size、number、numberOfElements、first、last、empty。
  • Search request不傳buildingId;Backend用與Overview相同resolver限制案場,不依賴FE filter授權。
  • 既有 search 基礎可重用,但 Dashboard mode 必須新增 displayBucket 與 Charge Group;keyword 需涵蓋 Connector ID、Charge Point ID、車位。缺少欄位須補 DTO、query、OpenAPI、contract tests。
  • 既有管理頁的原始 status 條件保留相容性;Dashboard Full List Drawer 不使用它來混合 runtime/Queue 語意。不能只篩目前20筆或Top-8。
  • Drawer沒有排序選單、可點欄位、升降冪或sorting state;不接使用者sidx/sord,Backend在Dashboard mode以priority為準。
  • 未使用Dashboard mode的 /connector/list,原sidx/sord排序保留;不縮減管理頁能力。
  • 不提供page-size selector、頁碼列、直接跳頁、virtualization或view-mode欄位。
結果筆數 Footer
0 Empty、「共0個」,無換頁控制
1~20 「共N個」,無換頁控制
>20 「第X/Y頁・共N個」+前後頁;第一頁停用上一頁、最後頁停用下一頁

30筆2頁、100筆5頁;換頁保留篩選,改任一條件回第1頁,total/內容/頁次必須屬同一查詢。

6.3 Full List request/response 最小契約(UI-DEC-021)

Request 至少包含下列欄位;欄位名稱可依既有 DTO 慣例調整,但語意不可改變。

欄位 規則
page 沿用既有 API page convention;UI 顯示從 1 開始。
size 固定 20。
keyword 可搜尋 Connector ID、Charge Point ID、車位;未填不過濾。
displayBucket 可省略;值限 NEEDS_ATTENTION/CHARGING/WAITING/AVAILABLE/OTHER。
chargeGroupId 可省略;只限制目前案場可見的 Charge Group。
sortMode 固定 DASHBOARD_PRIORITY;不是使用者可選欄位。
buildingId 不得由 FE 傳入;Backend 依登入者與 Overview 相同 resolver 決定案場。

每一筆 response item 至少要足以完成 Mock 的一列與狀態分層:

類別 最小欄位
識別/位置 connectorId、chargePointId、location、floor、parkingSpaceNo
群組 chargeGroupId、chargeGroupName;沒有群組時明確為 null
Dashboard 呈現 displayBucket、isAbnormal、severity、priorityReason
原始狀態 ocppConnectionStatus、runtimeStatus、queueStatus、queueReason;不適用者為 null
即時值/時間 currentPowerKw(未知為 null)、updatedAt、freshness

Page 外層仍沿用 content 與 Spring Page metadata。Backend 對完整集合完成 keyword/displayBucket/Charge Group filter,再做固定 priority sort 與 paginate;FE 不根據文字重新分類或重排。

6.4 條件只保留在本次頁面(UI-DEC-018)

行為 搜尋/篩選/頁碼
關閉再開、尚未離開Dashboard 保留,避免看完detail丟失位置。
整頁reload或離開後返回 空搜尋、全部篩選、第一頁、固定priority。

不寫URL query、browser history、localStorage/sessionStorage,不新增Backend preference,也不以WS同步;不保存viewMode或sorting state。

7. REST/WebSocket 契約與ownership

時機 如何更新
頁面首載 Overview bootstrap可顯示初始summary+Top-8。
一條Dashboard socket接手 initial DASHBOARD_LIVE_SNAPSHOT之後,本區以CONNECTOR_LIVE_BLOCK_UPDATED整包replacement summary+Top-8。
5分鐘/手動Overview 更新一般區塊,不覆寫本區live state、不重建socket。
Socket失敗/中斷 Header與本區提示、保留最後資料/時間,無資料—;不REST fallback、backoff、自動重連或gap recovery。
整頁reload 重新取bootstrap/ticket、建立socket。
完整清單/detail 依第5~6節既有REST與detail flow,不擴充Dashboard socket。

(#1424 DEC-031~041)

Payload位置 需要回傳
connectorSummary total、固定五個buckets的code/count
connectorPreview maxItems=8、total、abnormalTotal、items
每個item connectorId、displayBucket、isAbnormal、severity、priorityReason、卡片必要內容
共用metadata buildingId、來源時間/品質與受支援schemaVersion,依#1424

REST/WS共用同一service與contract,沒有三種viewport response,Backend不直接回各畫面remainingAbnormalCount;Footer由FE依同一totals計算。空案場仍五bucket,不回動態raw status keys。

8. 開發分工與驗收

負責方 交付
Backend 完整集合分類/排序/Top-8、統計不變條件、原始狀態分層、REST/WS同contract;擴充既有search的 displayBucket/keyword/Charge Group、最小response欄位與固定20筆分頁。
FE 依本票畫面順序實作標題、純資訊summary、8/6/4 cards、Footer、detail與Full List;RWD/focus/Loading/Empty/Partial/Error/Stale。
QA 數量/斷點矩陣、priority/bucket不同層語意、隱藏數、搜尋完整集合、固定排序/分頁/page session、socket failure與管理頁無回歸。
  • 0/1/2/8/9/30/100筆+390/768/1024/1440px;手機另4/5、平板另6/7的上限邊界正確。
  • 少量靠左不拉滿、內容不截斷,大量不無限增高;無頁面水平捲軸。
  • 五bucket互斥、合計total、需留意=abnormalTotal、item異常一致;Unknown不當AVAILABLE、NOT_PLUGGED不當WAITING。
  • total>0固定含0五項、total=0明確Empty;五摘要不可點、不進Tab、不發request。
  • Backend ranking穩定、同層持續時間/ID;多條件不重複卡,FE只取8/6/4,隱藏總數/異常數正確。
  • 三層原始狀態與卡片minimum content保留;未知功率不填0,不推論離線充電。
  • 完整Drawer桌面側邊、平板手機全螢幕;搜尋/「摘要分類」/Charge Group固定存在,Escape/focus trap/返回焦點正確。
  • 「摘要分類」固定六選項且直接對應 displayBucket;首頁五摘要不可點、不帶入條件,runtime/Queue status仍分層顯示。
  • 對完整集合filter→sort→paginate;30/100筆為2/5頁,0~20無換頁,first/last按鈕與metadata一致;request/response符合第6.3節。
  • 無使用者排序/page-size/直接跳頁/Grid-Table/virtualization;管理頁原排序正常。
  • close/reopen保留條件頁碼、reload/navigation重設,不持久化、不傳buildingId。
  • 首載REST、後續WS整包同contract;一般REST不覆寫live,斷線無備援/自動重連,detail socket關閉釋放。
  • Keyboard可操作卡片、filter、Drawer與捲動內容;production不使用fixture fallback。
  • 無Queue SLA/isOverdue、override/設定介面/audit、Rotation health、充電指令或業務狀態寫回。

Mock ?connectors=30/100僅模擬UI,不能當正式REST pagination已通過;正式search與權限仍須integration/E2E驗證。

9. 決策索引與已取代內容

決策 本文位置/狀態
UI-DEC-001~003 數量/RWD 第3節;2026-09-03已確認
UI-DEC-004/005 Drawer/搜尋位置 第5~6節;2026-09-03已確認
UI-DEC-006/007 排序owner/層級 第4節;2026-09-03已確認,推測文案依較新決策撤回
UI-DEC-008/009 Queue timeout/override 已被011撤回,不實作
UI-DEC-010/011 Queue來源/只讀界線;012單一list 第3、6、8節;2026-09-03已確認
UI-DEC-013 Top-8;014互斥;015 mapping 第2~4、7節;2026-09-04已確認
UI-DEC-016零值/017不可點 第2.3節;2026-09-05已確認
UI-DEC-018 page memory;019分頁;020排序 第6節;2026-09-05已確認
UI-DEC-021 Full List「摘要分類」與最小契約 第5~6節;2026-09-16已確認

已取代的舊文字包括「3~8一律全顯示/30以上8或4」(須按8/6/4斷點)、9筆才出現搜尋、summary篩選捷徑、可選排序、virtualization、三套viewport payload、Backend直接回剩餘異常數。舊討論保留於journals,不再混在現行開發規則。

相關票:#1424 API/WS與權限;#1463需留意事項;#1486 KPI。此票仍沿用現有指派與進度。

需求管理與本次編輯

  • 本票仍是已確認需求的追蹤票,不代表已完成開發或通過測試;指派、狀態、進度、附件與父子關係均維持原狀。
  • v0.4 Draft 文件套件已依 #1422 DOC-DEC-001 發布並保留 v0.2/v0.3;目前閱讀基準為 PDF #1119、Markdown #1120、HTML #1121。此版仍是 review Draft,尚非 v1.0。
  • 2026-09-14:僅重整 Description、說明與排版,將已確認決策併入對應畫面/工程工作;決策編號保留供追溯。E2E impact:No catalog change(沒有修改產品行為、公式或 API 契約);功能實作時仍須遵循主票與本票驗收。
  • 2026-09-16:依 Ken 確認新增 UI-DEC-021;Full List 的篩選命名為「摘要分類」,直接使用 displayBucket,並明列 search request/response 最小契約。首頁摘要的不可點擊規則不變;本輪只更新需求,不發布附件、不更動 Issue 狀態/進度。

是由 陳國瑋 於 約 2 個月 前更新

  • 追蹤標籤 從 Bug 變更為 Task
  • 完成百分比 設定為 0

是由 陳國瑋 於 約 2 個月 前更新

票券分類說明

EMS 專案未啟用全域 討論 tracker,因此本需求釐清子票使用專案已啟用的 Task。

此票目前只用於記錄與確認 UI/API 需求,不代表已進入開發。待「待確認事項」全部決策完成後,才整併至 #1422 的最終 v1.0 規格並建立實作子票。

是由 陳國瑋 於 約 2 個月 前更新

  • 追蹤標籤 從 Task 變更為 討論
  • 開始日期 已刪除 (2026-08-10)

是由 陳國瑋 於 28 天 前更新

UI-DEC-001 已確認

Ken 同意 Desktop(>= 1240px)Connector preview limit 為 8 張:

  • 1–8 個時全部顯示
  • 9 個以上顯示異常/營運優先排序後的前 8 張
  • 異常超過 8 個時顯示剩餘異常數與「查看全部」
  • 卡片數量少時維持合理寬度並左對齊
  • 完整清單不受 preview limit 限制

Tablet 與 Mobile 上限仍分開確認。本票維持 New / 0%/需求待確認。

是由 陳國瑋 於 28 天 前更新

UI-DEC-002 已確認

Ken 同意 Mobile(< 640px)Connector preview 採單欄、最多 4 張:

  • 1–4 個時全部顯示
  • 5 個以上顯示異常/營運優先排序後的前 4 張
  • 異常超過 4 個時顯示剩餘異常數
  • 「查看全部」進入 Mobile 全螢幕清單/Drawer
  • 不允許頁面級水平捲軸

Tablet 上限仍待下一步確認。本票維持 New / 0%/需求待確認。

是由 陳國瑋 於 28 天 前更新

UI-DEC-003 已確認

Ken 同意 Tablet(640–1239px)Connector preview limit 為 6 張:

  • 寬版 3 欄 × 2 列
  • 窄版 2 欄 × 3 列
  • 1–6 個全部顯示;7 個以上依異常/營運優先度截取前 6 張
  • 異常超限時顯示剩餘異常數
  • 依容器寬度換欄,不依 user-agent 判斷

本票維持 New / 0%/需求待確認。

是由 陳國瑋 於 28 天 前更新

UI-DEC-004 已確認

Ken 同意「查看全部」採 responsive Drawer:

  • Desktop:右側 Drawer,約 75vw 並設 min/max width
  • Tablet/Mobile:全螢幕
  • Drawer 提供搜尋、篩選與 server-side pagination
  • 提供既有 Connector 管理頁 deep link
  • 不另建功能重複的 Dashboard 清單頁
  • 關閉後需恢復 keyboard focus,並涵蓋完整 loading/empty/error states

本票維持 New / 0%/需求待確認。

是由 陳國瑋 於 28 天 前更新

UI-DEC-005 已確認

Ken 同意取消「9 個以上才顯示搜尋/篩選」:

  • Dashboard preview block 不放搜尋/篩選
  • 完整清單 Drawer 固定提供搜尋/篩選
  • 條件交由 REST search API 執行,不只篩選已載入資料
  • Desktop/Tablet/Mobile 使用一致規則
  • Description 中原本互相衝突的 1–8/9+ 規則已同步改寫

本票維持 New / 0%/需求待確認。

是由 陳國瑋 於 28 天 前更新

UI-DEC-006 已確認

Ken 同意 Connector preview priority sorting 由 Backend 統一負責:

  • REST overview 與 WebSocket 共用同一 ranking policy
  • FE 只依回傳順序呈現,不重建異常權重
  • Backend 計算 bounded preview 與 remaining abnormal count
  • Response 提供可解釋的 priority reason/severity code
  • 精確狀態 precedence 與 tie-breaker 另行確認

本票維持 New / 0%/需求待確認。

是由 陳國瑋 於 28 天 前更新

UI-DEC-007 已確認

Ken 同意 Connector preview priority hierarchy:

  1. CP Offline + Active Transaction
  2. Faulted
  3. Offline/Stale/Queue Blocked 或等待超時
  4. Suspended EVSE/Unavailable
  5. Suspended EV
  6. Charging
  7. Preparing/Waiting
  8. Available

同層級依持續時間由久至新,再以 Connector ID 穩定排序;多條件只顯示一張 card,採最高層級並保留其他 reasons。Description 中原 Proposed Sorting 已同步改為確認版本。

本票維持 New / 0%/需求待確認。

是由 陳國瑋 於 28 天 前更新

UI-DEC-008 已確認

Ken 同意 Queue waiting timeout policy 由 Backend 判定:

  • BLOCKED 立即視為異常
  • WAITING/ELIGIBLE 依 source 與有效等待起點判斷
  • OFF_PEAK 只在有效離峰 window 內計算
  • MANUAL/ROTATION/OFF_PEAK 使用各自 policy
  • Backend 回傳 waiting duration、threshold、isOverdue 與 reason
  • FE 不自行計時
  • 可受控地依 building/Charge Group override
  • stale cutoff 沿用 #1424 DEC-006/DEC-007

實際預設門檻、override precedence 與合理上下限仍列為待確認,不在本次自行決定。本票維持 New / 0%。

是由 陳國瑋 於 28 天 前更新

UI-DEC-009 已確認:Queue timeout 設定優先序為 Charge Group + queue source → Building(案場)+ queue source → 全系統 queue source default。Backend 統一解析並回傳 effective threshold 與設定來源,FE 不重建 precedence。實際 MANUAL/ROTATION/OFF_PEAK 預設秒數、合理上下限及 Admin 設定管理方式仍待逐項確認。

是由 陳國瑋 於 28 天 前更新

程式碼對齊檢查發現待確認語意:ChargingRequestSource 現行 enum 僅有 MANUAL、OFF_PEAK(java/ems_branch/.../ChargingRequestSource.java);ROTATION 是調度機制(RotationChargingTask 每 30 分鐘 tick,另有狀態事件補派),不是既有 queue source。已加入待確認清單;在 Ken 定案前不得據此新增 ROTATION source enum 或固定門檻。

是由 陳國瑋 於 28 天 前更新

UI-DEC-010 已確認:ChargingRequestSource 維持 MANUAL/OFF_PEAK,不新增 ROTATION source enum;ROTATION 改列為 dispatch/scheduler-health 維度,與單筆 Queue waiting SLA 分開判定。已同步修正 UI-DEC-008/009 的舊文字,override precedence 不變,適用於 MANUAL/OFF_PEAK。

是由 陳國瑋 於 28 天 前更新

UI-DEC-011 已確認並收斂需求:Dashboard V1 是唯讀資訊投影。Queue 只顯示既有 source/status/priority/statusReason/waiting duration;既有 BLOCKED 可提示,WAITING/ELIGIBLE 不依等待時間升級。UI-DEC-008/009 的 Queue SLA、timeout、override 與 Admin 設定方案已撤回;UI-DEC-010 僅保留 MANUAL/OFF_PEAK source 與 ROTATION dispatch mode 的正確顯示語意。本次不新增 future child issue。

是由 陳國瑋 於 28 天 前更新

UI-DEC-012 已確認:V1 不提供 Grid/Table 切換。Dashboard preview 固定 Cards;完整清單 Drawer 使用單一 responsive list,Desktop 為緊湊列、Tablet/Mobile 自動堆疊。FE 不保存 view mode,Backend 不新增 viewMode contract。

是由 陳國瑋 於 27 天 前更新

同步 #1424 DEC-031:Connector 即時狀態保留 WebSocket 整區 replacement;斷線顯示提示並保留最後 preview,不做 REST fallback/custom reconnect。既有 1/2/30/100 個 Connector 的 responsive 與排序規則不變。

是由 陳國瑋 於 27 天 前更新

同步 DEC-032:Overview 只在首次載入提供 Connector bootstrap;WebSocket 接手後,5 分鐘/手動 REST refresh 不覆寫本區,也不形成斷線 fallback。

是由 陳國瑋 於 27 天 前更新

需求管理一致性整理:本票 UI-DEC-001~012 與待確認清單均已完成,修正仍寫著 Proposed/待確認及 Tablet 上限未定的舊狀態文字;Issue 維持 New/0%,等待全 Dashboard 鎖版。

是由 陳國瑋 於 27 天 前更新

鎖版前待確認:UI-DEC-013 Connector preview 單一 payload

問題

已確認 Desktop/Tablet/Mobile 分別顯示 8/6/4 張 preview,但 Backend 無法也不應依 browser viewport 回傳三種 response。目前 UI-DEC-006 又要求 Backend 負責 ranking 與剩餘異常數;若直接照字面實作,可能導致 viewport parameter、三套 preview 或三組 remaining count,增加不必要複雜度。

建議的最小 contract

  • Backend 對全案場 Connector 完成唯一一次 priority ranking/異常分類。
  • Overview 與 CONNECTOR_LIVE_BLOCK_UPDATED 固定回傳排序後前 8 筆,以及 total、abnormalTotal;每筆帶 Backend 判定的 isAbnormal、severity/priorityReason。
  • FE 不重新排序、不從 status 中文推導異常,只依 viewport 取前 8/6/4 筆。
  • hiddenCount = total - visibleCount;hiddenAbnormalCount = abnormalTotal - visible items 中 Backend 已標記 isAbnormal 的筆數。這只是顯示數量算術,不是業務分類。
  • 「查看全部」仍以 REST search API 開啟完整清單 Drawer;WebSocket 不傳 30/100 筆完整 detail。

例子

案場共 30 個 Connector,其中 Backend 判定 10 個異常:Backend 回傳排序前 8 筆(皆為異常)、total=30、abnormalTotal=10。Desktop 顯示 8 張並提示另有 2 個異常;Tablet 顯示前 6 張並提示另有 4 個;Mobile 顯示前 4 張並提示另有 6 個。三種畫面使用同一 payload。

待 Ken 確認後才更新 description 與 mock;本議題維持 New/0%。

是由 陳國瑋 於 27 天 前更新

【需求確認】Ken 已同意 UI-DEC-013:Connector preview 採單一 Top-8 payload。Backend 對完整集合排序與異常分類,回最多 8 筆及 total/abnormalTotal/item abnormal metadata;FE 僅依 breakpoint 顯示 8/6/4 筆並計算純顯示隱藏數量。REST bootstrap 與 CONNECTOR_LIVE_BLOCK_UPDATED 共用同一 contract;完整清單仍走 REST Drawer。議題維持 New/0%。

是由 陳國瑋 於 27 天 前更新

【Mock 同步】已更新本地 documents/dashboard-mockup/a17-operations-dashboard.html:Connector preview DOM 固定為 Backend 排序後 Top-8;Desktop/Tablet/Mobile 顯示 8/6/4;Footer 顯示 hidden count;新增查看全部 REST Drawer 假資料互動。可用 ?connectors=0、1、2、30 檢查不同案場數量,?ws=disconnected 檢查斷線提示。這是需求 Mock 更新,未實作正式 FE/BE。

是由 陳國瑋 於 27 天 前更新

【下一項待確認:UI-DEC-014】目前 Status summary 同時列 OCPP connection、Connector runtime 與 Queue 狀態;同一 Connector 可能同時是 CP OFFLINE、最後 runtime CHARGING、Queue BLOCKED,因此若各項獨立計數,加總會大於 total,與現有 Acceptance Criteria「分項加總與 total 一致」衝突。建議 summary 採 Backend authoritative 的互斥 displayBucket:每個 Connector 依既有 priority hierarchy 只歸入一個摘要類別,所以分項總和等於 total;Card/Drawer 仍分層顯示所有原始狀態。這只是唯讀顯示分類,不修改 OCPP、Queue 或充電作業邏輯。此項尚未確認,不寫入正式 decision。

是由 陳國瑋 於 27 天 前更新

【需求確認】Ken 已同意 UI-DEC-014:Connector Status summary 使用互斥 displayBucket。每個 Connector 恰好歸入一個摘要類別,各 bucket count 加總等於 total;Card/Drawer 繼續分層顯示 OCPP connection、runtime、Queue 原始狀態。這只是唯讀顯示分類,不改變作業邏輯。Bucket 名稱與 precedence 另列 UI-DEC-015 待確認,議題維持 New/0%。

是由 陳國瑋 於 27 天 前更新

【下一項待確認:UI-DEC-015】程式碼核對:ConnectorStatus 有 AVAILABLE/PREPARING/ENQUEUED/CHARGING/SUSPENDED_EVSE/SUSPENDED_EV/FINISHING/RESERVED/UNAVAILABLE/FAULTED;OcppConnectionStatus 有 UNKNOWN/ONLINE/OFFLINE;Queue OffPeakChargeStatus 有 ELIGIBLE/CHARGING/PAUSED/FINISHED/NOT_PLUGGED/BLOCKED。為避免建立很多摘要類別,建議直接重用已確認的最高 priority reason,依序映射成五個互斥 bucket:① NEEDS_ATTENTION「需留意」=isAbnormal true(含 offline/faulted/stale/blocked/SUSPENDED_EVSE/unavailable/unknown);② CHARGING「充電進行中」=其餘 SUSPENDED_EV/CHARGING/FINISHING;③ WAITING「準備/排隊」=其餘 PREPARING/ENQUEUED/Queue ELIGIBLE;④ AVAILABLE「可用」=其餘 AVAILABLE;⑤ OTHER「其他狀態」=RESERVED、NOT_PLUGGED、PAUSED/FINISHED 或未落入前述但已辨識的中性狀態。Unknown 不可落入 AVAILABLE。這是待確認提案,尚未更新 description 或 mock;確認後再定義 stable codes、precedence、範例與 UI summary。

是由 陳國瑋 於 27 天 前更新

【需求確認】Ken 已同意 UI-DEC-015:Status summary 固定五類互斥 bucket,順序為 NEEDS_ATTENTION「需留意」→ CHARGING「充電進行中」→ WAITING「準備/排隊」→ AVAILABLE「可用」→ OTHER「其他狀態」。Unknown 歸需留意、NOT_PLUGGED 歸其他;NEEDS_ATTENTION count 必須等於 abnormalTotal。僅為唯讀顯示分類,不新增告警或改變作業狀態。議題維持 New/0%。

是由 陳國瑋 於 27 天 前更新

【Mock 同步】已更新 documents/dashboard-mockup/a17-operations-dashboard.html:Connector 區塊新增五類互斥 Status summary,預設 12 筆假資料為需留意 2、充電進行中 3、準備/排隊 2、可用 4、其他狀態 1;數字直接取 Backend-shaped fixture,不從 visible Top-8 重算。Preview/完整清單 fixture 均帶 displayBucket,並檢查 bucket sum = total、NEEDS_ATTENTION = abnormalTotal、item displayBucket/isAbnormal 一致。?connectors=0/1/2/8/9/30/100 可檢查不同規模。這仍是需求 Mock,未實作正式 FE/BE。

是由 陳國瑋 於 27 天 前更新

【下一項待確認:UI-DEC-016】零筆 bucket 的呈現方式尚未定案。建議只要 Connector total > 0,就固定顯示五個 bucket,即使 count = 0;理由是版面與閱讀位置穩定、WebSocket 更新時不會讓 chip 跳動,且「需留意 0」本身有確認正常的價值。total = 0 時則隱藏整組 summary,顯示「尚未建立 Connector」Empty State。另一方案是隱藏零筆 bucket,畫面較少但位置會隨狀態改變。Mock 的 small-site fixture 暫以固定五類呈現作為待確認提案。

是由 陳國瑋 於 27 天 前更新

【需求確認】Ken 已同意 UI-DEC-016:只要 Connector total > 0,五個 Status summary bucket 全部固定顯示,包含 count = 0;total = 0 時隱藏 summary 並顯示 Connector Empty State。Backend 對所有 total 維持同一個五項 contract,FE 不把 0 當成 Loading/Error/Unknown,也不因 WebSocket 更新增減或重排項目。這只規範唯讀呈現,不新增作業邏輯。E2E impact:目前僅需求與 Mock,正式產品未變,故 No catalog change;實作時須納入 Dashboard UI/contract 案例。議題維持 New/0%。

是由 陳國瑋 於 27 天 前更新

【下一項待確認:UI-DEC-017】五個 Connector Status summary 項目是否可點擊尚未定案。

建議維持純資訊、不可點擊:只顯示五類數量;查看 Connector 的互動仍由下方 preview card 與「查看全部」負責,不從 summary 開 Drawer、套篩選或呼叫新 API。理由是這個 Dashboard 以快速閱讀為主,避免同一區塊出現兩套導覽入口,也避免增加 filter state、可存取互動與 API 契約。

另一方案是點擊 bucket 後開啟已套用該類篩選的 Drawer;操作較快,但需要額外定義 bucket-to-filter mapping、zero bucket disabled state、URL/focus/清除篩選等行為。

是由 陳國瑋 於 26 天 前更新

【需求確認】Ken 已同意 UI-DEC-017:NEEDS_ATTENTION/CHARGING/WAITING/AVAILABLE/OTHER 五個摘要項目維持純資訊、不可點擊;不實作 link、button、tabindex、Drawer shortcut、filter、navigation 或 request。Connector preview card 與「查看全部」維持 detail/完整清單入口。本決策正式取代 UI-DEC-005 中可由 FE plan 自行決定 summary shortcut 的早期文字。E2E impact:目前僅需求與 Mock,正式產品未變,故 No catalog change;實作時納入 UI accessibility/interaction 案例。議題維持 New/0%。

是由 陳國瑋 於 26 天 前更新

【下一項待確認:UI-DEC-018】「查看全部」Drawer 關閉後重新開啟時,搜尋、篩選與頁碼的保留範圍尚未定案。

建議只保留在目前 Dashboard 頁面 session:使用者關閉後再開啟 Drawer,維持剛才的搜尋/篩選/頁碼;重新整理頁面或離開 Dashboard 後回來則恢復預設排序與第一頁。不寫入 URL、不使用 localStorage,也不由 Backend 保存。

這樣可避免使用者只是查看一張 Connector detail 後回來便失去清單位置,同時不增加可分享 URL、跨頁持久化、版本相容或 Backend preference API。另一方案是每次關閉就重設,實作略簡單但容易讓使用者失去查找進度;完整 URL 持久化則較複雜。

是由 陳國瑋 於 26 天 前更新

【需求確認】Ken 已同意 UI-DEC-018:完整清單 Drawer 的 search/filter/page 只保留於目前 Dashboard page session;關閉再開啟維持,reload 或離開後返回時恢復預設排序、空白條件與第一頁。V1 不寫 URL/history、localStorage/sessionStorage,Backend/WebSocket 也不保存。Mock 目前只能驗證 search/filter close/reopen,未以假分頁冒充 production pagination。E2E impact:正式產品尚未變更,故 No catalog change;實作時納入 Drawer state lifecycle 案例。議題維持 New/0%。

是由 陳國瑋 於 26 天 前更新

【下一項待確認:UI-DEC-019】完整清單 Drawer 的 REST pagination 尚需定義 page size、換頁控制及搜尋/篩選後的頁碼處理。

建議 V1 固定每頁 20 筆,不提供 page-size selector 或直接跳頁;Footer 只顯示「上一頁/下一頁」與「第 X / Y 頁・共 N 個」。總數 1~20 時不顯示分頁控制。搜尋或任一篩選條件變更時回到第 1 頁,再以完整條件呼叫 REST search API;不能只篩選目前已載入的 20 筆。

這能涵蓋 30、100 個 Connector 的案場,又避免 page-size preference、任意跳頁與多套 mobile controls。另一方案是每頁 30 筆,30 個 Connector 可單頁顯示,但 Mobile 清單較長。

是由 陳國瑋 於 26 天 前更新

【需求確認】Ken 已同意 UI-DEC-019:Connector 完整清單固定每頁 20 筆;Footer 只提供上一頁/下一頁與「第 X / Y 頁・共 N 個」,1~20 筆隱藏換頁控制。搜尋或篩選改變時回第 1 頁,由 Server 對完整資料集重查後分頁;V1 不提供 page-size selector、直接跳頁或 virtualization。

現有 POST /api/connector/search 已具 page/size 與 Spring Page response;實作時以重用/擴充為原則,並補足 Charge Point ID/Charge Group 等缺少的 query criteria 與 contract tests。Mock 已補 30/100 筆的 2/5 頁檢視,但不等同 production pagination 已完成。

本票 UI-DEC-001~019 已確認;下一項為 UI-DEC-020(是否提供使用者可選排序)。議題維持 New/0%。E2E impact:本次 No catalog change;正式實作必須新增或更新 UI/REST pagination case。

是由 陳國瑋 於 26 天 前更新

【需求確認】Ken 已同意 UI-DEC-020:Connector 完整清單不提供使用者排序控制;固定使用 Backend priority hierarchy 與 deterministic tie-breaker。搜尋/篩選只縮小結果,Backend 必須在完整結果排序後才切成每頁 20 筆。

實作責任:Dashboard Drawer 以既有 search endpoint 的 stable DASHBOARD_PRIORITY read mode 取得資料,不讓使用者操作 sidx/sord;Backend 重用 preview ranking。既有 /connector/list 管理頁排序不受影響。

UI-DEC-001~020 已全部確認,Connector 數量彈性顯示子需求已鎖定;議題仍維持 New/0%,待 Dashboard 整體鎖版後再進入開發。E2E impact:本次 No catalog change;實作時補固定排序與 regression coverage。

是由 陳國瑋 於 26 天 前更新

【現行需求一致性整理|#1424 DEC-029/031/032】

  • Connector 即時狀態維持 Dashboard WebSocket 區塊,事件仍 replacement 整個 summary + Top-8 preview;五個 summary 項目本身只更新固定 counts,不再留下「整個 event 只更新數字」的歧義。
  • 移除 Connector 區塊專用 Refresh/Retry;socket 中斷後保留最後資料並提示,整頁 reload 才重新連線。
  • Drawer request 不傳 buildingId,改由 Backend current-building resolver 限制 scope;V1 無 building selector。
  • 本次只同步已確認規則,UI-DEC-001~020 的分類、排序、分頁、RWD 與互動決策不變;Issue 維持 New/0%。

E2E impact:No catalog change;正式實作仍須依既有 Connector E2E impact 建立 cases,本次未執行產品/整合/E2E 測試。

是由 陳國瑋 於 24 天 前更新

【v0.3 FE Review 指派】

指派 Ryan(ryanchung)進行 Backend Admin Dashboard v0.3 的 FE/UI 可實作性審查。本次是需求 Review,不是開始開發;請勿變更 Issue 狀態或進度。

Review 套件位於 Parent #1422:

  • PDF attachment #1115:backend-admin-dashboard-requirements-v0.3.pdf
  • Markdown attachment #1116:backend-admin-dashboard-requirements-v0.3.md
  • HTML Mock attachment #1117:backend-admin-dashboard-mock-v0.3.html

本票 Review 重點:

  1. Connector 為 0、1、2、8、9、30、100 筆時,首頁及 Drawer 是否均可合理呈現。
  2. 390/768/1024/1440px 是否無頁面級水平捲動;Desktop/Tablet/Mobile preview 8/6/4 筆是否可實作。
  3. 五個狀態摘要是否清楚表達為純資訊、不可點擊、不可聚焦。
  4. Preview card、「查看全部」Drawer、搜尋、篩選、固定每頁 20 筆與 page-session state 是否清楚。
  5. Loading/Empty/Partial/Error/Stale/WebSocket 中斷等狀態是否都有可實作的呈現。
  6. Keyboard、focus、drawer dialog、狀態不只靠顏色等 accessibility 要求是否合理。
  7. Mock 與 v0.3 Markdown/PDF 是否有任何文字、互動或 responsive 規則不一致。

回覆方式:

  • 可直接實作:留言確認「FE Review 通過」並註明是否有非阻擋建議。
  • 需要調整:逐項列出畫面位置、問題、建議及是否阻擋開發;產品語意或 scope 變更仍須回到 #1422 逐項確認。
  • 本階段不要求 coding、估時或完成狀態。

是由 陳國瑋 於 24 天 前更新

  • 被分派者 設定為 鍾正剛

是由 陳國瑋 於 24 天 前更新

【FE Review 指派完成】

依 Ken 確認,Redmine 全域「討論」Tracker(ID 12)已啟用標準欄位 Assignee(assigned_to_id);既有 Category、Parent task、Description、Priority 欄位均保留。

#1423 已正式指派給 Ryan(鍾正剛/ryanchung/User ID 5)。v0.3 FE Review 範圍與附件 #1115~#1117 已記錄於前一則 Review checklist。

本次只調整 Tracker 可指派能力與本票 assignee;Tracker、狀態與進度仍為 討論/New/0%,不代表開始開發。

是由 陳國瑋 於 17 天 前更新

是由 陳國瑋 於 15 天 前更新

是由 陳國瑋 於 15 天 前更新

UI-DEC-021 已確認:Full List 使用「摘要分類」

  • Drawer 已明確定義為由目前畫面右側滑出的暫時面板;單支 detail Drawer 與 Full List Drawer 的入口、用途及資料流程已分開說明。
  • Full List selector 名稱為「摘要分類」;固定選項:全部、需留意、充電進行中、準備/排隊、可用、其他狀態。
  • Request 使用可選 displayBucket;首頁五項摘要仍不可點擊,也不預先套用條件。
  • V1 不把 Connector runtime status 與 Queue status 混成另一組篩選選項;原始事實仍在每列分層顯示。
  • Description 已補 search request/response 最小欄位、FE/Backend 工作及驗收條件。

本輪只更新需求;Tracker/Status/Done ratio/Ryan 指派與附件均不變。E2E impact:No catalog change。

是由 陳國瑋 於 15 天 前更新

是由 陳國瑋 於 15 天 前更新

FE Review 請求|v0.4 Draft

Ryan/鍾正剛您好,請以以下同版號文件進行 FE 可行性與畫面 review:

請優先確認

  1. Responsive: 390/768/1024/1440 px;Connector 預覽分別最多 4/6/6/8 張;Full List 在 ≤1239 px 為全螢幕 Sheet,≥1240 px 為右側 Drawer。
  2. 數量彈性: 0/1/2/8/9/30/100 個 Connector 不補空卡、不無限拉長;任何非空案場都可「查看全部」。
  3. 資訊語意: 首頁五項摘要固定顯示、純資訊且不可點;CP OCPP、Connector runtime、Queue 分層顯示,不合成一個狀態。
  4. 兩種 Drawer: 點預覽卡開單支詳情;點「查看全部」開 Full List。請確認關閉、Escape、focus trap、返回焦點與窄螢幕堆疊方式可實作。
  5. Full List: 「摘要分類」六個 UI 選項、Charge Group、keyword、固定每頁 20 筆與前後頁;沒有使用者排序或 page-size selector。
  6. 其他區塊: 30 日用量的 X 軸日期/Y 軸單位清楚;結算標題含年份,Footer 有兩個既有管理入口,四列仍不可點。

請把不清楚、無法實作、元件規格不足或建議調整之處直接回覆在 #1423;先做 review,不代表已開始開發。此票仍維持 New/0%,原指派不變。

動作

匯出至 Atom PDF