From 887eb2589ddc3c2d82a74fcbea5f8801c3253440 Mon Sep 17 00:00:00 2001 From: madresebanoo Date: Wed, 2 Sep 2026 15:03:15 +0430 Subject: [PATCH] feat(services): add Service Types management UI Admin CRUD page for service types, plus wiring the student "request service" form's category select to the real list instead of a hardcoded pair of options. --- src/features/admin/router.js | 11 ++ .../services/components/ServiceTypeItem.vue | 86 +++++++++++ .../modals/ServiceTypeFormModal.vue | 138 ++++++++++++++++++ src/features/admin/services/index.js | 2 + .../admin/services/pages/ServiceTypesPage.vue | 109 ++++++++++++++ .../admin/services/schema/service-type.js | 6 + .../services/components/CreateServiceForm.vue | 11 +- src/layouts/AdminLayout.vue | 15 +- src/services/api/endpoints.js | 8 + src/services/api/service-types.js | 12 ++ src/services/query/service-types.js | 29 ++++ 11 files changed, 420 insertions(+), 7 deletions(-) create mode 100644 src/features/admin/services/components/ServiceTypeItem.vue create mode 100644 src/features/admin/services/components/modals/ServiceTypeFormModal.vue create mode 100644 src/features/admin/services/pages/ServiceTypesPage.vue create mode 100644 src/features/admin/services/schema/service-type.js create mode 100644 src/services/api/service-types.js create mode 100644 src/services/query/service-types.js diff --git a/src/features/admin/router.js b/src/features/admin/router.js index 3d5287a..49560c5 100644 --- a/src/features/admin/router.js +++ b/src/features/admin/router.js @@ -241,6 +241,17 @@ export default [ subtitle: 'لیست خدمات را مشاهده و مدیریت نمایید.', }, }, + { + path: '/service-types', + name: 'admin-service-types', + component: () => import('@/features/admin/services/pages/ServiceTypesPage.vue'), + meta: { + layout: 'admin', + role: 'admin', + title: 'مرکز خدمات', + subtitle: 'انواع خدمات قابل درخواست توسط کاربران را مدیریت کنید.', + }, + }, { path: '/consultations', name: 'admin-consultations', diff --git a/src/features/admin/services/components/ServiceTypeItem.vue b/src/features/admin/services/components/ServiceTypeItem.vue new file mode 100644 index 0000000..53e5743 --- /dev/null +++ b/src/features/admin/services/components/ServiceTypeItem.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/features/admin/services/components/modals/ServiceTypeFormModal.vue b/src/features/admin/services/components/modals/ServiceTypeFormModal.vue new file mode 100644 index 0000000..4a8c387 --- /dev/null +++ b/src/features/admin/services/components/modals/ServiceTypeFormModal.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/src/features/admin/services/index.js b/src/features/admin/services/index.js index fecd2b0..7e1a16d 100644 --- a/src/features/admin/services/index.js +++ b/src/features/admin/services/index.js @@ -1,4 +1,6 @@ export { default as SendMessageModal } from './components/modals/SendMessageModal.vue' export { default as ServiceDetailsModal } from './components/modals/ServiceDetailsModal.vue' +export { default as ServiceTypeFormModal } from './components/modals/ServiceTypeFormModal.vue' export { default as ServiceItem } from './components/ServiceItem.vue' +export { default as ServiceTypeItem } from './components/ServiceTypeItem.vue' export { default as ServicesFilters } from './components/ServicesFilters.vue' diff --git a/src/features/admin/services/pages/ServiceTypesPage.vue b/src/features/admin/services/pages/ServiceTypesPage.vue new file mode 100644 index 0000000..f4a5b89 --- /dev/null +++ b/src/features/admin/services/pages/ServiceTypesPage.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/features/admin/services/schema/service-type.js b/src/features/admin/services/schema/service-type.js new file mode 100644 index 0000000..6423d46 --- /dev/null +++ b/src/features/admin/services/schema/service-type.js @@ -0,0 +1,6 @@ +import { object, string } from 'yup' + +export const serviceTypeSchema = object().shape({ + title: string().trim().required('عنوان نوع خدمت را وارد کنید').max(255, 'عنوان طولانی است'), + description: string().trim().nullable().notRequired().max(2000, 'توضیحات طولانی است'), +}) diff --git a/src/features/student/services/components/CreateServiceForm.vue b/src/features/student/services/components/CreateServiceForm.vue index bbbf41c..58f427b 100644 --- a/src/features/student/services/components/CreateServiceForm.vue +++ b/src/features/student/services/components/CreateServiceForm.vue @@ -67,8 +67,8 @@