--- # System prepended metadata title: 海大餐飲外送系統-需求文件(SRD) --- # 軟體需求文件(SRD) ## 專案資訊 - **專案名稱**:海大餐飲外送系統(Bing2Go) - **撰寫日期**:2025/10/08 - **發展者**:林津瑄、郭浩、劉俊麟、宋辰星、黃俊源 --- ## 版次變更記錄 | 版次 | 變更項目 | 變更日期 | |-----|----------|----------| | 0.1 | 初版 |2025/10/08| | 0.2 | 使用者故事地圖加上會員資料、歷史訂單 | 2025/11/05 | | 0.3 | iteration2 大更新 | 2025/11/12 | | 0.4 | 描述需求用字更加精準 | 2025/12/24 | | 0.5 | 更新操作概念 | 2025/12/24 | --- ## 目錄 1. [接受準則 (Acceptance Criteria)](#接受準則-Acceptance-Criteria-of-this-document) 2. [系統概述 (System Description)](#系統概述-System-Description) 3. [操作概念 (Operational Concepts)](#操作概念-Operational-Concepts) 4. [使用者故事地圖 (User Story Map)](#使用者故事地圖-User-Story-Map) 5. [使用者介面分析 (User Interface Analysis)](#使用者介面分析-User-Interface-Analysis) 6. [功能需求 (Functional Requirements)](#功能需求-Functional-Requirements) 7. [非功能需求 (Non-functional Requirements)](#非功能需求-Non-functional-Requirements) --- ## 接受準則 (Acceptance Criteria of this document) - Clearly and properly stated(需求需清楚且適當的陳述) - Complete(需求需完整) - Consistent with each other(需求之間需維持一致性) - Uniquely identified(每項需求有明確之識別) - Appropriate to implement(需求需可被實作) - Verifiable(需求需可被驗證) --- ## 系統概述 (System Description) - 目標 - 打造一個專屬於海大學生的餐飲外送平台,讓顧客能快速下單,外送員能便捷接單,系統能維護訂單流程完整,確保穩定無錯誤。 - 特色 - 多身分會員機制:同一帳號可切換「顧客」與「外送員」。 - 訂單流程透明:從下單、配對外送員到餐點送達皆可即時追蹤。 - 自動估算功能:依地址自動計算送達時間與外送費。 - 評價系統:提供餐廳評價與餐點評分,提升使用體驗。 - 即時通訊:顧客、外送員可直接溝通。 <!-- - 餐廳分析:提供銷售數據視覺化報表,協助商家經營。 --> - 實作方案 - 開發Responsive Web Design以支援手機/桌面使用 - 前後端合一:Nuxt - UI Framework:Vuetify - 資料庫:MongoDB Atlas - 部署平台:Vercel ```mermaid flowchart TD subgraph Frontend A["Nuxt"] --> B["Vue 3"] A --> C["Vuetify"] A --> D["Pinia"] A --> E["Pages mode (SPA ssr=false)"] C --> F["@mdi/font"] D --> G["@pinia/nuxt module"] end ``` ```mermaid flowchart TD subgraph "Backend(server/)" H["Nitro / Server API routes"] --> I["Mongoose"] H --> J["Auth: jsonwebtoken<br>bcryptjs"] H --> K["Swagger <br>(swagger-jsdoc <br> swagger-ui)"] H --> L["Custom utils + middleware"] end subgraph Database M["MongoDB"] <---> I end ``` ```mermaid flowchart TD subgraph Dev & Tooling N["TypeScript (tsconfig.json)"] O["npm scripts:<br> dev/build/preview"] P["devDependencies:<br> @types/*, tsx"] Q["Alias:<br> @server, @stores, @app"] end ``` ```mermaid flowchart TD Frontend <---> Backend Backend <---> Database Frontend <---> A["Dev & Tooling"] Backend <---> A ``` --- ## 操作概念 (Operational Concepts) ### 情境:0️⃣3️⃣1️⃣點餐 0️⃣3️⃣1️⃣是海大的一名學生,翹掉下午的課在家睡醒後覺得肚子有點餓,決定用最新推出的「海大餐飲外送系統」來訂個晚餐。 1. 註冊系統 0️⃣3️⃣1️⃣點開系統,因為不確定有沒有註冊過,所以直接來註冊個帳號試試,填好暱稱、Email、密碼、按下立即註冊。  :::danger 例外!!她發現自己已經註冊過了!!,系統提示「電子信箱已經註冊」 ::: 2. 登入系統 / 選擇身份 0️⃣3️⃣1️⃣發現自己已經有帳號後,回到登入頁面,輸入電子郵件和密碼,選擇顧客身份,按下登入。   :::danger 例外!!她發現自己記錯了密碼,登入失敗! 只好按下「忘記密碼?」按鈕,期待能得到幫助 :::  看來是沒辦法~ 2. 選擇顧客身份,進入首頁。 0️⃣3️⃣1️⃣被絕望的心情籠罩,就在這時,他的腦海中浮現一串數字,原來,其實密碼一直在她心中,只是被上帝遮住了簾,忘了掀開~  總之他順利登入,進入首頁。 3. 瀏覽餐廳清單與餐廳內容 0️⃣3️⃣1️⃣以顧客身份進入後,顯示了附近餐廳的清單。  她點進了「美胖漢堡」,看到了菜單。  她覺得「培根薯餅厚蛋吐司」看起來很好吃,點開,按下加號,選擇「馬上冰!」  4. 下單 0️⃣3️⃣1️⃣挑了「美胖漢堡」的「壽喜牛五花厚蛋吐司」和「隆香茶室」的「海鮮雙拼花枝、蝦仁香蘭飯」,和「添好茶」的「蜂蜜鮮奶茶」,把他們加進購物冰箱,按下購物冰箱按鈕,看到了訂單摘要。  按下「前往結帳」後,0️⃣3️⃣1️⃣看到了確認訂單頁面,他突然想起來晚上要去系館和組員開會,所以在外送詳細資訊修改了外送地址,然後按下「確認送出訂單」,看到訂單狀態。    5. 即時通訊: 0️⃣3️⃣1️⃣收到外送員訊息,外送員說明了自己壓到狗的狀態  0️⃣3️⃣1️⃣在系館收到了剛送來一堆食物,按下「我已收到餐點」。 打開餐盒一看,香氣撲鼻,他的隊友開始抱怨太香。 他打開系統,確認訂單狀態已更新為「完成」。 這讓0️⃣3️⃣1️⃣覺得整個點餐流程流暢、方便,從選餐、下單到送餐完成,都能即時追蹤。 7. 評論 0️⃣3️⃣1️⃣在享用完餐點後,十分滿意,決定來給餐廳來個評價  0️⃣3️⃣1️⃣覺得這個平台幫他省下了外出排隊買飯的時間,能隨時享受熱騰騰的美食。 ### 情境:史密提威威傑格曼傑森接單當外送員 在海大的另外一邊,史密提威威傑格曼傑森登入系統,選擇以外送員身份登入。 1. 接單 他在「顧客訂單列表」,選擇用發佈時間排序,看到了0️⃣3️⃣1️⃣的訂單,身為第一名的外送員,他立刻點進訂單,然後點選「立即接單」。   2. 配送 史密提威威傑格曼傑森按照外送任務的取餐/送餐指南,前往目標餐廳取餐,毅然決然地踏上餵飽0️⃣3️⃣1️⃣的道路。   3. 完成 把餐點送到0️⃣3️⃣1️⃣手上後,史密提威威傑格曼傑森在手機上點「已送達」,0️⃣3️⃣1️⃣也在自己的介面按下「我已收到餐點」,訂單狀態更新為「完成」。 忙碌的一天過後 史密提威威傑格曼傑森結束了一天的接單,他回到系統中的 「我的訂單」 頁面。 切換到「歷史訂單」,系統清楚列出了今天送過的餐點,包含訂單編號、顧客名稱、完成時間與報酬。  他登出,結束一天的外送工作。 走出校門的時候,他覺得這個系統讓外送工作清楚、有條理,接單方便直覺,還可以看到自己努力的成果。 ### 情境:阿爾托莉亞・潘德拉貢是系統管理員 阿爾托莉亞・潘德拉貢是一名系統管理員,她每天的工作就是維護整個「海大餐飲外送系統」的正常運作,確保餐廳、訂單、會員資料都準確並受到管控。 1. 登入與管理餐廳 阿爾托莉亞登入系統後,自動進入「管理餐廳」頁面。 她看到一份完整的餐廳列表,清楚顯示餐廳名稱與基本資訊。 如果要調整餐廳資料,只要點擊右邊的「編輯」,就能進入詳細資訊頁面。 她輸入「海大自助餐」在搜尋欄,很快就把目標餐廳找出來。 頂部右上角還有「登出」按鈕,隨時可以安全登出系統。  她按下「查看評論」,看看有沒有亂評價的小壞蛋。  2. 餐廳詳細資訊編輯 點進「海大自助餐」的詳細頁後,她開始修改餐廳資訊: 名稱、介紹、地址、電話,編輯完成後點「儲存餐廳資訊」 下方餐點清單裡,她把「rrrr」價格改成 $1231。 看到過期的菜色,直接點右邊的垃圾桶 icon 把它刪掉 另外點選「新增菜單項目」,新增了一個「素食便當 $90」。  3. 新增餐廳 下午,學校附近新開了一家「鐵板燒專賣店」,阿爾托莉亞需要把它新增到系統。 點擊「新增餐廳」→ 填寫餐廳名稱、介紹、地址與電話,在下方新增三個菜單項目:「牛肉鐵板燒 $150」、「豬肉鐵板燒 $130」、「蔬菜鐵板燒 $100」。 點「建立餐廳」後,系統將這家新餐廳自動加到前台清單,使用者當天就能看到。  4. 管理訂單 阿爾托莉亞回到頂部 navbar,點選「查看訂單」,進入訂單管理頁面: 她先切換到「未完成」,看到目前外送員正在處理的訂單。  為了查詢上週的數據,她點擊日曆 icon,篩選日期區間,快速找到所有 10/01 ~ 10/07 的訂單。點進一筆訂單,裡面清楚顯示:顧客暱稱、餐廳、外送地址、外送員、外送員電話、訂單內容與金額   5. 管理會員 最後,她要處理一位有爭議的使用者。 點擊「管理會員」→ 顯示所有會員清單,包含暱稱、email、身份 她輸入 studentA@ntou.edu.tw 在搜尋欄,找出這位使用者  點進會員詳細資訊頁,看到該會員的 ID、暱稱、email、外送地址與身份 由於該用戶多次違規,阿爾托莉亞按下「停用此帳號」,系統即時停用該帳號,保護平台秩序,守護世界和平,謝謝阿爾托莉亞。  完成了新增餐廳、修改菜單、檢查訂單與停用違規會員後,阿爾托莉亞點擊右上角的「登出」,結束了一天的管理工作。 她覺得這個後台系統的操作設計直覺、功能完整,讓她能有效維護整個外送平台的穩定性。 --- ## 使用者故事地圖 (User Story Map)  ### 未登入使用者 - **代號**:AU-01 Register - **故事**:作為使用者,我想要能夠註冊帳號,以便成為平台會員。 - **註記**: - 支援 Email 與密碼規則檢核(強度/長度/複雜度)。 - **測試方法**: - 必填欄位與格式驗證(Email/密碼強度)。 - 成功註冊後自動導向登入或會員首頁。 - 重複帳號顯示明確錯誤(避免洩漏存在性)。 - **代號**:AU-02 Login --- - **故事**:作為使用者,我想要能登入帳號,以便進入會員功能。 - **註記**: - 登入後會話安全(HttpOnly/SameSite/過期)與權限。 - **測試方法**: - 正確憑證可登入並導向會員首頁。 - 錯誤密碼提示泛化與爆力嘗試限制/等待。 - 登出後會話立即失效(所有端)。 --- ### 管理員 - **代號**:ADM-RES-01 List Restaurants & Items - **故事**:身為管理員,我希望能查看所有餐廳、餐點的清單與基本資訊,方便總覽平台狀態。 - **註記**: - 支援搜尋/排序。 - 顯示狀態(上架/下架)。 - **測試方法**: - 可依名稱/分類搜尋。 - 資料欄位完整且一致。 --- - **代號**:ADM-RES-02 CRUD Restaurants & Items - **故事**:身為管理員,我希望能新增、更新或移除餐廳、餐點資訊,以維護其狀態。 - **註記**: - 刪除需二次確認與關聯檢查(不可逆)。 - 支援上/下架。 - **測試方法**: - 新增/編輯/刪除後列表即時更新。 - 欄位驗證與權限控管正確(RBAC)。 --- - **代號**:ADM-ORD-03 View All Orders - **故事**:身為管理員,我希望查看所有訂單詳細紀錄,以監控交易流程與處理異常。 - **註記**: - 可依狀態/日期/餐廳/會員篩選。 - **測試方法**: - 篩選正確。 --- - **代號**:ADM-MEM-04 list Members - **故事**:身為管理員,我希望查看所有會員清單與詳細資料,以總覽使用者狀態。 - **註記**: - 隱私資料遮罩(密碼)。 - **測試方法**: - 可依關鍵字與狀態精準查詢。 --- - **代號**:ADM-MEM-05 Disable/Delete Member - **故事**:身為管理員,我希望能刪除或停用不當行為會員,以維護營運安全與規範。 - **註記**: - 停用前風險告知與稽核記錄。 - 可恢復(停用)清楚區分。 - **測試方法**: - 停用後無法登入/下單。 --- ### 已登入的顧客 - **代號**:CUS-LIST-01 Browse Restaurants - **故事**:身為一名顧客,我希望可以瀏覽所有外送範圍內的餐廳清單,讓我可以挑選感興趣的餐廳。 - **註記**: - 顯示價格、預估時間。 - **測試方法**: - 無限滾動正常。 --- - **代號**:CUS-LIST-02 Filter & Sort - **故事**:身為一名顧客,我希望能透過評價、價格、等待時間、餐點種類、餐廳名稱篩選餐廳,讓我可以找到合適的餐廳。 - **註記**: - 條件可疊加並可一鍵清除。 - **測試方法**: - 套用/清除條件結果正確。 - 空結果有提示與返回動作。 --- - **代號**:CUS-DETAIL-03 Restaurant Detail - **故事**:身為一名顧客,當我看到感興趣的餐廳時,我希望可以看到餐廳的詳細資料頁面,讓我可以看到餐廳的位置、價格、等待時間和所有供應的餐點,讓我可以進一步挑選餐廳。 - **註記**: - 菜單分類。 - **測試方法**: - 資訊載入完整且與列表一致。 - 菜單操作流暢無誤。 --- - **代號**:CUS-CART-04 Add to Cart - **故事**:身為一名顧客,當我決定好要訂購的餐點時,我希望可以將該餐點加入購物車,讓我可以繼續瀏覽其他餐點。 - **註記**: - 同餐廳合併計算。 - 加入成功提示與可刪除。 - 當購物車內出現距離過遠的跨店餐點時,提醒顧客。 - **測試方法**: - 加入後數量/小計正確。 --- - **代號**:CUS-CART-05 Edit Cart & Summary - **故事**:身為一名顧客,我希望可以修改購物車內的資訊,包含餐點數量等,以及查看當前的總金額。 - **註記**: - 數量下限/上限檢查。 - **測試方法**: - 增減數量金額即時更新。 - 清空購物車有確認流程。 --- - **代號**:CUS-ORDER-06 Set Delivery Info - **故事**:身為顧客,我希望指定送達地點並填寫地址、電話、收件人暱稱。 - **註記**: - 檢查地址、電話格式是否合法。 - **測試方法**: - 必填未填不可下一步。 --- - **代號**:CUS-ORDER-07 Review & Place Order - **故事**:身為一名顧客,我希望我可以確認餐點的總金額、數量,並且送出訂單。 - **註記**: - 提交後建立訂單編號(避免重複送單)。 - **測試方法**: - 下單頁顯示餐點總金額與數量。 - 下單成功頁顯示訂單編號。 --- - **代號**:CUS-TRACK-08 Track Order Status - **故事**:身為一名顧客,我希望我可以確認已下單的訂單狀態,讓我追蹤訂單。 - **註記**: - 顯示預估到達時間。 - **測試方法**: - 狀態更新與推播正確。 --- - **代號**:CUS-TRACK-09 Mark as Received - **故事**:身為顧客,我希望在收到餐點後,能將訂單狀態切換成「已收到」。 - **註記**: - 需防止誤按(確認按鈕)。 - **測試方法**: - 切換成功即鎖定後續狀態。 - **代號**:CUS-TRACK-10 Modify profile - **故事**:身為顧客,我希望可以修改個人資料。 - **註記**: - 可以修改名稱、密碼、頭像。 - **測試方法**: - 顧客修改後可以看到新的資料。 --- - **代號**:CUS-TRACK-11 Set default delivery information - **故事**:身為顧客,我希望能預設常用的配送地址、電話,讓下次訂餐時自動填入該地址、電話。 - **註記**: - 預設地址、電話應在結帳時自動填入。 - **測試方法**: - 新增或修改配送地址、電話後,確認預設地址、電話自動套用至新訂單。 --- - **代號**:CUS-TRACK-12 Switch to delivery person - **故事**:身為顧客,我希望能將帳號切換成「外送員」模式,以便接單與管理配送任務。 - **註記**: - 切換後顯示不同的主頁與功能選單。 - **測試方法**: - 切換成功後可看到外送員介面,切回顧客模式仍能正常使用。 --- - **代號**:CUS-TRACK-13 View order history - **故事**:身為顧客,我希望能查看歷史訂單紀錄,以便回顧過往消費。 - **註記**: - 顯示訂單時間、餐廳名稱、金額與狀態。 - **測試方法**: - 顧客可正確看到過去的訂單紀錄。 --- ### 已登入外送員 - **代號**:DL-ORD-01 View Pending Orders - **故事**:身為外送員,我希望可以看到所有待處理的訂單資訊,以便選擇符合我路線與時間的訂單。 - **註記**: - 顯示距離、取/送點、預估里程與報酬、預計完成時間。 - **測試方法**: - 套用排序/篩選後清單結果正確且可分頁。 - 清單資料與地圖距離/時間估算一致。 --- - **代號**:DL-ORD-02 View Order Detail - **故事**:作為外送員,我希望能查看訂單的詳細資訊(餐點、店家地址、顧客聯絡方式),以便準確取餐與送達。 - **註記**: - 顧客敏感資訊遮罩,僅接單後顯示完整聯絡方式。 - **測試方法**: - 資料欄位完整。 - 未接單僅顯示部分電話/地址。 --- - **代號**:DL-ORD-03 Accept & Start Delivery - **故事**:身為一個外送員,我希望我能根據訂單資訊把餐點送到目的地。 - **註記**: - 接單二次確認並將訂單鎖定給該外送員(避免競搶)。 - **測試方法**: - 接單後其他外送員無法再接同筆訂單。 - 成功接單後狀態自動切換為「配送中」。 --- - **代號**:DL-ORD-04 Handover & Complete - **故事**:作為外送員,我希望在交付餐點後,能將訂單狀態切換成「已完成」,這樣顧客就能確認收餐。 - **註記**: - 若無人可收,提供重試/改約或客服轉接流程(避免強制完成)。 - **測試方法**: - 交付餐點後可點擊已送達。 - **代號**:DL-TRACK-05 Modify profile - **故事**:身為外送員,我希望可以修改個人資料。 - **註記**: - 可以修改名稱、密碼、頭像。 - **測試方法**: - 外送員修改後可以看到新的資料。 - **代號**:DL-TRACK-06 Set default delivery information - **故事**:身為外送員,我希望能預設常用的電話、暱稱,讓我不用在每次接單時都重新填寫。 - **註記**: - 預設電話、暱稱應在接單時自動填入外送員資訊。 - **測試方法**: - 新增或修改電話、暱稱後,確認電話、暱稱自動套用至新訂單。 - **代號**:DL-TRACK-07 Switch to customer person - **故事**:身為外送員,我希望能將帳號切換成「顧客」模式,以便點餐。 - **註記**: - 切換後顯示不同的主頁與功能選單。 - **測試方法**: - 切換成功後可看到顧客介面,切回外送員模式仍能正常使用。 - **代號**:DL-TRACK-08 View order history - **故事**:身為外送員,我希望能查看歷史訂單紀錄,以便回顧過往工作紀錄。 - **註記**: - 顯示訂單時間、餐廳名稱、金額與狀態。 - **測試方法**: - 可正確看到過去的訂單紀錄。 --- ## 使用者介面分析 (User Interface Analysis) #### 登入  尚未登入的使用者進入系統所看到的畫面,使用者可在此頁面透過輸入電子郵件、密碼及選擇身分並按下「登入」登入帳號。若帳號與密碼輸入錯誤,系統會顯示錯誤訊息並要求重新輸入。若使用者還沒註冊帳號可以按下「建立帳號」註冊帳號。若使用者忘記密碼,可以按下「忘記密碼?」。 #### 註冊  尚未註冊帳號的使用者可以在這個頁面填寫必要資訊(暱稱、email、密碼)後並按下「立即註冊」即可註冊帳號,註冊成功會自動跳轉到登入頁面。也可以先填寫預設外送地址、聯絡電話,作為將來下單或接單時的預設資料。按下建立帳戶下方的藍色圓圈可以上傳頭像。想回到登入頁面可以按「已有帳號?前往登入」。 --- ### 顧客 #### 瀏覽餐廳  顧客登入後會跳轉到此頁面。按下頂部 navbar 左上方「瀏覽店家」也能跳轉到此頁面。按下「電資暨綜合教學大樓」可以選擇預設地點或編輯外送地址,如果一開始沒有填寫地址預設為電資暨綜合教學大樓。按下「搜尋餐廳、美食」可以輸入想查詢的餐廳名稱或關鍵字,會根據搜尋內容顯示下方的餐廳列表。也可以按下「咖哩」或「中式」等篩選條件來篩選餐廳。按下下方餐廳列表中的餐廳卡片會跳轉到餐廳詳細資料頁面。 #### 餐廳詳細資訊  該頁面會顯示餐廳的簡介、地址、電話、菜單。在下方的菜單中,按下餐點右邊的「+」可以進入「餐點詳細資訊」頁面。 #### 餐點詳細資訊  該頁面會顯示餐點的簡介、價格。在下方透過「+」「-」選擇餐點數量,並按下「馬上冰!」,即可將餐點加入購物冰箱。按下頂部 navbar 右上角的購物冰箱 icon 可以跳轉到購物冰箱頁面。 #### 購物冰箱  該頁面會顯示所有被加入購物冰箱的餐點,可以點餐點右邊的「+」和「-」來修改餐點數量。可以在頁面右邊瀏覽訂單的小計和總金額。可以按下「前往結帳」跳轉到結帳頁面。 #### 結帳  在「外送詳細資訊」區域可以讓顧客確認並修改成立訂單必要的資訊,包含外送地址、聯絡人暱稱、連絡電話和備註。下方的「付款方式」區域可以選擇付款方式,目前系統只支援「現場付款」。在右方的「訂單摘要」區域確認餐點的數量、價格、預估時間後,按下「確認送出訂單」即可下單,接著會跳轉到訂單狀態頁面。 #### 訂單狀態  可以在頁面上方的進度條中確認訂單的狀態,有準備中、在路上、已接收、已完成四種狀態。外送員接單後,可以確認外送員的暱稱、頭像和電話。可以在下方確認訂單和餐廳的詳細資訊。按下頂部 navbar 左上角的「我的訂單」可以跳轉到訂單列表頁面。按下「我已收到餐點」可以將訂單狀態設定為已收到。當顧客按下「我已收到餐點」以及外送員按下「已送達」系統會將訂單狀態設定為完成。 #### 訂單列表   按下「未完成」或「已完成」可以瀏覽正在處理的訂單和歷史訂單。可以按下「查看詳情」跳轉到訂單狀態頁面。 #### 帳號資訊  按下頂部 navbar 右上角的使用者 icon 可以跳轉到我的帳戶頁面。可以在這個頁面修改暱稱、預設外送地址、連絡電話、密碼,按下「儲存變更」完成修改。按下頭像可以更換頭像。下方的身分管理欄位會有一個按鈕,使用者可以透過此按鈕切換現在的身分。按下「登出」可以登出帳號。 --- ### 外送員 #### 顧客訂單  按下頂部 navbar 左上角的「顧客訂單」,該頁面可以看到所有待處理的訂單,可以瀏覽訂單要取、送的地點、地址、預計送達時間及報酬。可以根據排序和搜尋快速找到符合要求的訂單。點擊「查看並接單」可以跳轉到訂單資訊頁面。 #### 訂單資訊  該頁面可以看到取餐餐廳、取餐地址、外送地點、預計送達時間、顧客暱稱、顧客電話、訂單內容、外送費。按下「取餐地址」或「外送地址」會跳轉到 Google map。按下「立即接單」可以接訂單,並跳轉到訂單狀態頁面。 #### 訂單狀態  該頁面可以看到取餐餐廳、餐廳地址、餐廳電話、取餐品項、外送地址、顧客暱稱、顧客電話和顧客備註。當外送員已送達餐點時,按下「已送達」可以將訂單狀態改為已送達。當顧客按下「我已收到餐點」以及外送員按下「已送達」系統會將訂單狀態設定為完成。 #### 訂單列表   按下頂部 navbar 左上角的「我的訂單」,可以跳轉到訂單列表頁面。按下「當前任務」和「歷史訂單」可以瀏覽正在處理的訂單和歷史訂單。按下當前任務列表中的「查看詳情」,可以跳轉到訂單狀態頁面。 --- ### 管理員 #### 管理店家  身份為管理員的用戶在登入後會進到管理店家頁面,該頁面會有所有餐廳列表,按下餐廳卡片或右邊的「編輯」會跳轉到餐廳詳細資訊頁面。按下「新增餐廳」可以跳轉到新增餐廳頁面。在搜尋欄輸入餐廳名稱可以搜尋餐廳。按下頂部 navbar 右上角的登出 icon 可以登出系統。 #### 餐廳詳細資訊頁面  管理員可以在這個頁面編輯餐廳的資訊,包括名稱、介紹、地址、電話;可以編輯菜單的資訊,包含餐點照片、餐點名稱、價格、介紹,按下餐點右邊的垃圾桶 icon 可以刪除餐點,按下「儲存所有變更」完成修改。按下下方的「新增菜單項目」可以新增餐點。 #### 新增餐廳  在填寫必要的資訊(名稱、介紹、地址、電話、封面圖片)後按下「建立餐廳」可以新增餐廳到列表中。按下下方的「新增菜單項目」可以新增餐點,包含餐點照片、餐點名稱、價格、介紹,按下餐點右邊的垃圾桶 icon 可以刪除餐點。 #### 查看訂單   按下頂部 navbar 左上方的「查看訂單」可以跳轉到此頁面。按下「未完成」和「已完成」可以瀏覽所有現在正在處理和已經完成的訂單。會顯示訂單的編號、狀態、接單地址、送單地址、訂單價格。按下訂單可以跳轉到訂單詳細資訊頁面。在搜尋欄輸入訂單編號可以搜尋訂單。按下日曆 icon 可以篩選指定日期訂單。 #### 訂單詳細資訊  該頁面可以看到訂單的編號、狀態、顧客暱稱、餐廳、外送地址、外送員、外送員電話、下單時間、訂單內容與金額、外送費。 #### 管理會員  按下頂部 navbar 左上方的「管理會員」可以跳轉到此頁面。此頁面會顯示所有使用者的列表。會顯示使用者的暱稱、email、身份。按下使用者會跳轉到會員詳細資訊頁面。在搜尋欄輸入使用者暱稱或 email 可以查訊使用者。 #### 會員詳細資訊  此頁面會顯示使用者的 ID、暱稱、email、外送地址、身份。按下「刪除此會員」可以使該使用者無法再使用本系統。 --- ## 功能需求 (Functional Requirements) <!-- <style> table { word-break: keep-all !important; width: fit-content; overflow: auto; } </style> --> <!-- CRT: Cart MEM: Member ORD: Order TRK: Track RES: Restaurant --> ### 未登入使用者 | 編號 | 功能需求 | | ---------- | ------- | | FR-AU-01 | 系統應提供帳號註冊功能,並支援以 Email 註冊 | | FR-AU-02 | 系統應提供驗證 Email 格式之功能 | | FR-AU-03 | 系統應提供密碼檢核功能,並在不合規定時提供明確的提示 | | FR-AU-04 | 系統應檢查使用者提供的 Email 是否已被註冊 | | FR-AU-05 | 使用者註冊成功時,系統應自動將其導向至登入頁面 | | FR-AU-06 | 系統應提供帳號登入功能 | | FR-AU-06.1 | 系統應提供登入身份選擇(顧客 / 外送員) | | FR-AU-07 | 當使用者登入失敗時,系統應提供適當提示 | | FR-AU-07.1 | 當使用者忘記密碼時,系統應告知「我也沒辦法」 | | FR-AU-08 | 系統應提供登出功能,並且登出後會話應在終端立即失效 | ### 管理員 | 編號 | 功能需求 | | ------------- | ------- | | FR-ADM-RES-01 | 管理員可瀏覽所有餐廳與餐點清單,並支援搜尋 | | FR-ADM-RES-02 | 管理員可新增、更新餐廳與餐點資料 | | FR-ADM-ORD-01 | 管理員可查看所有訂單紀錄,並可依日期篩選,可依金額排序 | | FR-ADM-ORD-02 | 系統應顯示訂單中每一節點(出餐、配送、完成等)的狀態 | | FR-ADM-MEM-01 | 管理員可瀏覽會員清單與詳細資料(隱私資料需遮罩) | | FR-ADM-MEM-02 | 系統應顯示帳號狀態 | | FR-ADM-MEM-03 | 管理員可停用會員帳號 | | FR-ADM-MEM-04 | 停用帳號後,該會員不得下單 | ### 已登入的顧客 | 編號 | 功能需求 | | --------------- | ------- | | FR-CUS-RES-01 | 顧客可瀏覽餐廳清單,系統應依距離顯示餐廳 | | FR-CUS-RES-01.1 | 當顧客將頁面下滑時,系統應自動載入更多餐廳 | | FR-CUS-RES-02 | 顧客可使用價格、預估等待時間、餐點種類等條件進行篩選與排序 | | FR-CUS-RES-03 | 顧客可查看餐廳詳細資料(位置、菜單、價格等) | | FR-CUS-CRT-01 | 顧客可將餐點加入購物車 | | FR-CUS-CRT-02 | 顧客可於購物車中修改數量、刪除特定餐廳的所有餐點 | | FR-CUS-CRT-03 | 系統應即時計算餐點金額、外送費與預估時間 | | FR-CUS-ORD-01 | 顧客可設定送達地點與收件資料(電話、暱稱等) | | FR-CUS-ORD-01.1 | 系統應驗證地址與電話格式是否合法 | | FR-CUS-ORD-02 | 顧客可在下單前確認訂單明細 | | FR-CUS-ORD-03 | 系統應產生唯一訂單編號並避免重複送單 | | FR-CUS-TRK-01 | 顧客可追蹤訂單狀態與配送進度(預估時間) | | FR-CUS-TRK-02 | 顧客可在收到餐點後將訂單狀態更新為「已送達」 | | FR-CUS-01 | 顧客可修改個人資料(名稱、密碼、頭像等) | | FR-CUS-02 | 顧客可預設常用的配送地址與電話 | | FR-CUS-03 | 顧客可切換帳號身分為「外送員」模式 | | FR-CUS-04 | 顧客可查看歷史訂單紀錄 | ### 已登入的外送員 | 編號 | 功能需求 | | ------------ | ------- | | FR-DL-ORD-01 | 外送員可查看所有待接訂單清單,並依距離、金額、送達時間排序,用餐廳名稱關鍵字篩選 | | FR-DL-ORD-02 | 外送員可查看訂單詳細資訊(餐點、店家地址、送達地址) | | FR-DL-ORD-03 | 系統應保護顧客隱私,僅在接單後顯示完整聯絡方式 | | FR-DL-ORD-04 | 外送員可接單並鎖定訂單,避免其他外送員同時接取 | | FR-DL-ORD-05 | 外送員可根據地址前往餐廳與收件地點 | | FR-DL-TRK-01 | 系統應在成功接單後自動切換訂單狀態為「外送中」 | | FR-DL-TRK-02 | 外送員完成交付後可切換訂單為「已送達」 | | FR-DL-01 | 外送員可修改個人資料(名稱、密碼、頭像等) | | FR-DL-02 | 外送員可預設常用的電話 | | FR-DL-03 | 外送員可切換帳號身分為「顧客」模式 | | FR-DL-04 | 外送員可查看歷史配送紀錄 | ### 其他 (in future) | 編號 | 功能需求 | | --------- | -------------------------------------------------- | | FR-CHT-01 | 系統應提供每筆訂單的顧客與外送員之間的即時通訊功能 | | FR-REV-01 | 顧客可在訂單完成後對餐廳進行評價 | | FR-REV-02 | 系統應顯示餐廳的整體評分與評論數量 | |FR-AD-01|系統應能在前台隨機顯示一則目前啟用中的廣告| --- ## 非功能需求 (Non-functional Requirements) ### 效能與容量 | 編號 | 需求 | 指標 / 目標 | |---|---|---| | NFR-CAP-01 | 併發容量 | 100 位以上使用者同時在線操作 | | NFR-CAP-02 | 處理效能 | 使用搜尋功能時,系統應在 2 秒內顯示結果 | ### 相容性與可移植性 | 編號 | 需求 | 指標 / 目標 | |---|---|---| | NFR-COMP-01 | 瀏覽器支援 | 最新兩版 Chrome / Safari / Edge / Firefox,iOS / Android WebView | NFR-COMP-02 | RWD | 360px ~ 1920px 皆可使用 | ### 資安 | 編號 | 需求 | 指標 / 目標 | |---|---|---| | NFR-SEC-01 | 傳輸加密 | 以 HTTPS 加密傳輸 | | NFR-SEC-02 | 帳號防爆力破解 | 連續登入失敗5次鎖帳5分鐘 |
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.