Community研究與資料分析github.com

校園服務台代理技能

維護、建置和擴展校園服務台 React 入口網站的綜合指南與開發標準。涵蓋元件架構、響應式 UI、問題驗證、工單生命週期狀態、分析儀表板和驗證工作流程。

校園服務台代理技能 是什麼?

此技能作為校園服務台 React 應用程式的完整開發標準與最佳實踐指南。它定義了嚴格的元件架構(遵循單一職責原則)、響應式且無障礙的使用者介面規範,以及詳細的客戶端表單驗證規則,以確保資料完整性。工單遵循嚴格的「待處理 → 處理中 → 已解決」生命週期,每個狀態都有對應的顏色主題和稽核軌跡。管理儀表板會即時從單一資料來源計算 KPI 指標(如總工單數、解決率、緊急佇列長度),並使用 `useMemo` 進行效能最佳化。最後,技能強調誠實的錯誤回報與完整的驗證流程,包括 linting 和生產環境建置。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fatimaashar666-web/MCPpractice/tree/HEAD/.github/skills/campus-helpdesk

Installed? Explore more 研究與資料分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

校園服務台代理技能 是做什麼的?

此技能定義了開發、增強和維護 校園服務台 網頁應用程式的技術標準、工作流程和最佳實踐。每當您新增功能、重構元件、更新狀態工作流程或修改此專案的資料模型時,請使用本指南。


1. 撰寫乾淨、可重複使用的 React 元件

維護模組化、低耦合的元件架構:

  • 單一職責原則:每個元件必須做好一件事。
    • 表單邏輯和輸入項歸屬於 IssueForm.jsx。
    • 公開搜尋、篩選和工單卡片顯示歸屬於 TicketList.jsx。
    • 分析指標、視覺進度條和管理表格歸屬於 AdminDashboard.jsx。
    • 模態檢查和歷史時間軸歸屬於 TicketModal.jsx。
    • 通知歸屬於 Toast.jsx。
  • Props 與 State 設計:
    • 盡可能將狀態保持在區域範圍內。僅當狀態需要在不同視圖間共用時(例如全域的 tickets、activeTab、toasts),才將其提升至 App.jsx。
    • 盡可能使用純展示型子元件,並透過 props 清晰地傳遞回呼函式(onSelectTicket、onUpdateStatus、onDeleteTicket)。
    • 避免重複的狀態;使用 useMemo 計算衍生值(例如篩選後的工單、KPI 統計)。
  • 命名慣例與乾淨程式碼:
    • 元件檔案使用 PascalCase(AdminDashboard.jsx、IssueForm.jsx)。
    • 工具和常數檔案使用 camelCase(storage.js、constants.js)。
    • 事件處理函式應遵循 handle[Action] 模式(例如 handleSubmit、handleStatusChange)。
    • 保留註解和文件字串。使用清晰具描述性的變數名稱撰寫不言自明的程式碼。
  • 零重量級外部依賴:
    • 維持輕量化架構:使用原生 React 鉤子、純內嵌 SVG 作為圖示,以及範圍限定 CSS 類別,避免引入龐大的第三方元件庫。

2. 建立響應式且無障礙的使用者介面

校園服務台入口網站必須在所有裝置(手機、平板、筆電、大螢幕)上提供流暢的使用者體驗:

  • 流暢版面與中斷點:
    • 採用行動優先或桌面優先設計,搭配一致的中斷點:
      • 桌面:最大容器寬度 1240px,使用多欄網格(5 個指標卡片、2 欄分析圖表、2 欄表單)。
      • 平板(<= 1024px):將 5 欄指標網格折疊為 3 或 2 欄;將分析圖表堆疊成單欄。
      • 手機(<= 768px):將頁首導覽、表單輸入項堆疊為 1 欄;啟用資料表格的水平捲動。
      • 小螢幕(<= 480px):全寬指標卡片、堆疊的操作按鈕,以及固定在底部的 Toast 通知。
  • 無障礙性(a11y):
    • 所有互動元素必須使用適當的語意化 HTML(<button>、<input>、<select>、<textarea>)。
    • 表單控制項必須有對應的 <label htmlFor="..."> 元素,並搭配相符的 id 屬性。
    • 模態對話框必須具有 role="dialog"、aria-modal="true",並支援透過背景點擊和 Escape 鍵關閉。
    • 互動式圖示或僅圖示按鈕必須包含具描述性的 aria-label 或 title 屬性。
    • 維持狀態徽章和優先級標籤上文字的可及性色彩對比度。
  • 視覺回饋與轉場效果:
    • 互動元素必須清楚顯示 :hover、:focus 和 :active 狀態。
    • 聚焦的表單欄位必須顯示高對比的焦點環(var(--primary-ring))。
    • 使用微動畫(Toast 滑入、模態框縮放、按鈕旋轉器)來通知使用者背景動作,而不造成版面位移。

3. 驗證學生問題表單

所有透過 IssueForm.jsx 提交的問題,在進行狀態變更或儲存之前,必須遵循嚴格的客戶端驗證規則:

驗證規則矩陣

欄位規則錯誤訊息
姓名必填,去除前後空白後不可為空"請提供您的姓名。"
校園電子郵件必填,符合正則表達式 /^[^\s@]+@[^\s@]+\.[^\s@]+$/"請輸入有效的電子郵件地址。"
地點/房間必填,去除前後空白後不可為空"請指定建築物、大廳或校園位置。"
類別必填,必須與 CATEGORIES 清單相符預設自動選取
優先級必填,必須與 PRIORITIES(低、中、高、緊急)相符預設值為 '中'
問題主旨/標題必填,去除前後空白後,長度 $
ge 5$ 個字元"標題長度至少需要 5 個字元。"
詳細描述必填,去除前後空白後,長度 $
ge 15$ 個字元"描述的長度至少需要 15 個字元。"

