refactor: store data in field instead of attribute

This commit is contained in:
Methapon2001 2024-12-03 11:22:46 +07:00
parent 127d8c0ebc
commit 105e853f01
6 changed files with 47 additions and 27 deletions

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
const duty = defineModel<boolean>('duty', { required: true }); const duty = defineModel<boolean>('duty', { required: false });
const dutyCost = defineModel<number>('dutyCost', { required: false }); const dutyCost = defineModel<number>('dutyCost', { required: false });
withDefaults( withDefaults(

View file

@ -3,7 +3,7 @@ import { reactive, ref } from 'vue';
import FormGroupHead from './FormGroupHead.vue'; import FormGroupHead from './FormGroupHead.vue';
import FormDuty from './FormDuty.vue'; import FormDuty from './FormDuty.vue';
import FormIssue from './FormIssue.vue'; import FormIssue from './FormIssue.vue';
import FormEmployee from './FormEmployee.vue'; import FormResponsibleUser from './FormResponsibleUser.vue';
import { UndoButton, SaveButton, EditButton } from 'src/components/button'; import { UndoButton, SaveButton, EditButton } from 'src/components/button';
import { AttributesForm, Step } from 'src/stores/request-list/types'; import { AttributesForm, Step } from 'src/stores/request-list/types';
@ -25,8 +25,8 @@ const defaultForm = {
customerDutyCost: 30, customerDutyCost: 30,
companyDuty: false, companyDuty: false,
companyDutyCost: 30, companyDutyCost: 30,
localEmployee: true, responsibleUserLocal: true,
employeeId: '', responsibleUserId: '',
individualDuty: false, individualDuty: false,
individualDutyCost: 10, individualDutyCost: 10,
}; };
@ -37,8 +37,8 @@ const attributesForm = defineModel<AttributesForm>('attributesForm', {
customerDutyCost: 30, customerDutyCost: 30,
companyDuty: false, companyDuty: false,
companyDutyCost: 30, companyDutyCost: 30,
localEmployee: true, responsibleUserLocal: true,
employeeId: '', responsibleUserId: '',
individualDuty: false, individualDuty: false,
individualDutyCost: 10, individualDutyCost: 10,
}, },
@ -55,7 +55,8 @@ function triggerUndo() {
async function triggerSubmit() { async function triggerSubmit() {
const payload = { const payload = {
...props.step, ...props.step,
attributes: { form: formData.value }, ...formData.value,
attributes: {},
}; };
const res = await requestListStore.editStatusRequestWork(payload); const res = await requestListStore.editStatusRequestWork(payload);
@ -150,11 +151,11 @@ function assignToForm() {
$t('general.select', { msg: $t('requestList.employeeMessenger') }) $t('general.select', { msg: $t('requestList.employeeMessenger') })
}} }}
</FormGroupHead> </FormGroupHead>
<FormEmployee <FormResponsibleUser
:readonly="!state.isEdit" :readonly="!state.isEdit"
class="surface-1" class="surface-1"
v-model:local-employee="formData.localEmployee" v-model:responsible-user-local="formData.responsibleUserLocal"
v-model:employee-id="formData.employeeId" v-model:responsible-user-id="formData.responsibleUserId"
:district-id="responsibleAreaDistrictId" :district-id="responsibleAreaDistrictId"
/> />
</section> </section>

View file

@ -2,8 +2,12 @@
import SelectUser from 'src/components/shared/select/SelectUser.vue'; import SelectUser from 'src/components/shared/select/SelectUser.vue';
import { watch } from 'vue'; import { watch } from 'vue';
const localEmployee = defineModel<boolean>('localEmployee', { required: true }); const responsibleUserLocal = defineModel<boolean>('responsibleUserLocal', {
const employeeId = defineModel<string>('employeeId', { required: false }); required: false,
});
const responsibleUserId = defineModel<string>('responsibleUserId', {
required: false,
});
defineProps<{ defineProps<{
readonly?: boolean; readonly?: boolean;
@ -11,22 +15,22 @@ defineProps<{
cost?: boolean; cost?: boolean;
}>(); }>();
watch(localEmployee, (lhs, rhs) => { watch(responsibleUserLocal, (lhs, rhs) => {
if (lhs && !rhs) employeeId.value = ''; if (lhs && !rhs) responsibleUserId.value = '';
}); });
</script> </script>
<template> <template>
<div class="row items-center q-px-md q-py-xs"> <div class="row items-center q-px-md q-py-xs">
<div class="col-12 row"> <div class="col-12 row">
<q-radio <q-radio
v-model="localEmployee" v-model="responsibleUserLocal"
:val="true" :val="true"
:label="$t('requestList.localEmployee')" :label="$t('requestList.localEmployee')"
:disable="readonly" :disable="readonly"
class="col" class="col"
/> />
<q-radio <q-radio
v-model="localEmployee" v-model="responsibleUserLocal"
:val="false" :val="false"
:label="$t('requestList.nonLocalEmployee')" :label="$t('requestList.nonLocalEmployee')"
:disable="readonly" :disable="readonly"
@ -38,12 +42,12 @@ watch(localEmployee, (lhs, rhs) => {
<div class="col-12 row"> <div class="col-12 row">
<SelectUser <SelectUser
:key="localEmployee.toString()" :key="responsibleUserLocal.toString()"
class="col-md-5 col-12" class="col-md-5 col-12"
v-model:value="employeeId" v-model:value="responsibleUserId"
:params="{ :params="{
userType: 'MESSENGER', userType: 'MESSENGER',
responsibleDistrictId: localEmployee ? districtId : undefined, responsibleDistrictId: responsibleUserLocal ? districtId : undefined,
}" }"
:readonly :readonly
:label="$t('general.select', { msg: $t('personnel.MESSENGER') })" :label="$t('general.select', { msg: $t('personnel.MESSENGER') })"

View file

@ -722,8 +722,7 @@ function isInstallmentPaySuccess(installmentNo: number) {
}" }"
:id="value.id" :id="value.id"
:attributes-form=" :attributes-form="
value.stepStatus?.[pageState.currentStep - 1]?.attributes value.stepStatus?.[pageState.currentStep - 1]
?.form
" "
:responsible-area-district-id=" :responsible-area-district-id="
data.quotation.customerBranch.districtId data.quotation.customerBranch.districtId

View file

@ -240,8 +240,16 @@ export const useRequestList = defineStore('request-list', () => {
const res = await api.put<Step>( const res = await api.put<Step>(
`/request-work/${body.requestWorkId}/step-status/${body.step}`, `/request-work/${body.requestWorkId}/step-status/${body.step}`,
{ {
customerDuty: body.customerDuty,
customerDutyCost: body.customerDutyCost,
companyDuty: body.customerDuty,
companyDutyCost: body.companyDutyCost,
individualDuty: body.individualDuty,
individualDutyCost: body.individualDutyCost,
responsibleUserLocal: body.responsibleUserLocal,
responsibleUserId: body.responsibleUserId,
attributes: body.attributes, attributes: body.attributes,
requestWorkStatus: body.workStatus, workStatus: body.workStatus,
requestWorkId: undefined, requestWorkId: undefined,
step: undefined, step: undefined,
}, },

View file

@ -72,14 +72,14 @@ export type Attributes = {
}; };
export type AttributesForm = { export type AttributesForm = {
customerDuty: boolean; customerDuty?: boolean;
customerDutyCost?: number; customerDutyCost?: number;
companyDuty: boolean; companyDuty?: boolean;
companyDutyCost?: number; companyDutyCost?: number;
localEmployee: boolean; individualDuty?: boolean;
employeeId?: string;
individualDuty: boolean;
individualDutyCost?: number; individualDutyCost?: number;
responsibleUserLocal?: boolean;
responsibleUserId?: string;
}; };
export type Step = { export type Step = {
@ -87,4 +87,12 @@ export type Step = {
requestWorkId: string; requestWorkId: string;
workStatus?: RequestWorkStatus; workStatus?: RequestWorkStatus;
step: number; step: number;
customerDuty?: boolean;
customerDutyCost?: number;
companyDuty?: boolean;
companyDutyCost?: number;
individualDuty?: boolean;
individualDutyCost?: number;
responsibleUserLocal?: boolean;
responsibleUserId?: string;
}; };