Skip to content

Server Actions Reference

Server Actions("use server")在伺服器端執行,由 React 元件直接呼叫——它們就是瑞成 PMS 的真正 API。 本頁是完整清單:46 個 action,依 OpenAPI 的 10 大領域分組(案件 / 業主 / 使用者 / 待辦 / 行事曆 / 分類 / 通知 / 帳戶 / 登入 / 管理)。

此清單對齊 next-app/lib/openapi/actions-manifest.ts(唯一真實來源;coverage.test.ts 斷言每個 匯出的 action 都列於此,新 action 不會悄悄漏掉文件)。OpenAPI 文件共 47 paths = 1 個 GET /api/health

  • 46 個 documentary RPC actions

跨來源注意: Server Actions 無法跨來源呼叫。請在部署後的 app 同來源環境中操作,或用 /api-docs 瀏覽。

Response envelope — ActionResult / FormState

所有 action 回傳統一的 envelope(對應 lib/validations/types.ts,OpenAPI 中註冊為 ActionResult):

ts
type ActionResult =
  | { ok: true }                            // mutation 成功
  | { success: true }                       // form-action 模式成功
  | { error: string }                       // 人類可讀錯誤
  | { fieldErrors: Record<string, string[]> } // 依欄位驗證錯誤

所有 mutation(寫入)動作都會經 rcLog 寫入稽核日誌(toast 回饋「已寫入稽核日誌」),不可篡改、保存 10 年。

權限守衛速覽

伺服器端守衛在 lib/permissions.ts,依 lib/rc-permissions.tsRC_PERM_MATRIX(10 旗標) 判斷, 並 re-read 目前 DB 中的 live rolegetLiveRole())——降權立即生效,UI 隱藏不算安全控制。

守衛通過角色
requireAuth任何已登入使用者
requireOperatorOrAdmin() / guard(flag)依旗標(多為 Admin + Operator)
requireAdmin()僅 Admin

核心界線:進度數字(overridePct / editNodes)為 Admin(技師)專屬——行政(Operator)可代操作文書類動作,但不能決定進度 %。


