From 7b99087cbb4d461d186fa05cc340f19534584c1a Mon Sep 17 00:00:00 2001 From: skytek_xinliang Date: Wed, 27 May 2026 11:50:40 +0800 Subject: [PATCH] docs: simplify page architecture and component guidance Update the src documentation to emphasize building pages from route views, composables, sections, and items instead of a dedicated pages layer. Clarify the recommended data flow and new feature workflow so template users start from views and only introduce page-driver composables when coordination logic becomes complex.docs: simplify page architecture and component guidance Update the src documentation to emphasize building pages from route views, composables, sections, and items instead of a dedicated pages layer. Clarify the recommended data flow and new feature workflow so template users start from views and only introduce page-driver composables when coordination logic becomes complex. --- src/GUIDE.md | 26 +- src/components/GUIDE.md | 58 +- .../pages/PageEditableGridMaintenance.vue | 13 - src/components/pages/PageFunction.vue | 16 - src/components/pages/PageHome.vue | 32 - src/components/pages/PageMaintenance.vue | 37 - .../pages/PageMasterDetailAMaintenance.vue | 483 ------- .../pages/PageMasterDetailBMaintenance.vue | 1153 ---------------- .../pages/PageMasterDetailCMaintenance.vue | 1122 ---------------- .../pages/PageSectionFormPageDemo.vue | 89 -- .../pages/PageSectionQueryPageDemo.vue | 69 - src/components/pages/PageSettings.vue | 14 - .../useMasterDetailAMaintenancePage.ts | 5 + src/views/FncPage.vue | 8 +- src/views/GUIDE.md | 33 +- src/views/Home.vue | 13 +- src/views/Settings.vue | 6 +- src/views/demos/SectionFormPageDemo.vue | 65 +- src/views/demos/SectionQueryPageDemo.vue | 48 +- src/views/maint/EditableGrid.vue | 4 +- src/views/maint/GUIDE.md | 8 +- src/views/maint/MasterDetailA.vue | 379 +++++- src/views/maint/MasterDetailB.vue | 1155 ++++++++++++++++- src/views/maint/MasterDetailC.vue | 1124 +++++++++++++++- src/views/maint/SingleRecord.vue | 11 +- 25 files changed, 2797 insertions(+), 3174 deletions(-) delete mode 100644 src/components/pages/PageEditableGridMaintenance.vue delete mode 100644 src/components/pages/PageFunction.vue delete mode 100644 src/components/pages/PageHome.vue delete mode 100644 src/components/pages/PageMaintenance.vue delete mode 100644 src/components/pages/PageMasterDetailAMaintenance.vue delete mode 100644 src/components/pages/PageMasterDetailBMaintenance.vue delete mode 100644 src/components/pages/PageMasterDetailCMaintenance.vue delete mode 100644 src/components/pages/PageSectionFormPageDemo.vue delete mode 100644 src/components/pages/PageSectionQueryPageDemo.vue delete mode 100644 src/components/pages/PageSettings.vue diff --git a/src/GUIDE.md b/src/GUIDE.md index 4eb2bf6..cd4a774 100644 --- a/src/GUIDE.md +++ b/src/GUIDE.md @@ -1,19 +1,19 @@ # Src Guide -`src` 是 template 使用者主要修改的區域。新增功能時,先從 route view、page component 與 page driver 開始,除非需求明確牽涉 app shell、登入、router guard 或 HTTP core,否則不要先改 template core。 +`src` 是 template 使用者主要修改的區域。新增功能時,先從 route view 與 composable 開始,除非需求明確牽涉 app shell、登入、router guard 或 HTTP core,否則不要先改 template core。 ## 資料流 ```txt -router -> AppShell -> layout -> view(Page Driver) -> Page Component -> Section -> Item - ↓ - page driver / command composable -> store -> service +router -> AppShell -> layout -> view -> Section -> Item + ↓ + composable -> store -> service ``` ## 主要目錄 - `views/`:route entry,維持薄層,只做 route wiring 與 page driver 掛載。詳見 `src/views/GUIDE.md`。 -- `components/`:Vue UI 元件,依 pages / sections / items / layouts / base 分層。詳見 `src/components/GUIDE.md`。 +- `components/`:Vue UI 元件,依 sections / items / layouts / base 分層。詳見 `src/components/GUIDE.md`。 - `composables/`:page driver、command flow、layout flow 與可重用狀態流程。詳見 `src/composables/GUIDE.md`。 - `router/`:route、layout meta、auth meta 與 guard。詳見 `src/router/GUIDE.md`。 - `shell/`:AppShell、tabs、global overlays。詳見 `src/shell/GUIDE.md`。 @@ -60,7 +60,6 @@ router -> AppShell -> layout -> view(Page Driver) -> Page Component -> Section - - `components/PageIndex.vue` - `components/PageMaint.vue` - `components/maint/*` -- `components/pages/*Maintenance.vue` - `components/sections/*` - `components/items/*` - `composables/page-drivers/*MaintenancePage.ts` @@ -74,14 +73,13 @@ router -> AppShell -> layout -> view(Page Driver) -> Page Component -> Section - ## 新功能流程 -1. 新增或修改 `views/*` route entry。 -2. 若有完整頁面 UI,新增 `components/pages/PageXxx.vue`。 -3. 若有複雜的資料協調(多 composable、搜尋狀態、CRUD flow、dialog 狀態),新增 `composables/page-drivers/useXxxPage.ts`。簡單頁面直接在 view 用 `computed` 組裝 page model。 -4. 若畫面有獨立區塊,拆到 `components/sections/*`。 -5. 若區塊內有欄位群組或單筆資料呈現,拆到 `components/items/*`。 -6. 跨頁共享狀態才新增或修改 `stores/*`。 -7. 外部 API 放在 `services/modules/*`。 -8. 在 `router/routes.ts` 新增 route。 +1. 新增或修改 `views/*` route entry,直接在 view 裡組裝 page model 與 UI。 +2. 若有複雜的資料協調(多 composable、搜尋狀態、CRUD flow、dialog 狀態),新增 `composables/page-drivers/useXxxPage.ts`。簡單頁面直接在 view 用 `computed` 組裝。 +3. 若畫面有獨立區塊,拆到 `components/sections/*`。 +4. 若區塊內有欄位群組或單筆資料呈現,拆到 `components/items/*`。 +5. 跨頁共享狀態才新增或修改 `stores/*`。 +6. 外部 API 放在 `services/modules/*`。 +7. 在 `router/routes.ts` 新增 route。 ## 驗證 diff --git a/src/components/GUIDE.md b/src/components/GUIDE.md index 531388b..519bce5 100644 --- a/src/components/GUIDE.md +++ b/src/components/GUIDE.md @@ -1,55 +1,21 @@ -# Src Guide +# Components Guide -`src` 是 template 使用者主要修改的區域。新增功能時,先從 route view、page component 與 page driver 開始,除非需求明確牽涉 app shell、登入、router guard 或 HTTP core,否則不要先改 template core。 +`components` 放 Vue UI 元件,依 sections / items / layouts / base 分層。頁面不再有獨立的 page component 層 — 頁面 UI 直接寫在 `views/*` 中。 -Template Core 與 Demo/Example 的完整清單見 `src/README.md`。 +## 子目錄 -## 資料流 +- `sections/`:獨立畫面區塊(搜尋面板、資料表格、表單面板),決定佈局,不關心單筆內容。詳見 `src/components/sections/GUIDE.md`。 +- `items/`:單一資料單位的純粹呈現,不管理狀態。詳見 `src/components/items/GUIDE.md`。 +- `layouts/`:App Shell 層的 layout 元件。詳見 `src/components/layouts/GUIDE.md`。 +- `base/`:真正跨頁共用的基礎元件。詳見 `src/components/base/GUIDE.md`。 -```txt -router -> AppShell -> layout -> view(Page Driver) -> Page Component -> Section -> Item - ↓ - page driver / command composable -> store -> service -``` +`PageMaint.vue` 是 maintenance 頁面的通用外殼元件,放在 `src/components/` 頂層。 -## 主要目錄 +## 規則 -- `views/`:route entry,維持薄層,只做 route wiring 與 page driver 掛載。詳見 `src/views/GUIDE.md`。 -- `components/`:Vue UI 元件,依 pages / sections / items / layouts / base 分層。詳見 `src/components/GUIDE.md`。 -- `composables/`:page driver、command flow、layout flow 與可重用狀態流程。詳見 `src/composables/GUIDE.md`。 -- `router/`:route、layout meta、auth meta 與 guard。詳見 `src/router/GUIDE.md`。 -- `shell/`:AppShell、tabs、global overlays。詳見 `src/shell/GUIDE.md`。 -- `stores/`:跨頁共享狀態與快取。詳見 `src/stores/GUIDE.md`。 -- `services/`:HTTP client、API module、token/session、錯誤處理。詳見 `src/services/GUIDE.md`。 -- `language/`:Vue I18n 文案。詳見 `src/language/GUIDE.md`。 - -## 依 pageKind 選擇起點 - -`.spec.json` 中 `maintenanceContract.pageKind` 決定使用哪一種 demo 架構。完整欄位對照見 `docs/llm-development-guide.md` 的「`.spec.json` 對照指南」。 - -| pageKind | 參考 Demo | 讀取 GUIDE | -| ------------- | ------------------------------------------ | -------------------------------------------------------- | -| `query` | `src/views/demos/SectionQueryPageDemo.vue` | `src/components/sections/GUIDE.md`(SectionQueryPage) | -| `application` | `src/views/demos/SectionFormPageDemo.vue` | `src/components/sections/GUIDE.md`(SectionFormPage) | -| `maintenance` | `src/views/maint/*` | `src/views/maint/README.md` + `src/views/maint/GUIDE.md` | -| `auth` | `src/views/Login.vue` | `src/views/GUIDE.md` | -| `print` | query 或 application demo | 同 query / application | -| `chooser` | 不適用 demo | 轉為 route group 或 tab | - -## 新功能流程 - -1. 依 `pageKind` 選擇最接近的 demo。 -2. 在 `src/views//` 新增 route view(薄層,只掛 page driver)。 -3. 在 `src/composables/page-drivers/` 新增 page driver composable。 -4. 在 `src/components/pages/` 新增 page component。 -5. 若畫面有獨立區塊,拆到 `src/components/sections/*`。 -6. 若區塊內有欄位群組,拆到 `src/components/items/*`。 -7. 在 `src/services/modules/` 新增 API module。 -8. 在 `src/models/` 定義 page model 與 domain model 型別。 -9. 在 `src/router/routes.ts` 新增 route。 -10. 在 `src/language/` 新增語系文案。 - -跨頁共享狀態才新增或修改 `src/stores/*`。 +- 元件不直接 import store 或 service。 +- 元件以 props 接收資料,以 emits 回報使用者意圖。 +- 可複用元件不含 domain 名稱(如 `student`、`course`)。 ## 驗證 diff --git a/src/components/pages/PageEditableGridMaintenance.vue b/src/components/pages/PageEditableGridMaintenance.vue deleted file mode 100644 index 56c84b6..0000000 --- a/src/components/pages/PageEditableGridMaintenance.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/src/components/pages/PageFunction.vue b/src/components/pages/PageFunction.vue deleted file mode 100644 index 5758cfa..0000000 --- a/src/components/pages/PageFunction.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/src/components/pages/PageHome.vue b/src/components/pages/PageHome.vue deleted file mode 100644 index f49eee5..0000000 --- a/src/components/pages/PageHome.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - diff --git a/src/components/pages/PageMaintenance.vue b/src/components/pages/PageMaintenance.vue deleted file mode 100644 index 4d65718..0000000 --- a/src/components/pages/PageMaintenance.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - diff --git a/src/components/pages/PageMasterDetailAMaintenance.vue b/src/components/pages/PageMasterDetailAMaintenance.vue deleted file mode 100644 index 6ab3df3..0000000 --- a/src/components/pages/PageMasterDetailAMaintenance.vue +++ /dev/null @@ -1,483 +0,0 @@ - - - - - diff --git a/src/components/pages/PageMasterDetailBMaintenance.vue b/src/components/pages/PageMasterDetailBMaintenance.vue deleted file mode 100644 index 451957d..0000000 --- a/src/components/pages/PageMasterDetailBMaintenance.vue +++ /dev/null @@ -1,1153 +0,0 @@ - - - - - diff --git a/src/components/pages/PageMasterDetailCMaintenance.vue b/src/components/pages/PageMasterDetailCMaintenance.vue deleted file mode 100644 index 2252601..0000000 --- a/src/components/pages/PageMasterDetailCMaintenance.vue +++ /dev/null @@ -1,1122 +0,0 @@ - - - - - diff --git a/src/components/pages/PageSectionFormPageDemo.vue b/src/components/pages/PageSectionFormPageDemo.vue deleted file mode 100644 index 595bff7..0000000 --- a/src/components/pages/PageSectionFormPageDemo.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - diff --git a/src/components/pages/PageSectionQueryPageDemo.vue b/src/components/pages/PageSectionQueryPageDemo.vue deleted file mode 100644 index 8131d0f..0000000 --- a/src/components/pages/PageSectionQueryPageDemo.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - diff --git a/src/components/pages/PageSettings.vue b/src/components/pages/PageSettings.vue deleted file mode 100644 index 92357ec..0000000 --- a/src/components/pages/PageSettings.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/composables/page-drivers/useMasterDetailAMaintenancePage.ts b/src/composables/page-drivers/useMasterDetailAMaintenancePage.ts index ee7101d..4416651 100644 --- a/src/composables/page-drivers/useMasterDetailAMaintenancePage.ts +++ b/src/composables/page-drivers/useMasterDetailAMaintenancePage.ts @@ -383,8 +383,11 @@ export function useMasterDetailAMaintenancePage() { } return { + confirmSave, currentPage, departments, + detailForm, + flow, formState, gradeOptions, itemsPerPage, @@ -396,7 +399,9 @@ export function useMasterDetailAMaintenancePage() { pageCount, pageModel, pageSummary, + requestSaveConfirmation, resetSearch, + scrollToField, search, searchPanelOpen, snackbarVisible, diff --git a/src/views/FncPage.vue b/src/views/FncPage.vue index 0d12081..32fdeb7 100644 --- a/src/views/FncPage.vue +++ b/src/views/FncPage.vue @@ -1,15 +1,15 @@ diff --git a/src/views/GUIDE.md b/src/views/GUIDE.md index 96248ab..22264b2 100644 --- a/src/views/GUIDE.md +++ b/src/views/GUIDE.md @@ -1,32 +1,47 @@ # Views Guide -`views` 是 route entry。View 應維持薄層,負責掛載 page driver 與 page component,不承載大段 UI、dialog、表單欄位或 store mutation 細節。 +`views` 是 route entry。View 自含 page model 組裝與頁面 UI,若邏輯複雜才抽到 page driver composable。 ## 規則 - 使用 ` ``` -若頁面只是簡單的 `computed` 組裝(無搜尋、無 dialog、無複雜事件),直接在 view 寫 page model,不需要建立 page driver。以 destructure 方式取用 composable 回傳值,模板不寫 `.value`。 +複雜頁面:透過 page driver composable 協調多個資料來源。 + +```vue + + + +``` + +以 destructure 方式取用 composable 回傳值,模板不寫 `.value`。 ## Login.vue 開關 diff --git a/src/views/Home.vue b/src/views/Home.vue index 0a5dee3..5f75877 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -1,17 +1,18 @@ diff --git a/src/views/Settings.vue b/src/views/Settings.vue index e78c267..7ee1ea0 100644 --- a/src/views/Settings.vue +++ b/src/views/Settings.vue @@ -1,13 +1,11 @@ diff --git a/src/views/demos/SectionFormPageDemo.vue b/src/views/demos/SectionFormPageDemo.vue index 678fba8..84bc5d8 100644 --- a/src/views/demos/SectionFormPageDemo.vue +++ b/src/views/demos/SectionFormPageDemo.vue @@ -1,16 +1,71 @@ diff --git a/src/views/demos/SectionQueryPageDemo.vue b/src/views/demos/SectionQueryPageDemo.vue index 392d28e..5b271fe 100644 --- a/src/views/demos/SectionQueryPageDemo.vue +++ b/src/views/demos/SectionQueryPageDemo.vue @@ -1,15 +1,53 @@ diff --git a/src/views/maint/EditableGrid.vue b/src/views/maint/EditableGrid.vue index ef01ee7..9a9a17e 100644 --- a/src/views/maint/EditableGrid.vue +++ b/src/views/maint/EditableGrid.vue @@ -1,6 +1,6 @@ diff --git a/src/views/maint/GUIDE.md b/src/views/maint/GUIDE.md index 9ee5f54..4b7defa 100644 --- a/src/views/maint/GUIDE.md +++ b/src/views/maint/GUIDE.md @@ -1,12 +1,12 @@ # Maintenance Views Guide -`views/maint` 是維護頁 demo。所有檔案都應是薄 route entry,實際 UI 與流程分別放在 `components/pages`、`components/sections`、`components/items` 與 `composables/page-drivers`。 +`views/maint` 是維護頁 demo。所有檔案都是自含的 route entry,UI 與流程直接在 view 中組合 `PageMaint`、`components/sections`、`components/items` 與 composable。 ## 目前範本 -- `SingleRecord.vue`:單主檔 CRUD + dialog。 +- `SingleRecord.vue`:單主檔 CRUD + dialog(使用 page driver composable)。 - `EditableGrid.vue`:可編輯表格。 -- `MasterDetailA.vue`:主檔 + 側邊明細 panel。 +- `MasterDetailA.vue`:主檔 + 側邊明細 panel(使用 page driver composable)。 - `MasterDetailB.vue`:主檔 + collapse / full-height 明細。 - `MasterDetailC.vue`:主檔 + 簡化明細清單。 @@ -15,8 +15,6 @@ 複製維護頁時同步調整: - `router/routes.ts` 的 `path`、`name`、`component`、`meta.layout` -- page driver 名稱與 import -- page component 名稱與 import - 頁面標題、查詢欄位、表格欄位、form 型別、驗證規則 - store、service、model、語系、menu/favorites/breadcrumb 相關資料 diff --git a/src/views/maint/MasterDetailA.vue b/src/views/maint/MasterDetailA.vue index f0a4b00..faf475c 100644 --- a/src/views/maint/MasterDetailA.vue +++ b/src/views/maint/MasterDetailA.vue @@ -1,38 +1,371 @@ + + diff --git a/src/views/maint/MasterDetailB.vue b/src/views/maint/MasterDetailB.vue index 81ab36f..e410781 100644 --- a/src/views/maint/MasterDetailB.vue +++ b/src/views/maint/MasterDetailB.vue @@ -1,19 +1,1156 @@ - - + diff --git a/src/views/maint/MasterDetailC.vue b/src/views/maint/MasterDetailC.vue index 0c94cd7..d1ed213 100644 --- a/src/views/maint/MasterDetailC.vue +++ b/src/views/maint/MasterDetailC.vue @@ -1,19 +1,1125 @@ - - + diff --git a/src/views/maint/SingleRecord.vue b/src/views/maint/SingleRecord.vue index 92f4340..be975ae 100644 --- a/src/views/maint/SingleRecord.vue +++ b/src/views/maint/SingleRecord.vue @@ -1,5 +1,5 @@