Add time rezerv

This commit is contained in:
2026-05-25 19:13:28 +03:30
parent 0b2defd50c
commit 27b73c981a
12 changed files with 803 additions and 45 deletions
+25 -14
View File
@@ -64,6 +64,11 @@
<AppButton type="submit" :loading="saving">ذخیره تغییرات</AppButton>
</form>
<BusinessAvailabilityEditor
v-if="business"
:business-id="business.id"
/>
<section class="space-y-4 border-t border-border pt-6">
<h2 class="text-base font-semibold text-text">خدمات و قیمت‌ها</h2>
<p class="text-xs text-muted">
@@ -222,10 +227,16 @@ import {
import { fetchServiceTemplates } from '@/api/service-templates';
import type { Business, BusinessService } from '@/api/types';
import { ApiError } from '@/api/client';
import BusinessAvailabilityEditor from '@/components/owner/BusinessAvailabilityEditor.vue';
import AppButton from '@/components/ui/AppButton.vue';
import AppInput from '@/components/ui/AppInput.vue';
import WebAppLayout from '@/layouts/WebAppLayout.vue';
import { formatDuration, formatPriceToman } from '@/utils/format';
import {
formatDuration,
formatPriceToman,
parseOptionalMinutes,
parsePriceInput,
} from '@/utils/format';
const business = ref<Business | null>(null);
const services = ref<BusinessService[]>([]);
@@ -324,25 +335,22 @@ async function onSave() {
}
}
function parsePrice(value: string): number | null {
const n = Number.parseFloat(value.replace(/,/g, ''));
if (!Number.isFinite(n) || n < 0) return null;
return n;
}
async function onAddService() {
if (!business.value || !serviceForm.value.serviceTemplateId) return;
const price = parsePrice(serviceForm.value.price);
const price = parsePriceInput(serviceForm.value.price);
if (price === null) {
error.value = 'قیمت معتبر نیست.';
return;
}
const duration = parseOptionalMinutes(serviceForm.value.durationMinutes);
if (duration === null) {
error.value = 'مدت زمان معتبر نیست.';
return;
}
addingService.value = true;
error.value = '';
message.value = '';
try {
const durationRaw = serviceForm.value.durationMinutes.trim();
const duration = durationRaw ? Number.parseInt(durationRaw, 10) : undefined;
await createBusinessService({
businessId: business.value.id,
serviceTemplateId: serviceForm.value.serviceTemplateId,
@@ -375,19 +383,22 @@ function cancelEdit() {
}
async function onSaveEdit(svc: BusinessService) {
const price = parsePrice(editForm.value.price);
const price = parsePriceInput(editForm.value.price);
if (price === null) {
error.value = 'قیمت معتبر نیست.';
return;
}
const duration = parseOptionalMinutes(editForm.value.durationMinutes);
if (duration === null) {
error.value = 'مدت زمان معتبر نیست.';
return;
}
savingService.value = true;
error.value = '';
try {
const durationRaw = editForm.value.durationMinutes.trim();
const duration = durationRaw ? Number.parseInt(durationRaw, 10) : null;
await updateBusinessService(svc.id, {
price,
durationMinutes: duration && duration > 0 ? duration : null,
durationMinutes: duration ?? null,
});
editingId.value = null;
await loadServicesAndTemplates();