案件(actions/cases.ts

Action說明權限守衛Mutation
createCase建立工程案件(4 步精靈輸入)guard('createCase') — Admin + Operator
editCase編輯案件名稱、期限、狀態、指派guard('createCase') — Admin + Operator
voidCase軟刪除(作廢),必填原因,永不真刪guard('deleteData') — Admin + Operator
restoreCase將作廢案件復原為「進行中」guard('deleteData') — Admin + Operator
completeNode標記節點完成並推進 current-node 指標requireAuth + 被指派技師 或 can('editNodes') — Admin
updateProgress自填式進度 % 更新(必填備註)requireAuth + isAssigned 或 can('overridePct') — Admin
markPrereq標記前置資料已到requireAuth + can('editPrereq') 或 isAssigned
addPrereq新增前置資料項(NAS 連結)requireAuth + can('editPrereq') 或 isAssigned
editPrereq編輯前置資料項requireAuth + can('editPrereq') 或 isAssigned
deletePrereq刪除前置資料項requireAuth + can('deleteData') — Admin + Operator
addSubcase為 B2 母案新增追加案(子案)guard('addSubcase') — Admin + Operator
editSubcase編輯追加案guard('addSubcase') — Admin + Operator
subStatusChange從列表列快速切換追加案狀態guard('addSubcase') — Admin + Operator
deleteSubcase刪除追加案guard('deleteData') — Admin + Operator
addNode為彈性混合式案件新增節點requireAuth + can('editNodes') — Admin

業主(actions/clients.ts)— CRM

Action說明權限守衛Mutation
createClient建立業主(客戶)紀錄guard('createCase') — Admin + Operator
updateClient更新業主基本資料guard('createCase') — Admin + Operator
deleteClient刪除業主(有案件綁定則阻擋)guard('deleteData') — Admin + Operator
updateContact編輯業主聯絡窗口guard('createCase') — Admin + Operator
toggleContactResign聯絡窗口離職/復職切換guard('createCase') — Admin + Operator
deleteContact刪除業主聯絡窗口guard('deleteData') — Admin + Operator

一般人員(staff)對 CRM 唯讀

使用者(actions/user.ts)— 自身帳號

Action說明權限守衛Mutation
updateProfile更新自己的顯示名稱 / avatarrequireAuth(限本人)
changePassword變更自己的密碼requireAuth(限本人)

待辦(actions/todos.ts)— 我的待辦

Action說明權限守衛Mutation
completeTodoNode依名稱完成待辦節點(解析 name→id 後委派 completeNoderequireAuth + 被指派技師 或 can('editNodes')
markTodoPrereq依名稱標記待辦前置已到(委派 markPrereqrequireAuth + can('editPrereq') 或 isAssigned

行事曆(actions/calendars.ts)— 業主工作日曆

Action說明權限守衛Mutation
createCalendar建立自訂工作日曆guard('createCase') — Admin + Operator
updateCalendar編輯工作日曆(含預設)guard('createCase') — Admin + Operator
deleteCalendar刪除自訂工作日曆(預設與使用中阻擋)guard('deleteData') — Admin + Operator

分類(actions/categories.ts)— 分類與節點樣板

Action說明權限守衛Mutation
editNodeTemplate編輯節點樣板(內建或 B3 子樣板)guard('manageTemplates') — Admin only
createCustomType建立自訂案件分類(Sn 碼自動指派)guard('manageTemplates') — Admin only
updateCustomType編輯自訂分類(code 不可改)guard('manageTemplates') — Admin only
deleteCustomType刪除自訂分類(內建與使用中阻擋)guard('manageTemplates') — Admin only
listTemplateItems列出某樣板的所有節點項(唯讀查詢 helper)none(server component helper)

通知(actions/notifications.ts · actions/notifications-scan.ts

Action說明權限守衛Mutation
markRead標記單一通知已讀(限本人)requireAuth(限自己的通知)
markAllRead標記目前使用者所有未讀為已讀requireAuth
runNotificationScanCore燈號掃描核心邏輯(去重 upsert,可帶 today override 供測試/排程)none(內部——由 runNotificationScan 與 cron 呼叫,此層無 auth 守衛)
runNotificationScanAdmin 手動觸發燈號掃描;re-read live role、寫稽核、revalidate dashboardrequireAdmin() — Admin only

通知為系統內鈴鐺,不寄 Email / LINE。每日 02:00 自動掃描,詳見 架構:燈號預警引擎

帳戶(actions/accounts.ts)— 工牌帳號管理

Action說明權限守衛Mutation
createUser建立工牌登入帳號(工牌自動指派,上限 30 人)guard('manageUsers') — Admin + Operator
updateUser編輯帳號姓名 / 職稱 / 角色guard('manageUsers') — Admin + Operator
disableUser軟停用(離職)帳號;不可停用自己;永不真刪guard('manageUsers') — Admin + Operator
enableUser重新啟用先前停用的帳號guard('manageUsers') — Admin + Operator

登入(actions/auth.ts)— 認證

Action說明權限守衛Mutation
loginAction以工牌編號 + 密碼登入public(未認證)
handleSignOut登出目前使用者requireAuth(任何已登入使用者)
requestPasswordReset以 email 要求重設密碼連結(一律回成功以防列舉)public(未認證)
resetPassword以重設信中的 token 完成重設密碼public(token-gated)

管理(actions/admin.ts)— 僅 Admin

Action說明權限守衛Mutation
exportAuditLog將不可篡改的稽核日誌匯出為 CSV(保存 10 年)requireAdmin() — Admin only

計數核對

領域Actions
案件15
業主6
使用者2
待辦2
行事曆3
分類5
通知4
帳戶4
登入4
管理1
合計46

Released under the MIT License.