refactor:handle mode info or edit

This commit is contained in:
Thanaphon Frappet 2024-10-10 13:31:46 +07:00
parent 659f78211e
commit a066b2c843
4 changed files with 46 additions and 10 deletions

View file

@ -16,6 +16,7 @@ import { useConfigStore } from 'stores/config';
import { Product, Service, Work } from 'src/stores/product-service/types'; import { Product, Service, Work } from 'src/stores/product-service/types';
defineProps<{ defineProps<{
readonly?: boolean;
agentPrice: boolean; agentPrice: boolean;
employeeRows?: { employeeRows?: {
foreignRefNo: string; foreignRefNo: string;
@ -365,7 +366,10 @@ watch(
{{ formatNumberDecimal(calcPrice(props.row), 2) }} {{ formatNumberDecimal(calcPrice(props.row), 2) }}
</q-td> </q-td>
<q-td> <q-td>
<div class="row items-center full-width justify-end no-wrap"> <div
class="row items-center full-width justify-end no-wrap"
v-if="!readonly"
>
<q-btn <q-btn
@click.stop="openEmployeeTable(item.title, props.rowIndex)" @click.stop="openEmployeeTable(item.title, props.rowIndex)"
dense dense

View file

@ -8,6 +8,7 @@ defineEmits<{
withDefaults( withDefaults(
defineProps<{ defineProps<{
readonly?: boolean;
employeeAmount?: number; employeeAmount?: number;
fallbackImg?: string; fallbackImg?: string;
hideQuantity?: boolean; hideQuantity?: boolean;
@ -88,6 +89,7 @@ const columns = [
bordered bordered
button-delete button-delete
img-column="employeeName" img-column="employeeName"
:readonly="readonly"
:inTable :inTable
:columns :columns
:rows :rows

View file

@ -5,6 +5,7 @@ import DeleteButton from './button/DeleteButton.vue';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
readonly?: boolean;
rows: QTableProps['rows']; rows: QTableProps['rows'];
columns: QTableProps['columns']; columns: QTableProps['columns'];
flat?: boolean; flat?: boolean;
@ -91,7 +92,10 @@ defineEmits<{
<template v-slot:body-cell-action="props"> <template v-slot:body-cell-action="props">
<q-td> <q-td>
<div class="row items-center full-width justify-end no-wrap"> <div
class="row items-center full-width justify-end no-wrap"
v-if="!readonly"
>
<slot name="button" :props="props"></slot> <slot name="button" :props="props"></slot>
<DeleteButton <DeleteButton
iconOnly iconOnly

View file

@ -50,7 +50,7 @@ import ToggleButton from 'components/button/ToggleButton.vue';
import FormAbout from 'components/05_quotation/FormAbout.vue'; import FormAbout from 'components/05_quotation/FormAbout.vue';
import SelectZone from 'components/shared/SelectZone.vue'; import SelectZone from 'components/shared/SelectZone.vue';
import PersonCard from 'components/shared/PersonCard.vue'; import PersonCard from 'components/shared/PersonCard.vue';
import { AddButton, SaveButton } from 'components/button'; import { AddButton, SaveButton, EditButton } from 'components/button';
import ProductServiceForm from './ProductServiceForm.vue'; import ProductServiceForm from './ProductServiceForm.vue';
import QuotationFormInfo from './QuotationFormInfo.vue'; import QuotationFormInfo from './QuotationFormInfo.vue';
import ProfileBanner from 'components/ProfileBanner.vue'; import ProfileBanner from 'components/ProfileBanner.vue';
@ -113,6 +113,13 @@ const currentQuotationId = ref<string | undefined>(undefined);
const date = ref(); const date = ref();
const preSelectedWorker = ref<Employee[]>([]); const preSelectedWorker = ref<Employee[]>([]);
const readonly = computed(() => {
return !(
quotationFormState.value.mode === 'create' ||
quotationFormState.value.mode === 'edit'
);
});
const selectedWorker = ref< const selectedWorker = ref<
(Employee & { (Employee & {
attachment?: { attachment?: {
@ -367,7 +374,6 @@ async function assignWorkerToSelectedWorker() {
); );
if (retEmp) { if (retEmp) {
workerList.value = retEmp.data.result; workerList.value = retEmp.data.result;
console.log(retEmp.data.result);
quotationFormData.value.worker.forEach((value) => { quotationFormData.value.worker.forEach((value) => {
const tempValue: Employee | undefined = retEmp.data.result.find( const tempValue: Employee | undefined = retEmp.data.result.find(
(v) => v.id === value.id, (v) => v.id === value.id,
@ -562,6 +568,7 @@ watch(
input-only input-only
v-model:branch-id="branchId" v-model:branch-id="branchId"
v-model:customer-branch-id="quotationFormData.customerBranchId" v-model:customer-branch-id="quotationFormData.customerBranchId"
:readonly="readonly"
@add-customer="triggerSelectTypeCustomerd()" @add-customer="triggerSelectTypeCustomerd()"
/> />
</header> </header>
@ -601,15 +608,18 @@ watch(
> >
{{ $t('quotation.employeeList') }} {{ $t('quotation.employeeList') }}
</span> </span>
<ToggleButton class="q-mr-sm" v-model="toggleWorker" /> <template v-if="!readonly">
{{ <ToggleButton class="q-mr-sm" v-model="toggleWorker" />
toggleWorker {{
? $t('general.specify') toggleWorker
: $t('general.noSpecify') ? $t('general.specify')
}} : $t('general.noSpecify')
}}
</template>
</div> </div>
<nav class="q-ml-auto"> <nav class="q-ml-auto">
<AddButton <AddButton
v-if="!readonly"
icon-only icon-only
@click.stop="triggerSelectEmployeeDialog" @click.stop="triggerSelectEmployeeDialog"
/> />
@ -620,6 +630,7 @@ watch(
<div class="surface-1 q-pa-md full-width"> <div class="surface-1 q-pa-md full-width">
<WorkerItem <WorkerItem
:employee-amount="selectedWorker.length" :employee-amount="selectedWorker.length"
:readonly="readonly"
fallback-img="/images/employee-avatar.png" fallback-img="/images/employee-avatar.png"
:rows=" :rows="
selectedWorker.map((e: Employee) => ({ selectedWorker.map((e: Employee) => ({
@ -662,6 +673,7 @@ watch(
</div> </div>
<nav class="q-ml-auto"> <nav class="q-ml-auto">
<AddButton <AddButton
v-if="!readonly"
icon-only icon-only
class="q-ml-auto" class="q-ml-auto"
@click.stop="triggerProductServiceDialog" @click.stop="triggerProductServiceDialog"
@ -682,6 +694,7 @@ watch(
</span> </span>
<ProductItem <ProductItem
:readonly="readonly"
:agent-price="agentPrice" :agent-price="agentPrice"
:employeeRows=" :employeeRows="
selectedWorker.map((e: Employee) => ({ selectedWorker.map((e: Employee) => ({
@ -786,6 +799,10 @@ watch(
{{ $t('general.view', { msg: $t('general.example') }) }} {{ $t('general.view', { msg: $t('general.example') }) }}
</q-btn> </q-btn>
<SaveButton <SaveButton
v-if="
quotationFormState.mode === 'create' ||
quotationFormState.mode === 'edit'
"
@click=" @click="
() => { () => {
convertDataToFormSubmit(); convertDataToFormSubmit();
@ -793,6 +810,15 @@ watch(
" "
solid solid
/> />
<EditButton
v-else
@click="
() => {
quotationFormState.mode = 'edit';
}
"
solid
/>
</div> </div>
</footer> </footer>