# 長照送餐系統 · 操作說明書
版本 2.0 · 2026-05-27 適用對象:社工、廚房、騎手主管、後台管理員
本系統由兩個介面組成:
- 管理後台 (Admin) — 桌機網頁,給社工/廚房/主管使用
- 騎手 PWA — 手機網頁 App,給送餐騎手使用
兩端透過同一個資料庫即時同步,騎手送達 → 後台秒看到。
# 系統網址與帳號
| 角色 | 網址 | 帳號 | 密碼 |
|---|---|---|---|
| 管理員 | https://elder-delivery-admin.pages.dev | admin@eldercare.local |
Admin1234 |
| 騎手 | https://elder-delivery-rider.pages.dev | rider1@eldercare.local |
Rider1234 |
| 說明書 | https://elder-delivery-manual.pages.dev | — | — |
騎手端用手機 Chrome / Safari 開啟,按「加入主畫面」就會變成 App 圖示,下次點圖示直接進入,跟原生 App 一模一樣。
# 📑 目錄
Part A · 管理後台
A1 登入 ・ A2 儀表板 ・ A3 長者管理 ・ A4 長者個人歷史 ・ A5 Excel 匯入長者 ・ A6 批次設定座標 ・ A7 線批次重排序 ・ A8 線(路線分區) ・ A9 取餐點 ・ A10 餐型管理 ・ A11 班別 ・ A12 假日表 ・ A13 薪資加成規則 ・ A14 品項管理 ・ A15 騎手管理 ・ A16 管理員管理 ・ A17 建立派送清單(單線) ・ A18 批次建立(多日多線) ・ A19 派送列表 ・ A20 路線詳細 ・ A21 餐點彙總 ・ A22 即時追蹤 ・ A23 未送達回訪 ・ A24 收入報表 ・ A25 月結帳單 ・ A26 騎手回報處理 ・ A27 稽核日誌
Part B · 騎手 PWA
B1 登入 ・ B2 今日任務 ・ B3 路線詳細(送餐)・ B4 班表設定 ・ B5 我的回報 ・ B6 個人資料 + 通知偏好
Part C · 常見流程與疑難排解
# Part A · 管理後台
# A1. 登入
用途:所有後台功能的入口。每位社工、廚房同仁、主管都有自己的帳號,登入後才能看見對應頁面(一般管理員看不到「管理員管理」頁,但其他功能相同)。
進入方式:直接打開後台網址,未登入會自動跳到登入頁。
核心功能:
- Email + 密碼登入
- 登入狀態會保留,下次打開瀏覽器直接進儀表板
- 在另一台電腦/手機登入後,原本的不會被踢
操作:輸入 Email + 密碼 → 按「登入」
注意事項:
- 密碼忘記請找 super_admin 在「管理員管理」幫忙重設
- 公用電腦記得登出,避免別人誤動
# A2. 儀表板
用途:一打開後台第一眼看見的「今天狀況一覽」。讓主管不用點進每個頁面,就能在 30 秒內掌握:今天有沒有問題、進度到哪、明天有沒有準備好。
進入方式:左側選單 → 儀表板(登入後預設頁)
核心功能:
- 🚨 異常告警:自動檢查 3 件事 — 還沒設座標的長者、今日已失敗的站、明日是否還沒建路線(晚於 18:00 才警告),任何一條紅了會大字提示
- 📊 今日送餐進度:大數字 + 綠紅進度條,騎手送達會即時更新
- 📈 4 張 stat 卡片:今日路線數 / 騎手在線數 / 啟用中長者 / 近 7 日未送達數 — 點擊跳到對應頁
- 📉 近 7 日趨勢折線圖:送達 / 未送達 / 待送
- 🥧 今日餐型分布環形圖:各餐型今天送出幾份
- 🚀 快速操作:6 個常用功能直達鈕
典型使用情境:
- 主管早上開機第一件事 — 看告警有沒有紅、看騎手有沒有都上線
- 中午吃飯前 — 看進度條到哪,預估幾點能全部送完
- 下午 18:00 後 — 看「明日路線未建」警告,提醒去批次建立
注意事項:
- 整頁即時更新(Realtime),不用刷新
- 圖表是當日資料,跨日會自動切換
# A3. 長者管理
用途:長者(受餐戶)的主檔。所有人都從這裡新增/編輯被服務的長輩,包含地址、餐型、服務時段、特殊指示、家屬聯絡資料。這是整個系統最重要的一張表,每天派送的對象都從這裡來。
進入方式:左側選單 → 長者 → 長者名單
核心功能:
- 列表瀏覽(支援搜尋姓名/地址、按線篩選)
- 新增 / 編輯 / 刪除長者
- 查看單一長者送餐歷史(A4)
- 匯出 Excel 全名單(含解碼後的服務時段)
主要欄位/操作:
- 預設順序:在所屬線中的派送順序(騎手依此送)
- 線:長者屬於哪條地理區(觀音線、新屋線...)
- 姓名 / 電話:基本資料
- 餐型:可從預設選或自由填(例:「正常餐盒」「泥狀(SD)」「不吃水餃」),可填多種
- 顯示地址 vs 導航地址:顯示地址用於列表/單據;導航地址給騎手點導航(兩者可不同,例如門牌號 vs Google 搜得到的地點)
- 導航備註:「晉安宮後巷子第二間」這種額外指引
- 座標:Leaflet 地圖點選或拖曳標記
- 送達指示:「放門口籃子」「敲門等開門」等
- 服務時段矩陣:8 天(一二三四五六日 + 假日)× N 個班別,勾選哪些班別要送
- 緊急聯絡人:電話 + 關係
- 家屬送達通知:開關 + 家屬 email/姓名/電話 — 開啟後騎手送達自動發 email 給家屬
典型使用情境:
- 新個案進入服務 → 新增長者 → 填基本資料 + 點地圖 + 設服務時段
- 個案改餐型(住院後改泥狀)→ 編輯該長者 → 改餐型 → 儲存
- 主管要做月報 → 匯出 Excel 全名單
注意事項:
- 刪除會連帶刪除歷史紀錄,請慎用 — 不送服務應改用「停用」(在編輯對話框內)
- 服務時段沒勾的日子,批次建立路線時自動不會排這位長者
- 假日欄會優先套用(國定假日不照平日表)
# A4. 長者個人歷史
用途:點長者列表的「歷史」按鈕進來,看單一長者過去的送餐紀錄。社工要回覆家屬「最近送得怎樣」、或評估個案是否要調整時,用這頁。
進入方式:A3 長者列表 → 任一筆 → 「歷史」按鈕
核心功能:
- 該長者所有送餐紀錄(依日期排序)
- 送達率統計(送達 / 未送達比例)
- 未送達原因分布(無人在家 × 5、地址錯誤 × 1...)
- 送達照片可點開放大
典型使用情境:
- 家屬打電話來問「上週三有送嗎?」→ 直接查
- 個案 review:發現某長者最近 3 次都「無人在家」→ 通知社工關心
注意事項:
- 紀錄保留所有歷史,包括已刪除的路線 (透過 stops 表)
- 照片由 Cloudflare R2 儲存,7 天後可能自動清理
# A5. Excel 匯入長者
用途:一次匯入大量長者(例如新接一個服務區、或從舊系統搬過來)。手動一個一個新增太慢,這頁支援 Excel/CSV 4 步驟 wizard。
進入方式:左側選單 → 長者 → 匯入長者
核心功能:
- 4 步驟 wizard:上傳 → 欄位對應 → 預覽 → 完成
- 自動偵測標題列(含「姓名/地址/餐型...」會自動 map)
- 預設線選擇(無線資料的列套用此線)
- 驗證錯誤即時提示,不會整批 fail
支援欄位: 姓名* / 電話 / 地址* / 導航地址 / 導航備註 / 餐型 / 送達指示 / 緯度 / 經度 / 必須拍照 / 飲食備註 / 服務日 / 服務班別
服務日寫法:「一二三四五」、「每天」、留空都可接受 服務班別寫法:「午晚」、「中餐/晚餐」、留空(= 午+晚)
典型使用情境:
- 新接觀音區,社工發來 50 人 Excel → 匯入 → 接著去「批次設定座標」逐個點地圖
注意事項:
- 沒帶座標的長者
coord_source會標為pending,要去 A6 補 - 必填欄位(姓名、地址)缺漏會在預覽步驟標紅
- 重複的長者(同名同電話)不會自動 dedupe,請先檢查
# A6. 批次設定座標
用途:Excel 匯入或手動建檔時很多長者沒帶經緯度,這頁專門用來「批次補座標」。一筆一筆點,比回到長者編輯頁快很多。
進入方式:左側選單 → 長者 → 批次設定座標
核心功能:
- 左側:待設定清單(
coord_source='pending'的長者) - 右側:地圖 + 「🔍 自動查地址 (Nominatim/OSM)」按鈕
- 拖曳 marker 或點地圖手動微調
- 「儲存並下一個」流暢處理 N 位
典型使用情境:
- 剛匯入 50 人,30 人沒座標 → 進此頁 → 一個一個自動查/手動點 → 半小時清空
注意事項:
- Nominatim 是免費公共服務,請勿短時間打太快(系統已加 throttle)
- 自動查不到時請手動點,騎手導航才會準
# A7. 線批次重排序
用途:當一條線的長者順序需要全部重排(例如新增了幾位,原本順序就亂了),這頁可一次拖曳全部重排 default_seq,比一個一個編輯有效率太多。
進入方式:左側選單 → 長者 → 線重排序
核心功能:
- 選線 → 左清單 + 右地圖
- 拖曳 ⋮⋮ 重排順序
- ✨ 自動最佳化(Held-Karp TSP + OSRM 真實道路距離):一鍵算出最短路線
- 「儲存順序」一次寫入
典型使用情境:
- 觀音線新增 5 位長者後順序混亂 → 來這頁 → 自動最佳化 → 看地圖確認 → 儲存
- 廚房改了出車路徑 → 手動拖曳調整 → 儲存
注意事項:
- 改的是「預設順序 default_seq」,影響每天派送的初始排序
- 每天仍可在「建立派送清單」(A17) 為當天微調
# A8. 線(路線分區)
用途:「線」= 地理區域,用來把長者分群,讓不同騎手負責不同區。每條線可指定預設取餐點和顏色,後續地圖/列表都會用這個顏色辨識。
進入方式:左側選單 → 設定 → 線
核心功能:
- 新增 / 編輯 / 刪除線
- 設定每條線的顏色(地圖 pin / 列表 tag 都會用)
- 指定該線的「預設取餐點」(之後建路線會自動帶入)
- 啟用 / 停用
主要欄位/操作:
- 排序:選單與下拉的顯示順序
- 顏色:彩虹選色器
- 名稱:觀音線、新屋線、埔心線...
- 預設取餐點:A17 建路線時會自動帶入
- 說明:給工作人員看的備註
典型使用情境:
- 開新服務區 → 新增「龍潭線」→ 選顏色 → 選預設取餐點 → 之後把長者分配到此線
注意事項:
- 刪除前會檢查該線下還有幾位長者,避免誤刪
- 顏色建議用對比明顯的(紅/藍/綠/紫),地圖上才好分辨
# A9. 取餐點
用途:路線的「起點」— 廚房、中央倉庫等騎手領取餐盒的地方。每條線可有不同的取餐點(例如觀音線從愛心廚房、新屋線從新屋廚房)。
進入方式:左側選單 → 設定 → 取餐點
核心功能:
- 新增 / 編輯 / 刪除取餐點
- 顯示「被使用」狀態(幾條線把這當預設)
- 啟用 / 停用
主要欄位/操作:
- 名稱:愛心廚房 / 新屋廚房 ...
- 地址 + 座標:Leaflet 地圖點選
- 備註
典型使用情境:
- 新增第二個廚房 → 新增取餐點 → 點座標 → 之後到「線」設定為某條線的預設
注意事項:
- 刪除前會警告影響範圍:「3 條線使用此取餐點,刪除後需重設」
- 騎手 App 路線詳細地圖會把取餐點顯示為 🏠 起點
# A10. 餐型管理
用途:定義系統可選的餐型清單。用在三個地方 — 廚房知道準備什麼、騎手知道送什麼、長者欄位的 autocomplete 建議。長者欄可自由填寫,這裡只是「常用建議」。
進入方式:左側選單 → 設定 → 餐型
核心功能:
- 新增 / 編輯 / 停用餐型
- 自訂徽章顏色 + 符號 + 標籤(在列表、騎手 App 都會用此徽章)
主要欄位/操作:
- 代號 (key):英文,例
normal、puree - 標籤:中文顯示名稱
- 徽章符號:emoji 或短字(SD、Si)
- 顏色:color picker
- 排序、啟用
典型使用情境:
- 新增「軟質飯」餐型 → 設徽章「軟」+ 棕色 → 之後在長者編輯選此餐型
注意事項:
- 系統預設 8 種:正常餐盒 / 特殊餐盒 / 🈲海鮮 / 二分之一 / 泥狀(SD) / 稀飯(Si) / 不要炸物 / 不吃水餃
- 長者餐型欄位允許自由填寫,不在預設清單中也可以
- 改顏色/符號會影響所有歷史紀錄的顯示
# A11. 班別
用途:定義一天有哪幾個送餐時段。系統內建 3 班(早 / 中 / 晚),不能新增/刪除,但可改名稱、時間、薪資、是否啟用。
進入方式:左側選單 → 設定 → 班別
核心功能:
- 修改每班的中文名稱、開始/結束時間、基本薪資
- 啟用 / 停用(停用後該班不出現在派送選項)
- 每筆有獨立「儲存」按鈕
典型使用情境:
- 機構不送早餐 → 停用早班,平常派送只會看到午/晚
- 騎手薪資從 $400 調到 $450 → 改薪資 → 儲存(之後新建路線套用新價)
注意事項:
- 預設早餐停用、中晚啟用、薪資 $400
- 改薪資只影響新路線,已建立的路線單價已寫入該筆 route
# A12. 假日表
用途:告訴系統哪幾天是國定假日(套用長者的「假日」服務時段設定),以及哪些日期是「補班日」(雖然週末,但要視為平日服務)。
進入方式:左側選單 → 設定 → 假日表
核心功能:
- 年份切換器
- 新增 / 編輯 / 刪除假日
- 「補班日」勾選 → 視為平日
典型使用情境:
- 政府公告 2027 行事曆 → 來這頁新增明年假日 → 批次建立時自動套用
- 某長者春節期間不送 → 在 A3 該長者的「假日」欄整列不勾 → 春節期間 A18 批次建立會自動跳過
注意事項:
- 2026 全年 ROC 國定假日 18 天 + 補班 3 天 已預載
- 補班日勾選後當天用「平日」schedule,沒勾就用「假日」schedule
# A13. 薪資加成規則
用途:定義除了「班別基本薪資」之外的額外加成(例如雨天加成、長線加成、假日加成)。每筆規則有 key + 金額,可由其他功能引用。
進入方式:左側選單 → 設定 → 薪資規則
核心功能:
- 新增 / 修改 / 刪除規則
- 每筆:key(英文) + 標籤 + 加成金額 + 啟用 + 備註
典型使用情境:
- 颱風天每班加 $100 → 新增 key=
typhoon、bonus=100 - 過年加班 → 新增 key=
new_year、bonus=200
注意事項:
- 目前規則是「規則庫」,是否套用到實際薪資需在月結帳單側手動加(未自動掛勾)
- 改規則不影響已結算月份
# A14. 品項管理
用途:定義廚房可選的「品項」(items) 清單 — 主菜、配菜、飲料的標籤庫。目前作為備用/未來擴充用,主要派送流程不強依賴。
進入方式:左側選單 → 設定 → 品項
核心功能:
- 新增 / 編輯 / 刪除品項
- 設定顏色 + icon + 排序 + 啟用
典型使用情境:
- 廚房要在週菜單列「滷雞腿、燙青菜、紅豆湯」→ 在此建品項
注意事項:
- 此頁是「資料字典」型管理頁,內容可以為空也不影響派送
- 預留給未來「逐日菜單」功能用
# A15. 騎手管理
用途:管理送餐騎手帳號 — 包括登入 Email 密碼、聯絡資料、車輛、評分、啟用狀態。社工新進騎手時用此頁開帳號。
進入方式:左側選單 → 設定 → 騎手
核心功能:
- 新增騎手(含建立登入帳號)
- 編輯資料 / 重設密碼 / 停用 / 刪除
- 查看評分與狀態
主要欄位/操作:
- 姓名 / 電話 / Email:Email 就是登入帳號
- 車輛:機車車牌 + 車型
- 緊急聯絡人
- 狀態:啟用 / 停用(停用後無法登入也不會被派送)
操作按鈕:
- 編輯資料:改姓名/電話/車輛/緊急聯絡(不含 auth)
- 重設密碼:設新密碼(即刻使舊 session 失效)
- 停用 / 啟用
- 刪除帳號:刪 auth 但保留歷史紀錄
典型使用情境:
- 新騎手入職 → 新增騎手(填 Email + 初始密碼)→ 告知騎手 → 騎手 App 登入
- 騎手離職 → 停用(保留歷史)
注意事項:
- 新增時同時建立 Supabase auth user + riders 表記錄,失敗會自動 rollback
- 「停用」比「刪除」安全:保留歷史紀錄,月結可正確計算
# A16. 管理員管理
用途:管理「能登入後台的人」帳號。僅 super_admin 看得到此頁,避免一般 admin 互相改密碼。
進入方式:左側選單 → 設定 → 管理員(僅 super_admin 可見)
核心功能:
- 新增 / 重設密碼 / 停用其他管理員
- 角色切換 (admin / super_admin)
主要欄位/操作:
- 名稱 / Email / 角色 / 狀態 / 建立時間
- 新增管理員對話框:顯示名稱、Email、初始密碼、角色 radio
典型使用情境:
- 新主管入職 → super_admin 來此新增 → 角色選 admin → 給初始密碼
- 某主管離職 → 停用
注意事項:
- 安全閘:不能對自己 disable / 刪除(避免鎖死)
- super_admin 可升降其他人角色,但至少要留一個 super_admin
# A17. 建立派送清單(單線)
用途:每天派送的核心入口。選好「日期 + 班別 + 線 + 騎手 + 取餐點」後,系統自動列出該日該服務的長者清單,並可手動微調順序、最佳化路徑、最後一鍵寫入 DB 變成正式派送。
進入方式:左側選單 → 派送 → 建立派送(單線)
核心功能:
- 選 日期 / 班別 / 線 / 騎手 / 取餐點
- 系統自動載入該線今天該服務的長者(依
service_schedule+ 假日表過濾) - 顯示餐型彙總(廚房參考)
- 站點順序清單(依 default_seq):可拖曳 / 可移除單站
- ✨ 自動最佳化:OSRM 抓真實道路距離 → Held-Karp TSP → 全域最佳順序
- ↻ 恢復預設順序:按 default_seq 重排
- 右側地圖即時預覽(彩色 pin 對應餐型 + OSRM polyline)
- 儲存派送清單 寫入 DB
典型使用情境:
- 觀音線 5/27 中餐手動建 → 全套設定 → 看餐型彙總(10 正常、3 泥狀、1 不吃水餃)→ 最佳化 → 儲存
- 臨時插單:A18 批次建好但某線少了一位 → 來此重建覆寫
注意事項:
- 線選好之後取餐點會自動帶入該線預設值
- 自動最佳化用公共 OSRM,偶爾會慢 1-2 秒
- 儲存後可從「派送列表」(A19) 找到並進一步操作
# A18. 批次建立(多日多線)
用途:A17 一次只建一條線,效率太低。批次建立可一次為「多日 × 多班別 × 多線」批量建路線,套用每位長者的 default_seq、餐型、送達指示。一般每天傍晚跑一次明天的批次。
進入方式:左側選單 → 派送 → 批次建立
核心功能:
- 日期範圍 / 班別(複選)/ 線(複選)
- 乾跑模式:預覽不寫入(預設勾選)
- 覆寫已存在的路線:強制取代(dry-run 時 disable)
- 結果表:每組 (日期 × 班別 × 線) 顯示 站數 + 動作 (建立 / 取代 / 略過)
典型使用情境:
- 每天 18:00 — 跑明天的批次:日期=明天、班別=午+晚、線=全部、乾跑✓ → 預覽 → 取消乾跑 → 執行
- 跨週末做下週 7 天 × 2 班 × 2 線 = 28 條路線一次完成
注意事項:
- 一定要先「乾跑」確認結果再正式跑
- 「覆寫」會把已建好的路線砍掉重建(包含已分派的騎手 → 要重新轉派)
- 建好之後請進 A19 派送列表逐筆派騎手
# A19. 派送列表
用途:所有已建立路線的總覽。主管在此分派騎手、查看當天/任意日進度、轉派或進入路線詳細。
進入方式:左側選單 → 派送 → 派送列表
核心功能:
- 日期切換瀏覽任意日
- 欄位:班別 / 線(色彩 tag)/ 騎手 / 點數 (含已送達數) / 距離 / 預估時長 / 狀態
- 查看:跳到路線詳細
- 轉派:選新騎手一鍵 update rider_id
典型使用情境:
- 批次建好後逐筆派騎手 → 點「轉派」選人
- 某騎手臨時請假 → 把他今天的線「轉派」給代班騎手
注意事項:
- 狀態:pending(未開始)/ in_progress(送餐中)/ completed(完成)/ cancelled(取消)
- Realtime — 騎手送達會即時更新點數
# A20. 路線詳細
用途:單條路線的完整檢視。主管想知道「這條線送到第幾家」「送達照片長怎樣」「為什麼某站失敗」就點這頁。
進入方式:A19 派送列表 → 點任一筆「查看」
核心功能:
- 頁首:線 (彩色 tag) + 班別 + 日期 + 狀態 tag
- 基本資訊:騎手 / 取餐點 / 總距離 / 預估時長 / 開始/完成時間 / 薪資
- 送達進度進度條
- 站點表格:序號 / 長者 / 地址 / 距上一站 / 狀態 / 照片(可點放大)/ 備註 / 送達時間
典型使用情境:
- 家屬反應沒收到 → 查看路線詳細 → 找該長者那站 → 看狀態+照片
- 主管月底 review 數據 → 點開看時間軸
注意事項:
- Realtime 自動更新,不需手動刷新
- 照片由 R2 儲存,點縮圖會放大顯示
# A21. 餐點彙總
用途:給廚房使用的當日備餐清單。一打開就看到「今天總共要做幾份正常、幾份泥狀、幾份特殊」,以及每條線的餐型分布。
進入方式:左側選單 → 派送 → 餐點彙總
核心功能:
- 📊 當日總計:各餐型總份數(橘色背景突出)
- 每條路線一個區塊:線 + 班別 + 站數 + 各餐型分布
- 📷 標籤:拍照需求數
- 📝 標籤:有送達指示數
典型使用情境:
- 廚房一早第一件事 — 來這頁印出/列印當日彙總 → 開始備餐
- 騎手領餐 — 對比每條線的餐型數量
注意事項:
- 資料來自當日已建立的路線,所以要先建好路線
- 餐型沒對齊時請去 A10 餐型管理 + A3 長者編輯
# A22. 即時追蹤
用途:主管想看「我家騎手現在在哪」的地圖頁。所有上線騎手即時位置、進行中路線、最後上報時間,一目了然。
進入方式:左側選單 → 派送 → 即時追蹤
核心功能:
- 地圖:所有上線騎手即時位置(5 分鐘內有上報視為在線,否則灰色)
- 右側清單:進行中路線 + 全部騎手列表(含最後上報時間)
典型使用情境:
- 家屬打來「怎麼還沒到」→ 看騎手在地圖上的位置
- 騎手 GPS 失聯(紅色)→ 主管打電話確認
注意事項:
- Rider PWA 在路線 in_progress 時每 30 秒上報 GPS
- Realtime 訂閱 → marker 即時移動
- 騎手未開始送餐就不會上報(沒位置)
# A23. 未送達回訪
用途:把所有 status=failed 的站集中一頁,方便社工回訪關懷。社工通常每週固定一天看這頁,撥電話確認長者狀況、補送或標記已處理。
進入方式:左側選單 → 派送 → 未送達回訪
核心功能:
- 期間 + 失敗原因 filter(chips 點擊過濾)
- 📞 撥打:tel: link 直接撥
- ✓ 已回訪:一鍵標記為 delivered + 加備註
- 📥 匯出 CSV(含中文 BOM)
- 原因分布:上方橘色 chip 顯示「無人在家 × 3、地址錯誤 × 2 ...」
典型使用情境:
- 社工每週一回顧上週未送達 → 過濾「無人在家」→ 逐個撥電話
- 主管月底統計失敗原因 → 看 chip 分布 → 找改善方向
注意事項:
- 「已回訪」按下後該筆從列表消失(status 改為 delivered)
- 真的補送過餐才標已回訪;只是電話聯絡上請在備註寫清楚
# A24. 收入報表
用途:給主管做財務分析。某段期間總收入多少、哪個騎手送最多、哪條線跑最多趟、逐日趨勢,都在這頁。
進入方式:左側選單 → 收入 / 帳單 → 收入報表
核心功能:
- 篩選:日期範圍 / 騎手 / 線 / 含未完成
- 指標:總收入、完成班次、送達點數、送達率
- 分析:各騎手收入 / 各線執行統計 / 逐日收入長條圖
- 📥 匯出 Excel — 4 個 sheet:逐筆明細 / 各騎手 / 各線 / 逐日
典型使用情境:
- 月底結算 → 看本月總收入 + 各騎手分配
- 季度報告 → 匯出 Excel 給董事會
注意事項:
- 「含未完成」勾選會把進行中路線一起算(預估數字)
- 數字以 routes 表的 wage 欄為準(建立時寫入)
# A25. 月結帳單
用途:給每位騎手出一張可列印的薪資單。選騎手 + 選月份 → 自動列出當月完成班次 → 列印 / 另存 PDF → 給騎手簽收。
進入方式:左側選單 → 收入 / 帳單 → 月結帳單
核心功能:
- 選騎手 + 選月份
- 自動列出當月完成班次
- 完整可列印頁面:機構 logo + 騎手資料 + 薪資總覽 + 班別小計 + 逐筆明細 + 三方簽收區
- 🖨 列印 / 另存 PDF
典型使用情境:
- 每月 5 號發薪 → 為每位騎手選月份 → 列印 PDF → email 給騎手簽收
注意事項:
- PDF 由瀏覽器原生列印產生,中文字體完美(不依賴外部 TTF)
- 不要用截圖另存 — 解析度低
- 列印對話框務必選「儲存為 PDF」而不是真實列印
# A26. 騎手回報處理
用途:騎手在 App 送出問題回報(長者狀況/地址問題/App 問題)後,會出現在這頁。主管在此回覆、追蹤、結案。
進入方式:左側選單 → 派送 → 騎手回報
核心功能:
- 狀態 tabs(含計數):全部 / 待處理 / 處理中 / 已解決 / 已關閉
- 欄位:時間 / 騎手 / 類型 / 長者 / 內容 (含照片) / 優先度(下拉)/ 狀態
- 操作:回覆 / 修改回覆 / 標記解決 / 關閉
典型使用情境:
- 騎手送回「○○長輩家門口很多報紙、按門鈴沒回應」→ 主管看到 → 通知社工關懷 → 回覆騎手「已聯絡家屬,下次正常送」→ 標記解決
- 騎手回報「App 拍照後卡住」→ 找工程師 → 修好後回覆
注意事項:
- 騎手送出新回報後,系統 5 分鐘內 email 通知所有 admin(需設 RESEND_API_KEY)
- 回覆會 realtime 推送到騎手 App
# A27. 稽核日誌
用途:合規與除錯用。系統自動把 10 個關鍵表的所有 insert / update / delete 全部記錄下來,誰在什麼時候改了什麼,全部有跡可循。
進入方式:左側選單 → 設定 → 稽核日誌
核心功能:
- 篩選:日期範圍 / 資料表(含計數)/ 動作
- 欄位:時間 / 操作者 (email + 角色) / 動作 / 資料表 / 主鍵 / 變更欄位 chips / 詳細
- 詳細對話框:update 顯示「原值 → 新值」紅綠對照;insert/delete 顯示完整 JSON snapshot
典型使用情境:
- 某長者地址被改錯 → 查稽核日誌 → 看誰改的、改成什麼
- 主管 review:上週誰刪了什麼路線
注意事項:
- 已自動套用到:caregivers / riders / admins / lines / meal_types / shifts / pay_rules / holidays / pickup_points / routes
- 紀錄不會自動清理(資料量大時可考慮歸檔)
# Part B · 騎手 PWA
360px 寬手機介面,建議「加入主畫面」當 App 使用。
# B1. 登入
橘色「餐」logo + 送餐騎手標題 + Email/密碼 + 登入。登入後 session 持久,下次直接到今日任務。
# B2. 今日任務
用途:騎手打開 App 第一頁,看到今天有幾條路線、進度、距離。
- 每條路線一張卡片:線徽章 + 班別 + 站數 + 進度 + 距離
- 沒任務時顯示 ☕「今天沒有派送任務 — 好好休息,明天加油」
- 底部 4 tab:📋 今日 / 📅 班表 / 💬 回報 / 👤 我的
# B3. 路線詳細(送餐)
用途:實際送餐的操作頁,騎手 95% 時間都在這。
- 線徽章 + 班別 + 進度 + 開始送餐 按鈕
- 地圖(取餐點 🏠 + 編號 pin 對應餐型 + polyline)
- 下一站卡片:序號 + 姓名 + 餐型徽章 + 📷必拍 + 地址 + 🧭導航備註 + 📝送達指示 + 飲食備註
- 3 顆按鈕:📍 導航 / ✓ 送達 / 跳過
- 全部站點列表(送達綠 / 失敗紅 / 待送餐型色)
操作流程:
- 點 📍 導航 → 跳手機原生 Google/Apple Maps
- 送到 → ✓ 送達 → 拍照(必拍長者強制)+ 備註 → 確認
- 沒送到 → 跳過 → 選原因(無人在家/電話聯絡不上/地址錯誤/拒收/住院/其他)+ 備註
- 全部完成 → 主卡片變「完成」
GPS 上報:路線 in_progress 期間每 30 秒自動回傳。
# B4. 班表設定
週切換 + 每日 × 班別矩陣 → 勾選你可送餐的時段。後台 A18 批次建立會依此分派。
# B5. 我的回報
列出所有自己回報的問題 + 管理員回覆。狀態色帶(紅=待處理/橘=處理中/綠=已解決/灰=已關閉)。新回報對話框:類型 + 內容 → 送出 → admin email 通知。
# B6. 個人資料 + 通知偏好
- 基本資料:頭像 / 姓名 / 電話 / 評分
- 本月收入:金額大字 + 已完成班數 + 累計
- 通知偏好:瀏覽器推播 + 4 個開關(當日任務 / 新指派 / 路線變更 / 勿擾時段)
- 登出按鈕
# Part C · 常見流程
# 流程 1:每日例行(管理員)
06:00 — 系統自動推播當日任務給騎手
管理員上 dashboard 確認 0/N
06-10 — 騎手陸續送,dashboard realtime 更新
異常會出現「N 站未送達」紅色告警
10:30 — 全部完成 → 進「未送達回訪」處理失敗點
21:00 — 系統提醒明日未建路線 → 去「批次建立」
# 流程 2:新增長者
- 長者 → 長者名單 → + 新增
- 填基本資料、選線、餐型
- 地圖點座標
- 設服務時段矩陣(平日只送晚?週末午晚?)
- 設送達指示、家屬通知
- 儲存
# 流程 3:建立明日所有路線
- 派送 → 批次建立
- 日期範圍:明日~明日
- 班別:午+晚
- 線:全部
- 乾跑 ✓ → 預覽 → 確認 → 取消乾跑 → 執行
- 派送列表逐筆「轉派」
# 流程 4:騎手送餐
- 6:00 收推播 → 開 App → 點今日任務
- 開始送餐 → GPS 自動上報
- 對每站:導航 → 送達(拍照+備註)/ 跳過(選原因)
- 全部完成 → 完成
# 流程 5:月底發薪
- 收入/帳單 → 月結帳單
- 選騎手 + 月份
- 看實領金額 → 列印/另存 PDF
- PDF 寄騎手簽收
# 疑難排解
| 問題 | 解法 |
|---|---|
| 騎手 App 沒看到今日任務 | 確認後台已派路線且 rider_id 是該騎手;確認日期是「今日」 |
| 地圖跳不出 / 破圖 | hard reload (Cmd+Shift+R / Ctrl+F5) |
| Excel 匯入後座標都是 0 | 去「批次設定座標」用 Nominatim 自動查或手動點 |
| 騎手送達後 admin 沒立刻看到 | Realtime 應該秒更新;若延遲,刷新派送列表頁 |
| PDF 中文亂碼 | 用「列印 / 另存 PDF」(瀏覽器原生),不要用截圖另存 |
| Worker cron 沒跑 | wrangler tail --name elder-delivery 看 log |
| 家屬沒收 email | 需在 worker 設 RESEND_API_KEY secret,並到 Resend 驗證寄件網域 |
| 找不到「管理員」頁 | 該頁僅 super_admin 可見 |
| 騎手拍照後卡住 | 已修為客戶端壓縮 + timeout,遇到請看騎手 App 是否更新到最新 |
# 技術架構(給工程師)
Admin (Vue 3 + Element Plus) https://elder-delivery-admin.pages.dev
Rider PWA (Next.js 14) https://elder-delivery-rider.pages.dev
Workers (Cloudflare) https://elder-delivery.pinter-tw.workers.dev
· 5 個 cron (06:00 推播 / 21:00 提醒 / 04:00 清照片 / 03:00 ping / 每 5 分鐘 queue)
· /upload R2 photo upload
· /admin/* 帳號管理 API
DB / Auth / Realtime Supabase (Postgres + RLS)
照片儲存 Cloudflare R2 (10GB free, zero egress)
路線最佳化 Held-Karp TSP + OSRM (router.project-osrm.org)
推播 Web Push (VAPID) / Resend (email)
月成本:$0(Cloudflare free + Supabase free + R2 free + OSRM 公共服務)