|
2 | 2 | <img src="https://quotation-app-zeta.vercel.app/favicon.png" width="120" alt="Quotation App Logo"> |
3 | 3 | </p> |
4 | 4 |
|
5 | | -<h1 align="center">Quotation App</h1> |
6 | | - |
7 | | -#### 一款簡單好用的線上報價單編輯與預覽工具,支援多欄位填寫、即時計算與美觀的預覽畫面,適合各類型專案報價需求。 |
| 5 | +<h1 align="center">Quotation App 👨💻</h1> |
| 6 | +<p align="center"> |
| 7 | +一款簡單好用的線上報價單編輯與預覽工具,支援多欄位填寫、即時計算與美觀的預覽畫面,適合各類型專案報價需求。 |
| 8 | +</p> |
8 | 9 |
|
9 | 10 | <p align="center"> |
10 | | - <img src="https://quotation-app-zeta.vercel.app/image.png" width="90%" alt="Quotation App Logo"> |
| 11 | + <img src="https://quotation-app-zeta.vercel.app/image.jpg" width="90%" alt="Quotation App Preview" style="border-radius: 20px; box-shadow: 0 4px 24px rgba(0,0,0,0.15);" /> |
11 | 12 | </p> |
12 | 13 |
|
13 | | -## 特色功能 |
14 | | - |
15 | | -- 報價單編輯與即時預覽 |
16 | | -- 輕鬆填寫基本資料、接案人資料、客戶資料與工作內容 |
17 | | -- 報價單小計、總計自動計算 |
18 | | -- 支援 Input Debounce,提升輸入體驗 |
19 | | -- 社群分享自動顯示預覽圖(Open Graph) |
20 | | -- Axe-core 驗證無障礙設計 |
21 | | -- 匯出 PDF 並自動儲存匯出紀錄於 localStorage,支援歷史紀錄載入與清除 |
22 | | -- RWD 浮動匯出按鈕與匯出紀錄,手機/平板體驗佳 |
23 | | -- Prettier 程式碼格式化與 TypeScript 嚴謹型別 |
24 | | -- 元件結構清楚,易於維護與擴充 |
25 | | -- 多語系支援 |
26 | | - |
27 | | -## 技術架構 |
28 | | - |
29 | | -- Next.js 15 |
30 | | -- React 18 |
31 | | -- TypeScript |
32 | | -- Tailwind CSS |
33 | | -- next-intl |
34 | | -- Zustand 狀態管理 |
35 | | -- dayjs 處理日期 |
36 | | -- html2canvas + jsPDF 匯出 PDF |
37 | | -- axe-core 無障礙檢查 |
38 | | - |
39 | | -## i18n 多語系支援 |
40 | | - |
41 | | -- 支援中英文(zh-TW / en-US)介面切換 |
42 | | -- 語言切換按鈕可即時切換所有 UI 文字 |
43 | | -- 語系路由自動化,middleware 會根據支援語言自動產生白名單 |
44 | | -- 所有主要元件皆有多語系測試,確保不同語言下顯示正確 |
45 | | -- 新增語言只需於 `constants/locale.ts` 設定,無需手動調整 middleware |
46 | | -- message 新增語系表 |
47 | | - |
48 | | -## 安裝與啟動 |
49 | | - |
50 | | -1. 下載專案 |
| 14 | +## ✨ 特色功能 |
| 15 | + |
| 16 | +- 📝 報價單編輯與即時預覽 |
| 17 | +- 🧑💼 輕鬆填寫基本資料、接案人資料、客戶資料與工作內容 |
| 18 | +- 🧮 報價單小計、總計自動計算 |
| 19 | +- ⏳ 支援 Input Debounce,提升輸入體驗 |
| 20 | +- 🌐 社群分享自動顯示預覽圖(Open Graph) |
| 21 | +- ♿ Axe-core 驗證無障礙設計 |
| 22 | +- 📄 匯出 PDF 並自動儲存匯出紀錄於 localStorage,支援歷史紀錄載入與清除 |
| 23 | +- 📱 RWD 浮動匯出按鈕與匯出紀錄,手機/平板體驗佳 |
| 24 | +- 🎨 Prettier 程式碼格式化與 TypeScript 嚴謹型別 |
| 25 | +- 🧩 元件結構清楚,易於維護與擴充 |
| 26 | +- 🌏 多語系支援 |
| 27 | + |
| 28 | +## 🛠️ 技術架構 |
| 29 | + |
| 30 | +- ⚡ Next.js 15 |
| 31 | +- ⚛️ React 18 |
| 32 | +- 🦾 TypeScript |
| 33 | +- 💨 Tailwind CSS |
| 34 | +- 🌍 next-intl |
| 35 | +- 🗃️ Zustand 狀態管理 |
| 36 | +- 📅 dayjs 處理日期 |
| 37 | +- 🖨️ html2canvas + jsPDF 匯出 PDF |
| 38 | +- ♿ axe-core 無障礙檢查 |
| 39 | + |
| 40 | +## 🌏 i18n 多語系支援 |
| 41 | + |
| 42 | +- 🇹🇼🇺🇸 支援中英文(zh-TW / en-US)介面切換 |
| 43 | +- 🔄 語言切換按鈕可即時切換所有 UI 文字 |
| 44 | +- 🛣️ 語系路由自動化,middleware 會根據支援語言自動產生白名單 |
| 45 | +- ✅ 所有主要元件皆有多語系測試,確保不同語言下顯示正確 |
| 46 | +- ➕ 新增語言只需於 `constants/locale.ts` 設定,無需手動調整 middleware |
| 47 | +- 🗂️ message 新增語系表 |
| 48 | + |
| 49 | +## 🚀 安裝與啟動 |
| 50 | + |
| 51 | +1. ⬇️ 下載專案 |
51 | 52 |
|
52 | 53 | ```bash |
53 | 54 | git clone https://github.com/nick-jy-huang/quotation-app.git |
54 | 55 | cd quotation-app |
55 | 56 | ``` |
56 | 57 |
|
57 | | -2. 安裝相依套件 |
| 58 | +2. 📦 安裝相依套件 |
58 | 59 |
|
59 | 60 | ```bash |
60 | 61 | pnpm install |
61 | 62 | ``` |
62 | 63 |
|
63 | | -3. 啟動開發伺服器 |
| 64 | +3. ▶️ 啟動開發伺服器 |
64 | 65 |
|
65 | 66 | ```bash |
66 | 67 | pnpm dev |
67 | 68 | ``` |
68 | 69 |
|
69 | | -4. 開啟瀏覽器並前往 [http://localhost:3000](http://localhost:3000) |
| 70 | +4. 🌐 開啟瀏覽器並前往 [http://localhost:3000](http://localhost:3000) |
70 | 71 |
|
71 | | -## Node.js 版本需求 |
| 72 | +## 🖥️ Node.js 版本需求 |
72 | 73 |
|
73 | 74 | 本專案建議使用 Node.js 20 以上版本(Next.js 15 需 Node.js 18+,建議 20 以上)。 |
74 | 75 |
|
75 | | -## 測試 |
| 76 | +## 🧪 測試 |
76 | 77 |
|
77 | 78 | 本專案採用 Vitest + Testing Library 進行單元與元件測試,涵蓋主要元件、流程、無障礙、RWD、localStorage、副作用等情境。 |
78 | 79 |
|
79 | | -- 使用 [Vitest](https://vitest.dev/) 作為測試框架,支援 TypeScript 與 Vite 專案。 |
80 | | -- 使用 [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) 進行元件渲染與互動測試。 |
81 | | -- 覆蓋率報表自動產生於 `coverage/` 目錄,可用瀏覽器開啟 `coverage/index.html` 查看詳細覆蓋情況。 |
82 | | -- 重要元件皆有 smoke test、props 傳遞、互動、無障礙、RWD 等測試案例。 |
83 | | -- PDF 匯出、localStorage 等副作用皆有 mock 處理,確保測試穩定。 |
| 80 | +- 🧪 使用 [Vitest](https://vitest.dev/) 作為測試框架,支援 TypeScript 與 Vite 專案。 |
| 81 | +- 🧑💻 使用 [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) 進行元件渲染與互動測試。 |
| 82 | +- 📊 覆蓋率報表自動產生於 `coverage/` 目錄,可用瀏覽器開啟 `coverage/index.html` 查看詳細覆蓋情況。 |
| 83 | +- ✅ 重要元件皆有 smoke test、props 傳遞、互動、無障礙、RWD 等測試案例。 |
| 84 | +- 🗃️ PDF 匯出、localStorage 等副作用皆有 mock 處理,確保測試穩定。 |
84 | 85 |
|
85 | | -### 執行測試 |
| 86 | +### 🏃♂️ 執行測試 |
86 | 87 |
|
87 | 88 | ```bash |
88 | 89 | pnpm test |
89 | 90 | ``` |
90 | 91 |
|
91 | | -### 相關測試指令 |
| 92 | +### 🧰 相關測試指令 |
92 | 93 |
|
93 | 94 | - `pnpm test`:執行所有單元測試,執行測試並產生覆蓋率報表,**coverage** 資料夾中點擊 **index.html** |
94 | 95 |
|
95 | | -## 授權 |
| 96 | +## 📄 授權 |
96 | 97 |
|
97 | 98 | - 本專案採用 MIT License 授權,詳見 [LICENSE](./LICENSE)。 |
98 | 99 | - 作者:nick-jy-huang |
|
0 commit comments