# Section Components Guide
`src/components/sections` 放頁面區塊容器,例如搜尋區、表格、dialog shell、panel。
## 規則
- 決定布局與區塊互動,不知道 route。
- 檔名使用 `Section` 前綴。
## SectionFormPage
表單申請/填寫頁面通用外殼。最外層為 `v-form`,內含標題卡片、表單欄位區、子區段插槽、配合事項與動作按鈕列。
### 使用時機
- 頁面包含**送出/存檔按鈕**(`type="submit"`)
- 需要**表單驗證**與整體 `v-form` 包覆
- 具有**標題卡片**、**配合事項/注意事項區**、**動作按鈕列**的固定結構
- 例如:申請單、借用單、報名表、維護單等填寫頁面
不適用情境:純粹列表/查詢頁面(無送出按鈕)、結構差異過大的頁面。
### 視覺特徵
- 頂部標題卡片(`bg-primary`)
- 中間為表單欄位區(`v-text-field`/`v-select`)
- 可能有子區段卡片(明細表格)
- 底部有「配合事項」提示區(`bg-yellow-lighten-5`)
- 最底部為動作按鈕列(存檔 + 清除 + 返回)
### Props
| Prop | 型別 | 預設 | 說明 |
|------|------|------|------|
| `title` | `string` | — | 頁面標題 |
| `loading` | `boolean` | `undefined` | 是否顯示 loading |
| `error` | `string` | `undefined` | 錯誤訊息 |
| `message` | `string` | `undefined` | 成功訊息 |
| `submitLabel` | `string` | `'存檔'` | 送出按鈕文字 |
| `resetLabel` | `string` | `'清除'` | 清除按鈕文字 |
| `backLabel` | `string` | `'返回'` | 返回按鈕文字 |
### Slots
| Slot | 用途 |
|------|------|
| `#fields` | 表單欄位區,用 `v-row`/`v-col` 配置 |
| `#sections` | 額外子區段卡片(明細、表格等) |
| `#notices` | 配合事項/注意事項清單 |
### Emits
| Emit | 說明 |
|------|------|
| `@submit` | 點擊存檔時觸發 |
| `@reset` | 點擊清除時觸發 |
| `@back` | 點擊返回時觸發 |
### 範例
```vue
設備明細
借用設備時,請愛惜公物。
```
## SectionQueryPage
查詢/列表頁面通用外殼。包含標題卡片、篩選條件區、查詢按鈕、結果表格區與返回按鈕。
### 使用時機
- 頁面具有**篩選條件** + **查詢按鈕** + **結果表格**的固定結構
- 例如:單筆查詢、列表查詢、報表查詢等頁面
不適用情境:
- 純粹 CRUD 維護頁面(含新增/編輯/刪除操作)→ 用 `SectionFormPage`
- 頁面結構差異過大(如沒有篩選條件或沒有結果表格)
### 視覺特徵
- 頂部標題卡片(`bg-primary`)
- 標題下方為篩選條件區(`v-text-field`/`v-select` + 查詢按鈕)
- 下方為結果區:可能是單一表格,也可能是多張獨立卡片表格
- 最底部為返回按鈕
- 與 `SectionFormPage` 最大差異:**沒有「存檔」按鈕,也沒有「配合事項」區**
### Props
| Prop | 型別 | 預設 | 說明 |
|------|------|------|------|
| `title` | `string` | — | 頁面標題 |
| `loading` | `boolean` | `undefined` | 是否顯示 loading |
| `error` | `string` | `undefined` | 錯誤訊息 |
| `backLabel` | `string` | `'返回'` | 返回按鈕文字 |
### Slots
| Slot | 用途 |
|------|------|
| `#filters` | 篩選條件欄位,用 `v-col` 配置 |
| `#results` | 單一結果表格區(會自動包一層 `v-card`) |
| `#sections` | 多區段結果卡片(需自行用 `v-card` 包覆,適用多表格情境) |
`#results` 與 `#sections` 擇一使用:
- 單一表格結果 → 用 `#results`
- 多張獨立表格/列表 → 用 `#sections`,在 slot 內自行配置 `v-card` 與標題
### Emits
| Emit | 說明 |
|------|------|
| `@search` | 點擊查詢時觸發 |
| `@back` | 點擊返回時觸發 |
### 範例:單一結果表格
```vue
| 設備代碼 |
名稱 |
| 尚無查詢結果 |
| {{ result.facId }} |
{{ result.facName }} |
```
### 範例:多區段結果(多表格)
```vue
場地申請
設備申請
```