驗證實作步驟

  1. 維護一個 errors 狀態物件,將欄位名稱對應到錯誤字串。
  2. 當使用者修改某個欄位的輸入時(handleChange),清除該欄位的特定錯誤。
  3. 在 handleSubmit 時檢查所有規則。如果存在錯誤,則阻止提交,並使用 .input-error 和 .field-error 高亮顯示無效欄位。
  4. 成功時:
    • 產生唯一 ID(例如 TCK-XXXX)。
    • 指派初始狀態為 待處理。
    • 記錄初始提交時間戳記和歷史節點。
    • 重設表單欄位和錯誤狀態。
    • 觸發成功 Toast 通知,並導航至工單追蹤器視圖。

4. 管理待處理、處理中和已解決狀態

校園服務台遵循嚴格的 3 階段生命週期:

[ 待處理 ]  ───►  [ 處理中 ]  ───►  [ 已解決 ]
    ▲                      ▲                     │
    └──────────────────────┴─────────────────────┘ (必要時可重新開啟)

狀態定義與視覺設計系統

  1. 待處理:
    • 意義:由學生/員工提交的新問題,等待分類或指派。
    • 色彩主題:琥珀色(#d97706),背景 #fef3c7,邊框 #fde68a。
    • 進度階段:步驟 1 啟用。
  2. 處理中:
    • 意義:技術人員或校園部門已認領該工單,並正在積極調查或修復。
    • 色彩主題:皇家藍(#2563eb),背景 #dbeafe,邊框 #bfdbfe。
    • 進度階段:步驟 1 和 2 啟用。
  3. 已解決:
    • 意義:修復完成、設備更換或服務恢復。
    • 色彩主題:翡翠綠(#059669),背景 #d1fae5,邊框 #a7f3d0。
    • 進度階段:步驟 1、2 和 3 啟用。

生命週期規則與稽核歷史

  • 每次狀態轉換都必須將一個事件附加到工單的 history 陣列:
    {
      status: newStatus,
      timestamp: new Date().toISOString(),
      note: `狀態已更新為 ${newStatus}`
    }
    
  • 更新內部工作人員備註必須更新 adminNote 和 updatedAt,而不重設工單原始的 createdAt。
  • 更新必須立即同步至 localStorage(campus_helpdesk_tickets_v1)。

5. 維持儀表板統計資料的準確性

管理儀表板提供即時的營運可視性。所有 KPI 指標和圖表計算都必須從單一事實來源 tickets 陣列動態衍生:

指標計算

  1. 總工單數: $$\text{總數} = \text{tickets.length}$$
  2. 待處理數量: $$\text{待處理} = \text{tickets.filter}(t \Rightarrow t.\text{status} === \text{STATUSES.PENDING}).\text{length}$$
  3. 處理中數量: $$\text{處理中} = \text{tickets.filter}(t \Rightarrow t.\text{status} === \text{STATUSES.IN_PROGRESS}).\text{length}$$
  4. 已解決數量: $$\text{已解決} = \text{tickets.filter}(t \Rightarrow t.\text{status} === \text{STATUSES.RESOLVED}).\text{length}$$
  5. 解決率 (%): $$\text{解決率} = \begin{cases} \text{Math.round}\left(\frac{\text{已解決}}{\text{總數}} \times 100\right), & \text{if 總數} > 0 \ 0, & \text{otherwise} \end{cases}$$
  6. 高與緊急優先級佇列: $$\text{緊急/高} = \text{tickets.filter}(t \Rightarrow t.\text{priority} === 'Urgent' \lor t.\text{priority} === 'High').\text{length}$$
  7. 類別與優先級分佈:
    • 即使計數為 0,也要計算所有預定義類別和優先級的計數,以防止 UI 閃爍或除以零。
    • 確保進度條寬度百分比總和 $\le 100%$。

將所有統計計算包裝在 React 的 useMemo 鉤子中,並以 [tickets] 作為依賴項,以維持效能。


6. 測試變更和執行建置

在提交任何程式碼變更或將任務標記為完成之前,請透過靜態分析和生產環境建置步驟驗證應用程式:

驗證協議

  1. 導航至專案目錄:

    cd "campus-helpdesk"
    
  2. 執行靜態程式碼檢查:

    npm run lint
    
    • 必須以退出碼 0 結束。
    • 確保沒有未使用的導入、變數或未跳脫的 JSX 實體。
  3. 執行生產環境建置:

    npm run build
    
    • 驗證 Vite 是否順利完成生產環境資產捆綁,沒有任何錯誤或警告。
    • 驗證 dist/index.html、dist/assets/*.css 和 dist/assets/*.js 是否成功建立。
  4. 驗證 LocalStorage 持久性:

    • 測試提交工單是否更新 localStorage.getItem('campus_helpdesk_tickets_v1')。
    • 測試更新工單狀態在頁面重新整理後是否仍然保留。
    • 測試「重設範例資料」和「全部清除」功能。

7. 誠實回報錯誤

在回報系統狀態或錯誤時,正直和誠實至關重要:

  • 不要掩蓋失敗:如果發生建置錯誤、語法錯誤或 lint 失敗,請報告確切的錯誤訊息、檔案名稱和行號。
  • 根本原因解釋:解釋錯誤發生的原因(例如缺少導入、儲存解析器中未處理的 null 情況、損壞的 prop 合約)。
  • 僅報告已驗證的修復:在未重新執行驗證命令(npm run lint / npm run build)並確認退出碼為 0 之前,不要聲稱問題已解決。
  • 對使用者透明:如果發生意外的瀏覽器限制或 localStorage 配額問題,請主動向使用者解釋該限制,並提供明確的技術選項。

相關技能