Add time rezerv
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user