From 26792f9a37561b75580a3a7f9dad853ba3761fd2 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Tue, 3 Nov 2026 16:51:51 +0330 Subject: [PATCH] feat: migrate CRM screens to Ant Design Vue and expand home dashboard Preserve the local Ant UI work across views/components and add the new home dashboard chart panels before merging latest main. --- .cursor/rules/antd-strict-governance.mdc | 14 +- .cursor/settings.json | 7 + .cursor/skills/antd-system-architect/SKILL.md | 6 +- antd-strict-governance.mdc.md | 65 + apps/api/src/reports/reports.service.ts | 284 +- apps/web/package.json | 2 + apps/web/src/components/AskMentoPanel.vue | 164 +- .../src/components/ExcelImportFlow.vue.bak | 568 ++++ apps/web/src/components/JalaliDateInput.vue | 97 +- .../src/components/NoteAiSuggestionPanel.vue | 261 +- apps/web/src/components/SmsHeaderWallet.vue | 172 +- .../activities/ActivitiesKanban.vue | 23 +- .../activities/ActivityFieldsEditor.vue | 821 ++--- .../activities/ActivityStagesManager.vue | 425 ++- .../activities/ActivityTypesManager.vue | 991 +++--- .../automations/AutomationCanvas.vue | 502 ++- .../automations/AutomationInspector.vue | 845 ++--- .../components/automations/AutomationNode.vue | 26 +- .../dashboard/HomeActivityMixChart.vue | 81 + .../components/dashboard/HomeAiAssistant.vue | 555 ++-- .../dashboard/HomeAlertsSection.vue | 200 ++ .../dashboard/HomeBirthdayStrip.vue | 427 +-- .../dashboard/HomeCustomerGrowth.vue | 98 + .../dashboard/HomeDealOutcomeChart.vue | 102 + .../components/dashboard/HomeFunnelChart.vue | 44 + .../web/src/components/dashboard/HomeHero.vue | 574 +--- .../src/components/dashboard/HomeKpiRow.vue | 184 +- .../dashboard/HomeLostReasonsChart.vue | 83 + .../components/dashboard/HomeMiniPipeline.vue | 311 +- .../components/dashboard/HomePanelEmpty.vue | 76 +- .../dashboard/HomeRecentActivities.vue | 234 +- .../components/dashboard/HomeSalesTrend.vue | 137 +- .../components/dashboard/HomeSourcesChart.vue | 163 +- .../components/dashboard/HomeTopCustomers.vue | 213 +- apps/web/src/components/nav/NavHubPanel.vue | 2 +- .../person-profile/ProfileEmptyState.vue | 196 +- .../person-profile/ProfileMoreMenu.vue | 232 +- .../components/routines/DailyScoreCard.vue | 310 +- apps/web/src/components/routines/KpiCard.vue | 209 +- .../components/routines/RoutineMonthGrid.vue | 321 +- .../routines/TeamPerformanceTable.vue | 265 +- .../src/components/treasury/TreasuryNav.vue | 70 +- apps/web/src/layouts/AppLayout.vue | 351 +- apps/web/src/styles/main.css | 5 + apps/web/src/theme/antdTheme.ts | 11 +- apps/web/src/views/ActivitiesView.vue | 2672 +++++---------- apps/web/src/views/ActivityFormView.vue | 1879 +++-------- .../web/src/views/AutomationsSettingsView.vue | 1024 +++--- apps/web/src/views/ChequesView.vue | 612 ++-- apps/web/src/views/CommissionsView.vue | 455 ++- apps/web/src/views/ContactsView.vue | 1829 +++++------ apps/web/src/views/HomeView.vue | 226 +- apps/web/src/views/LoginView.vue | 803 ++--- apps/web/src/views/LoyaltyClubView.vue | 1737 +++++----- apps/web/src/views/MessageAutomationsView.vue | 2919 +++++------------ apps/web/src/views/NotesView.vue | 2879 ++++++---------- apps/web/src/views/PersonFormView.vue | 5 +- apps/web/src/views/ProductFormView.vue | 506 ++- apps/web/src/views/ProductsSettingsView.vue | 888 +++-- apps/web/src/views/ProfileView.vue | 1590 +++------ apps/web/src/views/ReportsView.vue | 2433 ++++++-------- apps/web/src/views/ReservationsView.vue | 727 ++-- apps/web/src/views/SalesForecastView.vue | 1205 ++++--- apps/web/src/views/SmsCampaignsView.vue | 853 +++-- apps/web/src/views/TicketsView.vue | 826 ++--- apps/web/src/views/adm/code_artifact (2).html | 1296 ++++++++ apps/web/src/views/home-dashboard-mock.ts | 358 ++ .../views/routines/RoutinesCalendarView.vue | 612 ++-- .../src/views/routines/RoutinesListView.vue | 331 +- .../src/views/routines/RoutinesManageView.vue | 839 +++-- .../routines/RoutinesMyPerformanceView.vue | 391 ++- .../views/routines/RoutinesOverdueView.vue | 440 ++- .../src/views/routines/RoutinesShellView.vue | 215 +- .../src/views/routines/RoutinesTeamView.vue | 661 ++-- .../src/views/routines/RoutinesTodayView.vue | 594 ++-- .../src/views/treasury/TreasuryHomeView.vue | 641 +++- .../views/treasury/treasury-dashboard-mock.ts | 187 ++ apps/web/vite.config.ts | 3 +- package-lock.json | 597 ++++ packages/shared/src/index.ts | 42 + 80 files changed, 19982 insertions(+), 24020 deletions(-) create mode 100644 .cursor/settings.json create mode 100644 antd-strict-governance.mdc.md create mode 100644 apps/web/src/components/ExcelImportFlow.vue.bak create mode 100644 apps/web/src/components/dashboard/HomeActivityMixChart.vue create mode 100644 apps/web/src/components/dashboard/HomeAlertsSection.vue create mode 100644 apps/web/src/components/dashboard/HomeCustomerGrowth.vue create mode 100644 apps/web/src/components/dashboard/HomeDealOutcomeChart.vue create mode 100644 apps/web/src/components/dashboard/HomeFunnelChart.vue create mode 100644 apps/web/src/components/dashboard/HomeLostReasonsChart.vue create mode 100644 apps/web/src/views/adm/code_artifact (2).html create mode 100644 apps/web/src/views/home-dashboard-mock.ts create mode 100644 apps/web/src/views/treasury/treasury-dashboard-mock.ts diff --git a/.cursor/rules/antd-strict-governance.mdc b/.cursor/rules/antd-strict-governance.mdc index a8b16f7..5d4215a 100644 --- a/.cursor/rules/antd-strict-governance.mdc +++ b/.cursor/rules/antd-strict-governance.mdc @@ -41,11 +41,19 @@ Legacy CRM UI (`components/ui/*`, `.crm-*`, `.btn` / `.field` in `styles/`) rema 6. **24-column grid only** Page layout on migrated screens uses Ant Grid: `a-row` / `a-col` with the **24-column** system (`:span`, `:xs`, `:sm`, `:md`, `:lg`, `:xl`). Do not invent parallel flex/grid CSS layouts for page chrome. -7. **RTL + locale** - App root is wrapped with ``. Do not override direction to LTR on whole pages; use local `direction="ltr"` only for inherently LTR fragments (e.g. phone numbers, codes). +7. **RTL + locale + StyleProvider** + App root in `App.vue` **must** wrap ConfigProvider with `` so legacy `main.css` cannot override Ant controls via higher specificity: + ```vue + + + + + + ``` + Do not override direction to LTR on whole pages; use local `direction="ltr"` only for inherently LTR fragments (e.g. phone numbers, codes). 8. **Auto-import** - `` components are resolved via `unplugin-vue-components` + `AntDesignVueResolver({ importStyle: false })`. Do not add blanket `app.use(antd)` unless there is a documented exception. Do not per-component CSS imports (`importStyle` stays `false`; CSS-in-JS + theme). + `` components are resolved via `unplugin-vue-components` + `AntDesignVueResolver({ importStyle: false })`. Do not add blanket `app.use(antd)` unless there is a documented exception. Do not per-component CSS imports (`importStyle` stays `false`; CSS-in-JS + theme). Prefer **explicit** `import { Button as AButton, … } from 'ant-design-vue'` in migrated files when the Vite resolver is missing or unreliable. 9. **Theme is central** Visual tokens (primary, radius, `controlHeight`, padding/margin scale, shadows, Form/Card overrides) live only in `antdTheme.ts`. Do not fork theme objects inside views. diff --git a/.cursor/settings.json b/.cursor/settings.json new file mode 100644 index 0000000..0b72ad4 --- /dev/null +++ b/.cursor/settings.json @@ -0,0 +1,7 @@ +{ + "plugins": { + "hex": { + "enabled": true + } + } +} diff --git a/.cursor/skills/antd-system-architect/SKILL.md b/.cursor/skills/antd-system-architect/SKILL.md index ea38348..5421498 100644 --- a/.cursor/skills/antd-system-architect/SKILL.md +++ b/.cursor/skills/antd-system-architect/SKILL.md @@ -38,9 +38,13 @@ Also read and obey [`.cursor/rules/antd-strict-governance.mdc`](../../rules/antd | Dependency | `ant-design-vue` ^4, `@ant-design/icons-vue`, `unplugin-vue-components` in `@mento/web` | | Vite plugin | `apps/web/vite.config.ts` — `Components` + `AntDesignVueResolver` | | Theme | `apps/web/src/theme/antdTheme.ts` (`controlHeight: 36`) | -| RTL + locale + theme | `apps/web/src/App.vue` — `` | +| RTL + locale + theme + StyleProvider | `apps/web/src/App.vue` — `` wrapping `` (mandatory so legacy `main.css` cannot override Ant) | | Legacy kit (do not touch) | `apps/web/src/components/ui/*`, `styles/main.css` utilities | +### Mandatory child-control conversion (same pass) + +هنگام بازنویسی یک صفحه (View)، ایجنت موظف است علاوه بر خود فایل View، تمام کامپوننت‌های فرزندی را که در آن View ایمپورت شده‌اند و حاوی اینپوت/سلکت/دکمه هستند نیز بازبینی کرده و درون آن‌ها را به کامپوننت‌های رسمی `ant-design-vue` تبدیل کند. هیچ تگ ``, `