ทะเบียนประวัติ: ข้อมูลที่อยู่ (แก้การเลือกจังหวัด)

This commit is contained in:
puriphatt 2024-03-13 10:33:55 +07:00
parent 47f84f444b
commit 41cc892c91

View file

@ -47,7 +47,7 @@ const resultData = ref({
currentDistrictId: "ce9a2984-938f-454c-a758-26dcf8176afe", currentDistrictId: "ce9a2984-938f-454c-a758-26dcf8176afe",
currentSubDistrictId: "97dba284-7cdc-45c6-863c-9590810fe8e2", currentSubDistrictId: "97dba284-7cdc-45c6-863c-9590810fe8e2",
currentZipCode: "50100", currentZipCode: "50100",
registrationSame: "1", registrationSame: "0",
}); });
const dataLabel = { const dataLabel = {
@ -262,6 +262,20 @@ function defaultAdd() {
} }
async function fetchData() { async function fetchData() {
// mock data
addressData.value.address = resultData.value.registrationAddress;
addressData.value.provinceId = resultData.value.registrationProvinceId;
addressData.value.districtId = resultData.value.registrationDistrictId;
addressData.value.subdistrictId = resultData.value.registrationSubDistrictId;
addressData.value.codep = resultData.value.registrationZipCode;
addressData.value.same = resultData.value.registrationSame;
addressData.value.addressC = resultData.value.currentAddress;
addressData.value.provinceIdC = resultData.value.currentProvinceId;
addressData.value.districtIdC = resultData.value.currentDistrictId;
addressData.value.subdistrictIdC = resultData.value.currentSubDistrictId;
addressData.value.codec = resultData.value.currentZipCode;
// if (route.params.id) { // if (route.params.id) {
// // showLoader(); // // showLoader();
// await http // await http
@ -464,13 +478,57 @@ async function fetchSubDistrict(id: string | null, position: string) {
} else isLoad.value++; } else isLoad.value++;
} }
async function selectProvince(e: string | null, name: string) {
if (e != null) {
if (name == "1") {
addressData.value.districtId = "";
addressData.value.subdistrictId = "";
addressData.value.codep = "";
} else {
addressData.value.districtIdC = "";
addressData.value.subdistrictIdC = "";
addressData.value.codec = "";
}
myForm.value.resetValidation();
await fetchDistrict(e, name);
}
};
async function selectDistrict(e: string | null, name: string) {
if (e != null) {
if (name == "1") {
addressData.value.subdistrictId = "";
addressData.value.codep = "";
} else {
addressData.value.subdistrictIdC = "";
addressData.value.codec = "";
}
myForm.value.resetValidation();
await fetchSubDistrict(e, name);
}
};
function selectSubDistrict(e: string | null, name: string) {
if (e != null) {
if (name == "1") {
const findcode = Ops.value.subdistrictOps.filter((r) => r.id == e);
const namecode = findcode.length > 0 ? findcode[0].zipCode : "";
addressData.value.codep = namecode;
} else {
const findcode = Ops.value.subdistrictCOps.filter((r) => r.id == e);
const namecode = findcode.length > 0 ? findcode[0].zipCode : "";
addressData.value.codec = namecode;
}
}
};
async function getNewData() { async function getNewData() {
await fetchData(); await fetchData();
await fetchProvince(); await fetchProvince();
await fetchDistrict(resultData.value.registrationProvinceId, "1"); await fetchDistrict(addressData.value.provinceId, "1");
await fetchDistrict(resultData.value.currentProvinceId, "2"); await fetchDistrict(addressData.value.provinceIdC, "2");
await fetchSubDistrict(resultData.value.registrationDistrictId, "1"); await fetchSubDistrict(addressData.value.districtId, "1");
await fetchSubDistrict(resultData.value.currentDistrictId, "2"); await fetchSubDistrict(addressData.value.districtIdC, "2");
} }
function filterSelector(val: any, update: Function, refData: string) { function filterSelector(val: any, update: Function, refData: string) {
@ -554,15 +612,14 @@ function onSubmit() {
myForm.value.validate().then(async (result: boolean) => { myForm.value.validate().then(async (result: boolean) => {
if (result) { if (result) {
// await saveData(); // await saveData();
console.log("Hello");
modal.value = false; modal.value = false;
} }
}); });
} }
onMounted(async () => { onMounted(async () => {
await getNewData();
defaultAdd(); defaultAdd();
await getNewData();
}); });
</script> </script>
<template> <template>
@ -587,7 +644,7 @@ onMounted(async () => {
<div :class="$q.screen.gt.xs ? 'row' : 'column'"> <div :class="$q.screen.gt.xs ? 'row' : 'column'">
<!-- column 1 --> <!-- column 1 -->
<div class="col-md-6 col-12 row"> <div class="col-md-6 col-12 row">
<div class="col-4 text-grey-6 text-weight-medium"> <div class="col-5 text-grey-6 text-weight-medium">
<div <div
v-for="label in Object.keys(dataLabel).slice(0, 5)" v-for="label in Object.keys(dataLabel).slice(0, 5)"
class="q-py-xs" class="q-py-xs"
@ -596,16 +653,16 @@ onMounted(async () => {
</div> </div>
</div> </div>
<!-- data --> <!-- data -->
<div class="col-8"> <div class="col-7">
<div class="q-py-xs"> <div class="q-py-xs">
{{ resultData.registrationAddress }} {{ addressData.address }}
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ {{
resultData.registrationProvinceId addressData.provinceId
? ( ? (
Ops.provinceOps.find( Ops.provinceOps.find(
(r) => r.id === resultData.registrationProvinceId (r) => r.id === addressData.provinceId
) || {} ) || {}
).name ).name
: "-" : "-"
@ -613,10 +670,10 @@ onMounted(async () => {
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ {{
resultData.registrationDistrictId addressData.districtId
? ( ? (
Ops.districtOps.find( Ops.districtOps.find(
(r) => r.id === resultData.registrationDistrictId (r) => r.id === addressData.districtId
) || {} ) || {}
).name ).name
: "-" : "-"
@ -624,17 +681,17 @@ onMounted(async () => {
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ {{
resultData.registrationSubDistrictId addressData.subdistrictId
? ( ? (
Ops.subdistrictOps.find( Ops.subdistrictOps.find(
(r) => r.id === resultData.registrationSubDistrictId (r) => r.id === addressData.subdistrictId
) || {} ) || {}
).name ).name
: "-" : "-"
}} }}
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ resultData.registrationZipCode }} {{ addressData.codep }}
</div> </div>
</div> </div>
</div> </div>
@ -642,12 +699,12 @@ onMounted(async () => {
<!-- column 2 --> <!-- column 2 -->
<div <div
class="text-grey-6 text-weight-medium" class="text-grey-6 text-weight-medium"
v-if="resultData.registrationSame === '1'" v-if="addressData.same === '1'"
> >
อยจจนตรงกบทอยตามทะเบยนบาน อยจจนตรงกบทอยตามทะเบยนบาน
</div> </div>
<div class="col-md-6 col-12 row" v-else> <div class="col-md-6 col-12 row" v-else>
<div class="col-4 text-grey-6 text-weight-medium"> <div class="col-5 text-grey-6 text-weight-medium">
<div <div
v-for="label in Object.keys(dataLabel).slice(5, 10)" v-for="label in Object.keys(dataLabel).slice(5, 10)"
class="q-py-xs" class="q-py-xs"
@ -656,16 +713,16 @@ onMounted(async () => {
</div> </div>
</div> </div>
<!-- data --> <!-- data -->
<div class="col-8"> <div class="col-7">
<div class="q-py-xs"> <div class="q-py-xs">
{{ resultData.currentAddress }} {{ addressData.addressC }}
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ {{
resultData.currentProvinceId addressData.provinceIdC
? ( ? (
Ops.provinceOps.find( Ops.provinceOps.find(
(r) => r.id === resultData.currentProvinceId (r) => r.id === addressData.provinceIdC
) || {} ) || {}
).name ).name
: "-" : "-"
@ -673,10 +730,10 @@ onMounted(async () => {
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ {{
resultData.currentDistrictId addressData.districtIdC
? ( ? (
Ops.districtOps.find( Ops.districtCOps.find(
(r) => r.id === resultData.currentDistrictId (r) => r.id === addressData.districtIdC
) || {} ) || {}
).name ).name
: "-" : "-"
@ -684,17 +741,17 @@ onMounted(async () => {
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ {{
resultData.currentSubDistrictId addressData.subdistrictIdC
? ( ? (
Ops.subdistrictOps.find( Ops.subdistrictCOps.find(
(r) => r.id === resultData.currentSubDistrictId (r) => r.id === addressData.subdistrictIdC
) || {} ) || {}
).name ).name
: "-" : "-"
}} }}
</div> </div>
<div class="q-py-xs"> <div class="q-py-xs">
{{ resultData.registrationZipCode }} {{ addressData.codec }}
</div> </div>
</div> </div>
</div> </div>
@ -719,14 +776,14 @@ onMounted(async () => {
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
type="textarea" type="textarea"
v-model="resultData.registrationAddress" v-model="addressData.address"
:label="dataLabel.registrationAddress" :label="dataLabel.registrationAddress"
:rules="[(val:string) => !!val || `${'กรุณากรอก ที่อยู่ตามทะเบียนบ้าน'}`]" :rules="[(val:string) => !!val || `${'กรุณากรอก ที่อยู่ตามทะเบียนบ้าน'}`]"
/> />
</div> </div>
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<selector <q-select
dense dense
outlined outlined
use-input use-input
@ -737,17 +794,18 @@ onMounted(async () => {
option-value="id" option-value="id"
option-label="name" option-label="name"
input-debounce="0" input-debounce="0"
v-model="resultData.registrationProvinceId" v-model="addressData.provinceId"
:options="Ops.provinceOps" :options="Ops.provinceOps"
:label="dataLabel.registrationProvince" :label="dataLabel.registrationProvince"
:rules="[(val:string) => !!val || `${'กรุณาเลือก จังหวัด'}`]" :rules="[(val:string) => !!val || `${'กรุณาเลือก จังหวัด'}`]"
@update:model-value="(value:string) => selectProvince(value, '1')"
@filter="(inputValue:string, @filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'provinceOps' doneFn:Function) => filterSelector(inputValue, doneFn,'provinceOps'
) " ) "
/> />
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<selector <q-select
dense dense
outlined outlined
use-input use-input
@ -758,17 +816,18 @@ onMounted(async () => {
option-value="id" option-value="id"
option-label="name" option-label="name"
input-debounce="0" input-debounce="0"
v-model="resultData.registrationDistrictId" v-model="addressData.districtId"
:options="Ops.districtOps" :options="Ops.districtOps"
:label="dataLabel.registrationDistrict" :label="dataLabel.registrationDistrict"
:rules="[(val:string) => !!val || `${'กรุณาเลือก เขต / อำเภอ'}`]" :rules="[(val:string) => !!val || `${'กรุณาเลือก เขต / อำเภอ'}`]"
@update:model-value="(value:string) => selectDistrict(value, '1')"
@filter="(inputValue:string, @filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'districtOps' doneFn:Function) => filterSelector(inputValue, doneFn,'districtOps'
) " ) "
/> />
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<selector <q-select
dense dense
outlined outlined
use-input use-input
@ -779,10 +838,11 @@ onMounted(async () => {
option-value="id" option-value="id"
option-label="name" option-label="name"
input-debounce="0" input-debounce="0"
v-model="resultData.registrationSubDistrictId" v-model="addressData.subdistrictId"
:options="Ops.subdistrictOps" :options="Ops.subdistrictOps"
:label="dataLabel.registrationSubDistrict" :label="dataLabel.registrationSubDistrict"
:rules="[(val:string) => !!val || `${'กรุณาเลือก เขต / อำเภอ'}`]" :rules="[(val:string) => !!val || `${'กรุณาเลือก แขวง / ตำบล'}`]"
@update:model-value="(value:string) => selectSubDistrict(value, '1')"
@filter="(inputValue:string, @filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'subdistrictOps' doneFn:Function) => filterSelector(inputValue, doneFn,'subdistrictOps'
) " ) "
@ -795,7 +855,7 @@ onMounted(async () => {
outlined outlined
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
v-model="resultData.registrationZipCode" v-model="addressData.codep"
:label="dataLabel.registrationZipCode" :label="dataLabel.registrationZipCode"
/> />
</div> </div>
@ -806,24 +866,24 @@ onMounted(async () => {
>อยจจนตรงกบทอยตามทะเบยนบาน</label >อยจจนตรงกบทอยตามทะเบยนบาน</label
> >
<q-radio <q-radio
v-model="resultData.registrationSame" dense
checked-icon="task_alt"
unchecked-icon="panorama_fish_eye"
val="1" val="1"
label="ใช่" label="ใช่"
dense checked-icon="task_alt"
v-model="addressData.same"
unchecked-icon="panorama_fish_eye"
/> />
<q-radio <q-radio
v-model="resultData.registrationSame" dense
checked-icon="task_alt"
unchecked-icon="panorama_fish_eye"
val="0" val="0"
label="ไม่" label="ไม่"
dense checked-icon="task_alt"
v-model="addressData.same"
unchecked-icon="panorama_fish_eye"
/> />
</div> </div>
<!-- current address --> <!-- current address -->
<div v-if="resultData.registrationSame === '0'"> <div v-if="addressData.same === '0'">
<div class="col-12 q-pb-xs"> <div class="col-12 q-pb-xs">
<q-input <q-input
dense dense
@ -831,14 +891,14 @@ onMounted(async () => {
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
type="textarea" type="textarea"
v-model="resultData.currentAddress" v-model="addressData.addressC"
:label="dataLabel.currentAddress" :label="dataLabel.currentAddress"
:rules="[(val:string) => !!val || `${'กรุณากรอก ที่อยู่ปัจจุบัน'}`]" :rules="[(val:string) => !!val || `${'กรุณากรอก ที่อยู่ปัจจุบัน'}`]"
/> />
</div> </div>
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<selector <q-select
dense dense
outlined outlined
use-input use-input
@ -849,17 +909,18 @@ onMounted(async () => {
option-value="id" option-value="id"
option-label="name" option-label="name"
input-debounce="0" input-debounce="0"
v-model="resultData.currentProvinceId" v-model="addressData.provinceIdC"
:options="Ops.provinceOps" :options="Ops.provinceOps"
:label="dataLabel.currentProvince" :label="dataLabel.currentProvince"
:rules="[(val:string) => !!val || `${'กรุณาเลือก จังหวัด'}`]" :rules="[(val:string) => !!val || `${'กรุณาเลือก จังหวัด'}`]"
@update:model-value="(value:string) => selectProvince(value, '2')"
@filter="(inputValue:string, @filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'provinceOps' doneFn:Function) => filterSelector(inputValue, doneFn,'provinceOps'
) " ) "
/> />
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<selector <q-select
dense dense
outlined outlined
use-input use-input
@ -870,17 +931,18 @@ onMounted(async () => {
option-value="id" option-value="id"
option-label="name" option-label="name"
input-debounce="0" input-debounce="0"
v-model="resultData.currentDistrictId" v-model="addressData.districtIdC"
:options="Ops.districtOps" :options="Ops.districtCOps"
:label="dataLabel.currentDistrict" :label="dataLabel.currentDistrict"
:rules="[(val:string) => !!val || `${'กรุณาเลือก เขต / อำเภอ'}`]" :rules="[(val:string) => !!val || `${'กรุณาเลือก เขต / อำเภอ'}`]"
@update:model-value="(value:string) => selectDistrict(value, '2')"
@filter="(inputValue:string, @filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'districtOps' doneFn:Function) => filterSelector(inputValue, doneFn,'districtOps'
) " ) "
/> />
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<selector <q-select
dense dense
outlined outlined
use-input use-input
@ -891,10 +953,11 @@ onMounted(async () => {
option-value="id" option-value="id"
option-label="name" option-label="name"
input-debounce="0" input-debounce="0"
v-model="resultData.currentSubDistrictId" v-model="addressData.subdistrictIdC"
:options="Ops.subdistrictOps" :options="Ops.subdistrictCOps"
:label="dataLabel.currentSubDistrict" :label="dataLabel.currentSubDistrict"
:rules="[(val:string) => !!val || `${'กรุณาเลือก เขต / อำเภอ'}`]" :rules="[(val:string) => !!val || `${'กรุณาเลือก แขวง / ตำบล'}`]"
@update:model-value="(value:string) => selectSubDistrict(value, '2')"
@filter="(inputValue:string, @filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'subdistrictOps' doneFn:Function) => filterSelector(inputValue, doneFn,'subdistrictOps'
) " ) "
@ -907,7 +970,7 @@ onMounted(async () => {
outlined outlined
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
v-model="resultData.registrationZipCode" v-model="addressData.codec"
:label="dataLabel.registrationZipCode" :label="dataLabel.registrationZipCode"
/> />
</div> </div>
@ -917,10 +980,10 @@ onMounted(async () => {
<q-separator /> <q-separator />
<div class="text-right q-pa-sm"> <div class="text-right q-pa-sm">
<q-btn <q-btn
id="onSubmit"
type="submit"
dense dense
unelevated unelevated
id="onSubmit"
type="submit"
label="บันทึก" label="บันทึก"
color="public" color="public"
class="q-px-md" class="q-px-md"
@ -933,14 +996,14 @@ onMounted(async () => {
</q-dialog> </q-dialog>
<HistoryTable <HistoryTable
:rows="rowsHistory"
:columns="columnsHistory"
:filter="filterHistory"
:visible-columns="visibleColumnsHistory"
v-model:modal="modalHistory" v-model:modal="modalHistory"
v-model:tittle="tittleHistory"
v-model:inputfilter="filterHistory" v-model:inputfilter="filterHistory"
v-model:inputvisible="visibleColumnsHistory" v-model:inputvisible="visibleColumnsHistory"
v-model:tittle="tittleHistory" :rows="rowsHistory"
:filter="filterHistory"
:columns="columnsHistory"
:visible-columns="visibleColumnsHistory"
> >
<template #columns="props"> <template #columns="props">
<q-tr :props="props"> <q-tr :props="props">