From 43f0524ae2a2bf8a6f2719fb359ef4c371ffbfa2 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Mon, 25 May 2026 17:50:33 +0330 Subject: [PATCH] Add business services management in admin edit form --- src/api/business-services.ts | 48 +++++ .../admin/BusinessServicesSection.vue | 174 ++++++++++++++++++ src/views/BusinessesView.vue | 7 + 3 files changed, 229 insertions(+) create mode 100644 src/api/business-services.ts create mode 100644 src/components/admin/BusinessServicesSection.vue diff --git a/src/api/business-services.ts b/src/api/business-services.ts new file mode 100644 index 0000000..2f924a5 --- /dev/null +++ b/src/api/business-services.ts @@ -0,0 +1,48 @@ +import { api } from './client'; + +export type BusinessService = { + id: string; + businessId: string; + serviceTemplateId: string; + price: string; + durationMinutes: number | null; + isActive: boolean; + serviceTemplate?: { + id: string; + title: string; + description: string | null; + defaultDurationMinutes: number; + }; +}; + +export function fetchBusinessServices(businessId: string) { + const search = new URLSearchParams({ businessId }); + return api(`/business-services?${search}`); +} + +export function createBusinessService(payload: { + businessId: string; + serviceTemplateId: string; + price: number; + durationMinutes?: number | null; + isActive?: boolean; +}) { + return api('/business-services', { + method: 'POST', + body: JSON.stringify(payload), + }); +} + +export function updateBusinessService( + id: string, + payload: { price?: number; durationMinutes?: number | null; isActive?: boolean }, +) { + return api(`/business-services/${id}`, { + method: 'PATCH', + body: JSON.stringify(payload), + }); +} + +export function deleteBusinessService(id: string) { + return api<{ success: true }>(`/business-services/${id}`, { method: 'DELETE' }); +} diff --git a/src/components/admin/BusinessServicesSection.vue b/src/components/admin/BusinessServicesSection.vue new file mode 100644 index 0000000..35c8314 --- /dev/null +++ b/src/components/admin/BusinessServicesSection.vue @@ -0,0 +1,174 @@ + + + diff --git a/src/views/BusinessesView.vue b/src/views/BusinessesView.vue index ac5dd76..c0fedb3 100644 --- a/src/views/BusinessesView.vue +++ b/src/views/BusinessesView.vue @@ -102,6 +102,12 @@ @remove-existing="onRemoveImage" /> + + ذخیره @@ -189,6 +195,7 @@ import { fetchUsers, fetchUser } from '@/api/users'; import type { Business, BusinessCategory, User } from '@/api/types'; import { ApiError } from '@/api/client'; import BusinessImageUpload from '@/components/admin/BusinessImageUpload.vue'; +import BusinessServicesSection from '@/components/admin/BusinessServicesSection.vue'; import BusinessListCard from '@/components/admin/BusinessListCard.vue'; import AppBadge from '@/components/ui/AppBadge.vue'; import AppButton from '@/components/ui/AppButton.vue';