fix: form
This commit is contained in:
parent
dbd9fabcba
commit
1c22c4ce3b
5 changed files with 50 additions and 64 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref } from 'vue';
|
import { onMounted, ref, watch, reactive } from 'vue';
|
||||||
import useAddressStore, {
|
import useAddressStore, {
|
||||||
District,
|
District,
|
||||||
Province,
|
Province,
|
||||||
|
|
@ -22,60 +22,44 @@ const addressEN = defineModel('addressEN', { default: '' });
|
||||||
const provinceId = defineModel<string | null | undefined>('provinceId');
|
const provinceId = defineModel<string | null | undefined>('provinceId');
|
||||||
const districtId = defineModel<string | null | undefined>('districtId');
|
const districtId = defineModel<string | null | undefined>('districtId');
|
||||||
const subDistrictId = defineModel<string | null | undefined>('subDistrictId');
|
const subDistrictId = defineModel<string | null | undefined>('subDistrictId');
|
||||||
const zipCode = defineModel<string>('zipCode', { default: '' });
|
const zipCode = defineModel<string | null | undefined>('zipCode');
|
||||||
|
const isOpen = defineModel<boolean>('isOpen', { default: false });
|
||||||
|
|
||||||
const addrOptions = ref<{
|
const addrOptions = reactive<{
|
||||||
provinceOps?: Province[];
|
provinceOps: Province[];
|
||||||
districtOps?: District[];
|
districtOps: District[];
|
||||||
subDistrictOps?: SubDistrict[];
|
subDistrictOps: SubDistrict[];
|
||||||
}>({});
|
}>({
|
||||||
|
provinceOps: [],
|
||||||
|
districtOps: [],
|
||||||
|
subDistrictOps: [],
|
||||||
|
});
|
||||||
|
|
||||||
async function fetchProvince() {
|
async function fetchProvince() {
|
||||||
const result = await adrressStore.fetchProvince();
|
const result = await adrressStore.fetchProvince();
|
||||||
if (result) {
|
|
||||||
addrOptions.value.provinceOps = result;
|
if (result) addrOptions.provinceOps = result;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchDistrict(id: string | undefined) {
|
async function fetchDistrict() {
|
||||||
if (id) {
|
if (!provinceId.value) return;
|
||||||
const result = await adrressStore.fetchDistrictByProvinceId(id);
|
|
||||||
if (result) {
|
const result = await adrressStore.fetchDistrictByProvinceId(provinceId.value);
|
||||||
addrOptions.value.districtOps = result;
|
if (result) addrOptions.districtOps = result;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchSubDistrict(id: string | undefined) {
|
async function fetchSubDistrict() {
|
||||||
if (id) {
|
if (!districtId.value) return;
|
||||||
const result = await adrressStore.fetchSubDistrictByProvinceId(id);
|
const result = await adrressStore.fetchSubDistrictByProvinceId(
|
||||||
if (result) {
|
districtId.value,
|
||||||
addrOptions.value.subDistrictOps = result;
|
);
|
||||||
}
|
if (result) addrOptions.subDistrictOps = result;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function selectProvince(id: string) {
|
|
||||||
if (!id) return;
|
|
||||||
districtId.value = undefined;
|
|
||||||
subDistrictId.value = undefined;
|
|
||||||
addrOptions.value.districtOps = [];
|
|
||||||
addrOptions.value.subDistrictOps = [];
|
|
||||||
zipCode.value = '';
|
|
||||||
await fetchDistrict(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function selectDistrict(id: string) {
|
|
||||||
if (!id) return;
|
|
||||||
subDistrictId.value = undefined;
|
|
||||||
zipCode.value = '';
|
|
||||||
await fetchSubDistrict(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function selectSubDistrict(id: string) {
|
async function selectSubDistrict(id: string) {
|
||||||
if (!id) return;
|
if (!id) return;
|
||||||
zipCode.value =
|
zipCode.value =
|
||||||
addrOptions.value.subDistrictOps
|
addrOptions.subDistrictOps
|
||||||
?.filter((x) => x.id === id)
|
?.filter((x) => x.id === id)
|
||||||
.map((x) => x.zipCode)[0] ?? '';
|
.map((x) => x.zipCode)[0] ?? '';
|
||||||
}
|
}
|
||||||
|
|
@ -83,6 +67,10 @@ async function selectSubDistrict(id: string) {
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await fetchProvince();
|
await fetchProvince();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
watch(isOpen, fetchDistrict);
|
||||||
|
watch(provinceId, fetchDistrict);
|
||||||
|
watch(districtId, fetchSubDistrict);
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="col-12 app-text-muted">
|
<div class="col-12 app-text-muted">
|
||||||
|
|
@ -123,12 +111,12 @@ onMounted(async () => {
|
||||||
:label="$t('province')"
|
:label="$t('province')"
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:options="addrOptions.provinceOps"
|
:options="addrOptions.provinceOps"
|
||||||
@update:model-value="(v: string) => selectProvince(v)"
|
|
||||||
lazy-rules
|
lazy-rules
|
||||||
:rules="[
|
:rules="[
|
||||||
(val) =>
|
(val) =>
|
||||||
(val && val.length > 0) || $t('formDialogInputProvinceValidate'),
|
(val && val.length > 0) || $t('formDialogInputProvinceValidate'),
|
||||||
]"
|
]"
|
||||||
|
@update:model-value="districtId = subDistrictId = zipCode = null"
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
:dense="dense"
|
:dense="dense"
|
||||||
|
|
@ -145,12 +133,12 @@ onMounted(async () => {
|
||||||
:label="$t('district')"
|
:label="$t('district')"
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:options="addrOptions.districtOps"
|
:options="addrOptions.districtOps"
|
||||||
@update:model-value="(v: string) => selectDistrict(v)"
|
|
||||||
lazy-rules
|
lazy-rules
|
||||||
:rules="[
|
:rules="[
|
||||||
(val) =>
|
(val) =>
|
||||||
(val && val.length > 0) || $t('formDialogInputDistrictValidate'),
|
(val && val.length > 0) || $t('formDialogInputDistrictValidate'),
|
||||||
]"
|
]"
|
||||||
|
@update:model-value="subDistrictId = zipCode = null"
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
:dense="dense"
|
:dense="dense"
|
||||||
|
|
@ -161,18 +149,22 @@ onMounted(async () => {
|
||||||
emit-value
|
emit-value
|
||||||
map-options
|
map-options
|
||||||
id="select-sub-district"
|
id="select-sub-district"
|
||||||
v-model="subDistrictId"
|
:model-value="
|
||||||
|
addrOptions.subDistrictOps.length === 1
|
||||||
|
? (subDistrictId = addrOptions.subDistrictOps[0].id)
|
||||||
|
: ''
|
||||||
|
"
|
||||||
option-value="id"
|
option-value="id"
|
||||||
option-label="name"
|
option-label="name"
|
||||||
:label="$t('subDistrict')"
|
:label="$t('subDistrict')"
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:options="addrOptions.subDistrictOps"
|
:options="addrOptions.subDistrictOps"
|
||||||
@update:model-value="(v: string) => selectSubDistrict(v)"
|
|
||||||
lazy-rules
|
lazy-rules
|
||||||
:rules="[
|
:rules="[
|
||||||
(val) =>
|
(val) =>
|
||||||
(val && val.length > 0) || $t('formDialogInputSubDistrictValidate'),
|
(val && val.length > 0) || $t('formDialogInputSubDistrictValidate'),
|
||||||
]"
|
]"
|
||||||
|
@update:model-value="(v: string) => selectSubDistrict(v)"
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
:dense="dense"
|
:dense="dense"
|
||||||
|
|
@ -217,7 +209,6 @@ onMounted(async () => {
|
||||||
:label="$t('province')"
|
:label="$t('province')"
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:options="addrOptions.provinceOps"
|
:options="addrOptions.provinceOps"
|
||||||
@update:model-value="(v: string) => selectProvince(v)"
|
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
:dense="dense"
|
:dense="dense"
|
||||||
|
|
@ -233,7 +224,6 @@ onMounted(async () => {
|
||||||
:label="$t('district')"
|
:label="$t('district')"
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:options="addrOptions.districtOps"
|
:options="addrOptions.districtOps"
|
||||||
@update:model-value="(v: string) => selectDistrict(v)"
|
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
:dense="dense"
|
:dense="dense"
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,9 @@ const userType = defineModel<string>('userType');
|
||||||
const registrationNo = defineModel<string | null>('registrationNo');
|
const registrationNo = defineModel<string | null>('registrationNo');
|
||||||
const startDate = defineModel<Date | null>('startDate');
|
const startDate = defineModel<Date | null>('startDate');
|
||||||
const retireDate = defineModel<Date | null>('retireDate');
|
const retireDate = defineModel<Date | null>('retireDate');
|
||||||
const responsibleArea = defineModel<string>('responsibleArea');
|
const responsibleArea = defineModel<string | null | undefined>(
|
||||||
|
'responsibleArea',
|
||||||
|
);
|
||||||
const discountCondition = defineModel<string | null | undefined>(
|
const discountCondition = defineModel<string | null | undefined>(
|
||||||
'discountCondition',
|
'discountCondition',
|
||||||
);
|
);
|
||||||
|
|
@ -137,7 +139,6 @@ defineProps<{
|
||||||
options-dense
|
options-dense
|
||||||
label="พื้นที่ ที่รับผิดชอบในการส่งเอกสาร"
|
label="พื้นที่ ที่รับผิดชอบในการส่งเอกสาร"
|
||||||
class="col-12"
|
class="col-12"
|
||||||
bg-color="white"
|
|
||||||
option-label="label"
|
option-label="label"
|
||||||
option-value="value"
|
option-value="value"
|
||||||
v-model="responsibleArea"
|
v-model="responsibleArea"
|
||||||
|
|
@ -174,7 +175,6 @@ defineProps<{
|
||||||
options-dense
|
options-dense
|
||||||
label="สัญชาติต้นทาง"
|
label="สัญชาติต้นทาง"
|
||||||
class="col-3"
|
class="col-3"
|
||||||
bg-color="white"
|
|
||||||
option-label="label"
|
option-label="label"
|
||||||
option-value="label"
|
option-value="label"
|
||||||
v-model="sourceNationality"
|
v-model="sourceNationality"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ const hqId = defineModel<string | null | undefined>('hqId');
|
||||||
const brId = defineModel<string | null | undefined>('brId');
|
const brId = defineModel<string | null | undefined>('brId');
|
||||||
const userType = defineModel<string>('userType');
|
const userType = defineModel<string>('userType');
|
||||||
const userRole = defineModel<string>('userRole');
|
const userRole = defineModel<string>('userRole');
|
||||||
const userName = defineModel<string | null | undefined>('userName');
|
const username = defineModel<string | null | undefined>('username');
|
||||||
const userCode = defineModel<string>('userCode');
|
const userCode = defineModel<string>('userCode');
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
|
|
@ -15,6 +15,7 @@ defineProps<{
|
||||||
outlined?: boolean;
|
outlined?: boolean;
|
||||||
readonly?: boolean;
|
readonly?: boolean;
|
||||||
separator?: boolean;
|
separator?: boolean;
|
||||||
|
usernameReadonly?: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
async function selectHq(id: string) {
|
async function selectHq(id: string) {
|
||||||
|
|
@ -37,7 +38,6 @@ async function selectHq(id: string) {
|
||||||
options-dense
|
options-dense
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="col-6"
|
class="col-6"
|
||||||
bg-color="white"
|
|
||||||
option-label="label"
|
option-label="label"
|
||||||
option-value="value"
|
option-value="value"
|
||||||
label="รหัสสำนักงานใหญ่"
|
label="รหัสสำนักงานใหญ่"
|
||||||
|
|
@ -57,7 +57,6 @@ async function selectHq(id: string) {
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="col-6"
|
class="col-6"
|
||||||
label="รหัสสาขา"
|
label="รหัสสาขา"
|
||||||
bg-color="white"
|
|
||||||
option-label="label"
|
option-label="label"
|
||||||
option-value="value"
|
option-value="value"
|
||||||
v-model="brId"
|
v-model="brId"
|
||||||
|
|
@ -73,7 +72,6 @@ async function selectHq(id: string) {
|
||||||
options-dense
|
options-dense
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="col-3"
|
class="col-3"
|
||||||
bg-color="white"
|
|
||||||
option-value="value"
|
option-value="value"
|
||||||
option-label="label"
|
option-label="label"
|
||||||
label="ประเภทผู้ใช้งาน"
|
label="ประเภทผู้ใช้งาน"
|
||||||
|
|
@ -91,7 +89,6 @@ async function selectHq(id: string) {
|
||||||
options-dense
|
options-dense
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="col-3"
|
class="col-3"
|
||||||
bg-color="white"
|
|
||||||
label="สิทธิ์ผู้ใช้งาน"
|
label="สิทธิ์ผู้ใช้งาน"
|
||||||
option-label="label"
|
option-label="label"
|
||||||
option-value="value"
|
option-value="value"
|
||||||
|
|
@ -102,15 +99,14 @@ async function selectHq(id: string) {
|
||||||
<q-input
|
<q-input
|
||||||
:dense="dense"
|
:dense="dense"
|
||||||
:outlined="outlined"
|
:outlined="outlined"
|
||||||
:readonly="readonly"
|
:readonly="usernameReadonly"
|
||||||
emit-value
|
emit-value
|
||||||
map-options
|
map-options
|
||||||
options-dense
|
options-dense
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="col-3"
|
class="col-3"
|
||||||
bg-color="white"
|
|
||||||
label="ชื่อผู้ใช้งาน (Username)"
|
label="ชื่อผู้ใช้งาน (Username)"
|
||||||
v-model="userName"
|
v-model="username"
|
||||||
:rules="[(val: string) => val.length > 2 || 'กรุณากรอกชื่อผู้ใช้งาน']"
|
:rules="[(val: string) => val.length > 2 || 'กรุณากรอกชื่อผู้ใช้งาน']"
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
|
|
@ -119,7 +115,6 @@ async function selectHq(id: string) {
|
||||||
readonly
|
readonly
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="col-3"
|
class="col-3"
|
||||||
bg-color="white"
|
|
||||||
label="รหัสพนักงาน"
|
label="รหัสพนักงาน"
|
||||||
v-model="userCode"
|
v-model="userCode"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,6 @@ defineProps<{
|
||||||
map-options
|
map-options
|
||||||
label="เพศ"
|
label="เพศ"
|
||||||
class="col-3"
|
class="col-3"
|
||||||
bg-color="white"
|
|
||||||
option-label="label"
|
option-label="label"
|
||||||
option-value="value"
|
option-value="value"
|
||||||
v-model="gender"
|
v-model="gender"
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,9 @@ const zipCode = defineModel<string>('zipCode', { default: '' });
|
||||||
>
|
>
|
||||||
<q-form greedy @submit.prevent @validation-success="submit">
|
<q-form greedy @submit.prevent @validation-success="submit">
|
||||||
<!-- header -->
|
<!-- header -->
|
||||||
<div class="form-header q-py-sm q-pr-lg">
|
<div class="form-header q-py-sm q-px-lg">
|
||||||
<div class="row items-center">
|
<div class="row items-center">
|
||||||
|
<div style="width: 31.98px"></div>
|
||||||
<div class="col text-subtitle1 text-weight-bold text-center">
|
<div class="col text-subtitle1 text-weight-bold text-center">
|
||||||
{{ title }}
|
{{ title }}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -70,10 +71,10 @@ const zipCode = defineModel<string>('zipCode', { default: '' });
|
||||||
bordered
|
bordered
|
||||||
class="column full-height"
|
class="column full-height"
|
||||||
:class="`${$slots.prepend ? ($q.screen.gt.sm ? 'col-10' : 'col-12') : $slots.append ? 'col-6' : 'col-12'}`"
|
:class="`${$slots.prepend ? ($q.screen.gt.sm ? 'col-10' : 'col-12') : $slots.append ? 'col-6' : 'col-12'}`"
|
||||||
style="padding-right: 0"
|
style="padding-right: 0; padding-bottom: 0"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="row col-12 q-col-gutter-y-md q-pr-md"
|
class="row col-12 q-col-gutter-y-md q-pr-md q-mb-md"
|
||||||
:style="$q.screen.gt.sm ? 'overflow-y: auto; height: 60vh' : ''"
|
:style="$q.screen.gt.sm ? 'overflow-y: auto; height: 60vh' : ''"
|
||||||
>
|
>
|
||||||
<slot name="information"></slot>
|
<slot name="information"></slot>
|
||||||
|
|
@ -83,6 +84,7 @@ const zipCode = defineModel<string>('zipCode', { default: '' });
|
||||||
dense
|
dense
|
||||||
outlined
|
outlined
|
||||||
:separator="addressSeparator"
|
:separator="addressSeparator"
|
||||||
|
v-model:isOpen="modal"
|
||||||
v-model:address="address"
|
v-model:address="address"
|
||||||
v-model:addressEN="addressEN"
|
v-model:addressEN="addressEN"
|
||||||
v-model:provinceId="provinceId"
|
v-model:provinceId="provinceId"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue