8713-testToMaster #1539
|
@ -121,6 +121,53 @@ async function handleSave() {
|
||||||
isSaving.value = false;
|
isSaving.value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function validateFields(item, isUpdate = false) {
|
||||||
|
// Only validate fields that are being updated
|
||||||
|
const shouldValidate = (field) => !isUpdate || field in item;
|
||||||
|
|
||||||
|
if (shouldValidate('ticketServiceTypeFk') && !item.ticketServiceTypeFk) {
|
||||||
|
notify('Descriptssion is required', 'negative');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldValidate('quantity') && (!item.quantity || item.quantity <= 0)) {
|
||||||
|
notify('Quantity must be greater than 0', 'negative');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldValidate('price') && (item.price === null || item.price < 0)) {
|
||||||
|
notify('Price must be valid', 'negative');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function beforeSave(data) {
|
||||||
|
const { creates = [], updates = [] } = data;
|
||||||
|
const validData = { creates: [], updates: [] };
|
||||||
|
|
||||||
|
// Validate creates
|
||||||
|
if (creates.length) {
|
||||||
|
for (const create of creates) {
|
||||||
|
if (validateFields(create)) {
|
||||||
|
validData.creates.push(create);
|
||||||
|
}
|
||||||
|
create.ticketFk = route.params.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate updates
|
||||||
|
if (updates.length) {
|
||||||
|
for (const update of updates) {
|
||||||
|
if (validateFields(update, true)) {
|
||||||
|
validData.updates.push(update);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return validData;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -141,6 +188,7 @@ async function handleSave() {
|
||||||
v-model:selected="selected"
|
v-model:selected="selected"
|
||||||
:order="['description ASC']"
|
:order="['description ASC']"
|
||||||
:default-remove="false"
|
:default-remove="false"
|
||||||
|
:beforeSaveFn="beforeSave"
|
||||||
>
|
>
|
||||||
<template #moreBeforeActions>
|
<template #moreBeforeActions>
|
||||||
<QBtn
|
<QBtn
|
||||||
|
@ -170,6 +218,7 @@ async function handleSave() {
|
||||||
option-value="id"
|
option-value="id"
|
||||||
hide-selected
|
hide-selected
|
||||||
sort-by="name ASC"
|
sort-by="name ASC"
|
||||||
|
:required="true"
|
||||||
>
|
>
|
||||||
<template #form>
|
<template #form>
|
||||||
<TicketCreateServiceType
|
<TicketCreateServiceType
|
||||||
|
@ -185,6 +234,7 @@ async function handleSave() {
|
||||||
:label="col.label"
|
:label="col.label"
|
||||||
v-model.number="row.quantity"
|
v-model.number="row.quantity"
|
||||||
type="number"
|
type="number"
|
||||||
|
:required="true"
|
||||||
min="0"
|
min="0"
|
||||||
:info="t('service.quantityInfo')"
|
:info="t('service.quantityInfo')"
|
||||||
/>
|
/>
|
||||||
|
@ -196,6 +246,7 @@ async function handleSave() {
|
||||||
:label="col.label"
|
:label="col.label"
|
||||||
v-model.number="row.price"
|
v-model.number="row.price"
|
||||||
type="number"
|
type="number"
|
||||||
|
:required="true"
|
||||||
min="0"
|
min="0"
|
||||||
@keyup.enter="handleSave"
|
@keyup.enter="handleSave"
|
||||||
/>
|
/>
|
||||||
|
|
Loading…
Reference in New Issue