From fa61a76444a0c3ee9af8785c19f14c614a7c2bcb Mon Sep 17 00:00:00 2001 From: "s.esmaeili" Date: Fri, 23 Oct 2026 21:06:15 +0330 Subject: [PATCH] feat: complete UI/UX improvements, vuesax icons, media server, and section management --- .gitignore | 6 + apps/admin/src/api/types.ts | 7 + apps/admin/src/components/AdminPage.vue | 27 + apps/admin/src/components/IconSelect.vue | 20 +- apps/admin/src/components/PageHeader.vue | 39 +- apps/admin/src/components/VuesaxIcon.vue | 13 +- apps/admin/src/components/icons.ts | 106 +- apps/admin/src/layouts/AdminLayout.vue | 577 ++++++++-- apps/admin/src/pages/CategoriesPage.vue | 133 ++- apps/admin/src/pages/CategoryEditPage.vue | 79 +- apps/admin/src/pages/DashboardPage.vue | 326 +++++- apps/admin/src/pages/LoginPage.vue | 25 +- apps/admin/src/pages/MediaPage.vue | 131 ++- apps/admin/src/pages/MessagesPage.vue | 178 ++- apps/admin/src/pages/ProductEditPage.vue | 194 +++- apps/admin/src/pages/ProductsPage.vue | 428 ++++++- apps/admin/src/pages/ProfilePage.vue | 37 +- apps/admin/src/pages/SectionEditPage.vue | 106 +- apps/admin/src/pages/SectionsPage.vue | 154 ++- apps/admin/src/pages/UsersPage.vue | 155 ++- apps/admin/src/style.css | 69 ++ apps/api/package.json | 2 +- apps/api/src/catalog/catalog.module.ts | 4 +- apps/api/src/contact/contact.module.ts | 3 +- apps/api/src/dashboard/dashboard.module.ts | 90 +- apps/api/src/media/media.controller.ts | 3 +- apps/api/src/media/s3-storage.ts | 34 +- apps/api/src/sections/sections.module.ts | 79 ++ apps/api/src/seed/create-admin.ts | 46 + apps/api/src/seed/data/sections.ts | 11 + apps/api/src/seed/seed.ts | 98 +- apps/web/app/assets/css/main.css | 29 + apps/web/app/components/layout/BackToTop.vue | 4 +- apps/web/app/components/layout/Footer.vue | 61 +- apps/web/app/components/layout/Header.vue | 40 +- apps/web/app/components/layout/Preloader.vue | 4 +- apps/web/app/components/sections/Contact.vue | 29 +- apps/web/app/components/sections/Hero.vue | 122 +- .../app/components/sections/Industries.vue | 4 +- apps/web/app/components/sections/Products.vue | 186 ++- apps/web/app/components/sections/Services.vue | 4 +- .../web/app/components/sections/Standards.vue | 6 +- apps/web/app/components/sections/Stats.vue | 8 +- .../app/components/sections/TapeMarquee.vue | 14 +- .../app/components/sections/Testimonials.vue | 4 +- apps/web/app/components/ui/DynamicIcon.vue | 109 +- .../app/components/ui/ImagePlaceholder.vue | 4 +- apps/web/app/components/ui/SectionHead.vue | 4 +- apps/web/app/components/ui/VuesaxIcon.vue | 57 + apps/web/app/error.vue | 4 +- apps/web/app/icons/vuesax-linear.json | 1025 +++++++++++++++++ apps/web/app/layouts/default.vue | 3 +- apps/web/app/pages/categories/[slug].vue | 8 +- apps/web/app/pages/index.vue | 32 +- apps/web/app/pages/products/[slug].vue | 40 +- apps/web/nuxt.config.ts | 6 +- docker-compose.dev.yml | 4 +- logo.png | Bin 0 -> 285305 bytes package.json | 3 +- packages/shared/src/admin.ts | 16 + packages/shared/src/common.ts | 2 +- packages/shared/src/icons.ts | 204 +++- packages/shared/src/sections.ts | 11 + scripts/media-server.mjs | 119 ++ 64 files changed, 4527 insertions(+), 819 deletions(-) create mode 100644 apps/api/src/seed/create-admin.ts create mode 100644 apps/web/app/components/ui/VuesaxIcon.vue create mode 100644 apps/web/app/icons/vuesax-linear.json create mode 100644 logo.png create mode 100644 scripts/media-server.mjs diff --git a/.gitignore b/.gitignore index a6668a4..62eae01 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,9 @@ pnpm-debug.log* # database dumps from the backup service backups/ + +# local s3 mock storage +.s3data/ +**/.s3data/ +*.jpg +icons (1).json diff --git a/apps/admin/src/api/types.ts b/apps/admin/src/api/types.ts index c6d94ea..a2e854e 100644 --- a/apps/admin/src/api/types.ts +++ b/apps/admin/src/api/types.ts @@ -75,3 +75,10 @@ export interface SectionResponse { data: SiteSections[K]; updatedAt: string; } + +export interface AdminSectionSummary { + key: SectionKey; + updatedAt: string | null; + enabled: boolean; +} + diff --git a/apps/admin/src/components/AdminPage.vue b/apps/admin/src/components/AdminPage.vue index 3e3d566..1d17c3d 100644 --- a/apps/admin/src/components/AdminPage.vue +++ b/apps/admin/src/components/AdminPage.vue @@ -46,4 +46,31 @@ defineProps<{ lockBody?: boolean }>(); flex-direction: column; overflow: hidden; } + +@media (max-width: 1023px) { + .ap { + height: auto; + min-height: 100%; + overflow: visible; + } + + .ap__head { + position: sticky; + top: 52px; + z-index: 20; + padding: 10px 12px; + background: #ffffff; + box-shadow: 0 1px 3px rgba(15, 23, 42, 0.03); + } + + .ap__body { + padding: 12px; + overflow: visible; + } + + .ap__body--locked { + overflow: visible; + height: auto; + } +} diff --git a/apps/admin/src/components/IconSelect.vue b/apps/admin/src/components/IconSelect.vue index 2ae45da..94c0212 100644 --- a/apps/admin/src/components/IconSelect.vue +++ b/apps/admin/src/components/IconSelect.vue @@ -1,20 +1,18 @@