# Tool_OCR Frontend

> 現代化的 OCR 文件處理系統前端介面
>
> 基於 React 18 + Vite + TypeScript + Tailwind CSS + shadcn/ui

---

## 目錄

- [快速開始](#快速開始)
- [功能特性](#功能特性)
- [技術棧](#技術棧)
- [專案結構](#專案結構)
- [開發指南](#開發指南)
- [部署說明](#部署說明)

---

## 快速開始

### 前置需求

- Node.js >= 18.0.0
- npm >= 9.0.0
- 後端 API 服務運行在 `http://localhost:12010`

### 安裝依賴

```bash
cd frontend
npm install
```

### 啟動開發伺服器

```bash
npm run dev
```

瀏覽器開啟: `http://localhost:12011`

### 建置生產版本

```bash
npm run build
```

建置輸出目錄: `dist/`

---

## 功能特性

### 1. 使用者認證
- JWT Token 認證
- 自動登出處理
- 受保護路由

### 2. 批次檔案上傳
- **拖放上傳介面** (react-dropzone)
- **支援格式**: PNG, JPG, JPEG, PDF, DOC, DOCX, PPT, PPTX
- **批次限制**: 單檔 50MB, 每批次最多 100 檔
- **即時預覽**: 檔案清單、大小、狀態

### 3. OCR 處理追蹤
- **即時進度顯示** (2 秒輪詢)
- **統計儀表板**: 已完成/處理中/失敗數量
- **檔案級別狀態**: 處理狀態、時間、錯誤訊息
- **自動跳轉**: 處理完成後自動進入結果頁面

### 4. 結果預覽
- **雙欄佈局**: 檔案清單 + 內容預覽
- **多格式預覽**: Markdown 渲染 / JSON 資料
- **統計資訊**: OCR 信心度、處理時間、文字區塊數

### 5. 靈活匯出
- **匯出格式**: TXT, JSON, Excel, Markdown, PDF, ZIP
- **自訂規則**: 建立、編輯、刪除匯出規則
- **CSS 模板**: 選擇 PDF 樣式 (default, academic, business)

### 6. 設定管理
- 使用者資訊顯示
- 匯出規則 CRUD 操作
- 系統設定

---

## 技術棧

### 核心框架
- **React 18.2** - 使用者介面框架
- **TypeScript 5.9** - 型別安全
- **Vite 7.2** - 快速建置工具

### 狀態管理
- **React Query (TanStack Query)** - 伺服器狀態管理
- **Zustand** - 客戶端狀態管理

### UI 組件庫
- **Tailwind CSS 4.1** - CSS 框架
- **shadcn/ui** - React 組件庫
- **Lucide React** - 圖示庫

### 路由與 HTTP
- **React Router 7.9** - 客戶端路由
- **Axios** - HTTP 請求

### 其他
- **react-dropzone** - 拖放上傳
- **react-markdown** - Markdown 渲染
- **i18next** - 國際化

---

## 專案結構

```
frontend/
├── src/
│   ├── components/
│   │   ├── ui/                # shadcn/ui 組件
│   │   ├── FileUpload.tsx
│   │   ├── ResultsTable.tsx
│   │   ├── MarkdownPreview.tsx
│   │   └── Layout.tsx
│   ├── pages/
│   │   ├── LoginPage.tsx
│   │   ├── UploadPage.tsx
│   │   ├── ProcessingPage.tsx
│   │   ├── ResultsPage.tsx
│   │   ├── ExportPage.tsx
│   │   └── SettingsPage.tsx
│   ├── store/
│   │   ├── authStore.ts
│   │   └── uploadStore.ts
│   ├── services/
│   │   └── api.ts
│   ├── types/
│   │   └── api.ts
│   ├── lib/
│   │   └── utils.ts
│   ├── i18n/
│   ├── styles/
│   ├── App.tsx
│   └── main.tsx
├── package.json
├── vite.config.ts
├── tailwind.config.js
└── tsconfig.json
```

---

## 開發指南

### 安裝新依賴

```bash
# 安裝 class-variance-authority (如果尚未安裝)
npm install class-variance-authority

# 安裝 react-markdown (如果尚未安裝)
npm install react-markdown
```

### 新增 shadcn/ui 組件

所有 shadcn/ui 組件已在 `src/components/ui/` 目錄中,包括:
- Button, Card, Input, Label, Select
- Alert, Dialog, Tabs, Badge
- Progress, Toast, Table

### 整合新 API

1. 在 `src/types/api.ts` 定義型別
2. 在 `src/services/api.ts` 新增方法
3. 在頁面組件使用 React Query

---

## 部署說明

### 環境變數

建立 `.env.production`:

```bash
VITE_API_BASE_URL=http://your-api-server.com:12010
VITE_APP_NAME=Tool_OCR
```

### 建置

```bash
npm run build
```

### 部署到 Nginx

```nginx
server {
    listen 80;
    server_name tool-ocr.example.com;
    root /var/www/tool-ocr;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_pass http://127.0.0.1:12010;
        proxy_set_header Host $host;
    }
}
```

---

## 參考文件

- [FRONTEND_API.md](../FRONTEND_API.md) - 完整前端 API 文件
- [API_REFERENCE.md](../API_REFERENCE.md) - 後端 API 參考

---

**版本**: 0.1.0 | **最後更新**: 2025-01-13
