เช็คเบอร์โทร

This commit is contained in:
Suphonchai Phoonsawat 2023-10-15 16:46:06 +07:00
parent 457164331d
commit 2f6ac4318c
3 changed files with 951 additions and 730 deletions

View file

@ -1,109 +1,154 @@
<!-- card คคลทสามารถตดตอได --> <!-- card คคลทสามารถตดตอได -->
<template> <template>
<HeaderTop <HeaderTop
v-model:edit="edit" v-model:edit="edit"
header="บุคคลที่สามารถติดต่อได้" header="บุคคลที่สามารถติดต่อได้"
icon="mdi-account-circle" icon="mdi-account-circle"
:addData="true" :addData="true"
:editOnly="false" :editOnly="false"
:editData="false" :editData="false"
/> />
<q-form ref="myform"> <q-form ref="myform">
<div class="row col-12 items-center q-col-gutter-x-sm q-col-gutter-y-xs"> <div
<div class="col-xs-12 col-sm-3 col-md-2"> class="row col-12 items-center q-col-gutter-x-sm q-col-gutter-y-xs"
<q-select >
:class="getClass(status == 'checkRegister' || status == 'payment')" <div class="col-xs-12 col-sm-3 col-md-2">
:readonly="!(status == 'checkRegister' || status == 'payment')" <q-select
:borderless="!(status == 'checkRegister' || status == 'payment')" :class="
:rules="[(val) => !!val || `${'กรุณาเลือก คำนำหน้า'}`]" getClass(
:outlined="status == 'checkRegister' || status == 'payment'" status == 'checkRegister' || status == 'payment'
dense )
lazy-rules "
v-model="defaultContact.contactPrefixId" :readonly="
emit-value !(status == 'checkRegister' || status == 'payment')
map-options "
option-label="name" :borderless="
:options="prefixOptions" !(status == 'checkRegister' || status == 'payment')
option-value="id" "
:label="`${'คำนำหน้า'}`" :rules="[(val) => !!val || `${'กรุณาเลือก คำนำหน้า'}`]"
/> :outlined="status == 'checkRegister' || status == 'payment'"
</div> dense
<div class="col-xs-12 col-sm-3 col-md-3"> lazy-rules
<q-input v-model="defaultContact.contactPrefixId"
:class="getClass(status == 'checkRegister' || status == 'payment')" emit-value
:outlined="status == 'checkRegister' || status == 'payment'" map-options
dense option-label="name"
lazy-rules :options="prefixOptions"
:readonly="!(status == 'checkRegister' || status == 'payment')" option-value="id"
:borderless="!(status == 'checkRegister' || status == 'payment')" :label="`${'คำนำหน้า'}`"
v-model="defaultContact.contactFirstname" />
:rules="[(val) => !!val || `${'กรุณากรอก ชื่อ'}`]" </div>
:label="`${'ชื่อ'}`" <div class="col-xs-12 col-sm-3 col-md-3">
/> <q-input
</div> :class="
<div class="col-xs-12 col-sm-3 col-md-3"> getClass(
<q-input status == 'checkRegister' || status == 'payment'
:class="getClass(status == 'checkRegister' || status == 'payment')" )
:outlined="status == 'checkRegister' || status == 'payment'" "
dense :outlined="status == 'checkRegister' || status == 'payment'"
lazy-rules dense
:readonly="!(status == 'checkRegister' || status == 'payment')" lazy-rules
:borderless="!(status == 'checkRegister' || status == 'payment')" :readonly="
v-model="defaultContact.contactLastname" !(status == 'checkRegister' || status == 'payment')
:rules="[(val) => !!val || `${'กรุณากรอก นามสกุล'}`]" "
:label="`${'นามสกุล'}`" :borderless="
/> !(status == 'checkRegister' || status == 'payment')
</div> "
<div class="col-xs-12 col-sm-3 col-md-4"> v-model="defaultContact.contactFirstname"
<q-input :rules="[(val) => !!val || `${'กรุณากรอก ชื่อ'}`]"
:class="getClass(status == 'checkRegister' || status == 'payment')" :label="`${'ชื่อ'}`"
:outlined="status == 'checkRegister' || status == 'payment'" />
dense </div>
lazy-rules <div class="col-xs-12 col-sm-3 col-md-3">
:readonly="!(status == 'checkRegister' || status == 'payment')" <q-input
:borderless="!(status == 'checkRegister' || status == 'payment')" :class="
v-model="defaultContact.contactRelations" getClass(
:rules="[(val) => !!val || `${'กรุณากรอกความสัมพันธ์'}`]" status == 'checkRegister' || status == 'payment'
:label="`${'เกี่ยวข้องเป็น'}`" )
/> "
</div> :outlined="status == 'checkRegister' || status == 'payment'"
<div class="col-xs-12 col-sm-3 col-md-4"> dense
<q-input lazy-rules
:outlined="status == 'checkRegister' || status == 'payment'" :readonly="
dense !(status == 'checkRegister' || status == 'payment')
:counter=" "
status == 'checkRegister' || status == 'payment' ? true : false :borderless="
" !(status == 'checkRegister' || status == 'payment')
lazy-rules "
type="tel" v-model="defaultContact.contactLastname"
mask="##########" :rules="[(val) => !!val || `${'กรุณากรอก นามสกุล'}`]"
maxlength="10" :label="`${'นามสกุล'}`"
:class="getClass(status == 'checkRegister' || status == 'payment')" />
:readonly="!(status == 'checkRegister' || status == 'payment')" </div>
:borderless="!(status == 'checkRegister' || status == 'payment')" <div class="col-xs-12 col-sm-3 col-md-4">
v-model="defaultContact.contactTel" <q-input
:label="`${'โทรศัพท์'}`" :class="
:rules="[ getClass(
(val) => val.length == 10 || `${'กรุณากรอก โทรศัพท์'}`, status == 'checkRegister' || status == 'payment'
(val) => )
/^[0-9]*$/.test(val) || `${'กรุณากรอกข้อมูลโทรศัพท์ให้ถูกต้อง'}`, "
]" :outlined="status == 'checkRegister' || status == 'payment'"
/> dense
</div> lazy-rules
</div> :readonly="
</q-form> !(status == 'checkRegister' || status == 'payment')
"
:borderless="
!(status == 'checkRegister' || status == 'payment')
"
v-model="defaultContact.contactRelations"
:rules="[(val) => !!val || `${'กรุณากรอกความสัมพันธ์'}`]"
:label="`${'เกี่ยวข้องเป็น'}`"
/>
</div>
<div class="col-xs-12 col-sm-3 col-md-4">
<q-input
:outlined="status == 'checkRegister' || status == 'payment'"
dense
:counter="
status == 'checkRegister' || status == 'payment'
? true
: false
"
lazy-rules
type="tel"
mask="##########"
maxlength="10"
:class="
getClass(
status == 'checkRegister' || status == 'payment'
)
"
:readonly="
!(status == 'checkRegister' || status == 'payment')
"
:borderless="
!(status == 'checkRegister' || status == 'payment')
"
v-model="defaultContact.contactTel"
:label="`${'โทรศัพท์'}`"
:rules="[
(val) => !!val || '* กรุณากรอกข้อมูลหมายเลขโทรศัพท์',
(val) =>
(val.length >= 9 && val.length <= 10) ||
'กรุณากรอกข้อมูลหมายเลขโทรศัพท์ให้ถูกต้อง',
]"
/>
</div>
</div>
</q-form>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, watch, PropType } from "vue"; import { ref, onMounted, watch, PropType } from "vue";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import type { import type {
Contact, Contact,
DataOption, DataOption,
} from "@/modules/03_recruiting/interface/index/Main"; } from "@/modules/03_recruiting/interface/index/Main";
import { import {
defaultContact, defaultContact,
changeData, changeData,
} from "@/modules/03_recruiting/interface/index/Main"; } from "@/modules/03_recruiting/interface/index/Main";
import HeaderTop from "@/modules/03_recruiting/components/top.vue"; import HeaderTop from "@/modules/03_recruiting/components/top.vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
@ -112,18 +157,18 @@ import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
const props = defineProps({ const props = defineProps({
status: { status: {
type: String, type: String,
required: true, required: true,
}, },
form: { form: {
type: Object, type: Object,
required: true, required: true,
}, },
prefixOptions: { prefixOptions: {
type: Array as PropType<DataOption[]>, type: Array as PropType<DataOption[]>,
required: true, required: true,
}, },
}); });
const emit = defineEmits(["update:form"]); const emit = defineEmits(["update:form"]);
@ -136,43 +181,43 @@ const route = useRoute();
const candidateId = ref<string>(route.params.candidateId.toString()); const candidateId = ref<string>(route.params.candidateId.toString());
watch(myform, async (count: any, prevCount: any) => { watch(myform, async (count: any, prevCount: any) => {
emit("update:form", count); emit("update:form", count);
}); });
watch(defaultContact, async (count: Contact, prevCount: Contact) => { watch(defaultContact, async (count: Contact, prevCount: Contact) => {
await changeData("contact", count); await changeData("contact", count);
}); });
onMounted(async () => { onMounted(async () => {
await fetchData(); await fetchData();
}); });
const fetchData = async () => { const fetchData = async () => {
showLoader(); showLoader();
await http await http
.get(config.API.candidateContact(candidateId.value)) .get(config.API.candidateContact(candidateId.value))
.then((res) => { .then((res) => {
const data = res.data.result; const data = res.data.result;
if (data != null) { if (data != null) {
defaultContact.value.contactPrefixId = data.contactPrefixId; defaultContact.value.contactPrefixId = data.contactPrefixId;
defaultContact.value.contactFirstname = data.contactFirstname; defaultContact.value.contactFirstname = data.contactFirstname;
defaultContact.value.contactLastname = data.contactLastname; defaultContact.value.contactLastname = data.contactLastname;
defaultContact.value.contactRelations = data.contactRelations; defaultContact.value.contactRelations = data.contactRelations;
defaultContact.value.contactTel = data.contactTel; defaultContact.value.contactTel = data.contactTel;
} }
}) })
.catch((e) => { .catch((e) => {
// messageError($q, e) // messageError($q, e)
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
}); });
}; };
const getClass = (val: boolean) => { const getClass = (val: boolean) => {
return { return {
"full-width inputgreen cursor-pointer": val, "full-width inputgreen cursor-pointer": val,
"full-width cursor-pointer": !val, "full-width cursor-pointer": !val,
}; };
}; };
</script> </script>

File diff suppressed because it is too large Load diff

View file

@ -1,139 +1,210 @@
<!-- card ตำแหนงปจจ --> <!-- card ตำแหนงปจจ -->
<template> <template>
<HeaderTop <HeaderTop
v-model:edit="edit" v-model:edit="edit"
header="ตำแหน่งปัจจุบัน" header="ตำแหน่งปัจจุบัน"
icon="mdi-briefcase" icon="mdi-briefcase"
:addData="true" :addData="true"
:editOnly="false" :editOnly="false"
:editData="false" :editData="false"
/> />
<q-form ref="myform"> <q-form ref="myform">
<div class="row col-12 items-center"> <div class="row col-12 items-center">
<div class="col-12 q-pb-sm"> <div class="col-12 q-pb-sm">
<q-radio <q-radio
v-model="defaultOccupation.positionType" v-model="defaultOccupation.positionType"
label="ลูกจ้างประจำ" label="ลูกจ้างประจำ"
color="teal" color="teal"
val="prem" val="prem"
:disable="!(status == 'checkRegister' || status == 'payment')" :disable="
/> !(status == 'checkRegister' || status == 'payment')
<q-radio "
v-model="defaultOccupation.positionType" />
label="ลูกจ้างชั่วคราว" <q-radio
color="teal" v-model="defaultOccupation.positionType"
val="temp" label="ลูกจ้างชั่วคราว"
:disable="!(status == 'checkRegister' || status == 'payment')" color="teal"
/> val="temp"
<q-radio :disable="
v-model="defaultOccupation.positionType" !(status == 'checkRegister' || status == 'payment')
label="ผู้ปฏิบัติงานอื่นในกรุงเทพมหานคร" "
color="teal" />
val="other" <q-radio
:disable="!(status == 'checkRegister' || status == 'payment')" v-model="defaultOccupation.positionType"
/> label="ผู้ปฏิบัติงานอื่นในกรุงเทพมหานคร"
</div> color="teal"
<div class="col-12 row q-col-gutter-sm"> val="other"
<div class="col-4"> :disable="
<q-input !(status == 'checkRegister' || status == 'payment')
:class="getClass(status == 'checkRegister' || status == 'payment')" "
:outlined="status == 'checkRegister' || status == 'payment'" />
dense </div>
lazy-rules <div class="col-12 row q-col-gutter-sm">
autogrow <div class="col-4">
:readonly="!(status == 'checkRegister' || status == 'payment')" <q-input
:borderless="!(status == 'checkRegister' || status == 'payment')" :class="
v-model="defaultOccupation.position" getClass(
:rules="[(val) => !!val || `${'กรุณากรอก ชื่อตำแหน่ง'}`]" status == 'checkRegister' || status == 'payment'
:label="`${'ชื่อตำแหน่ง'}`" )
/> "
</div> :outlined="
<div class="col-4"> status == 'checkRegister' || status == 'payment'
<q-input "
:class="getClass(status == 'checkRegister' || status == 'payment')" dense
:outlined="status == 'checkRegister' || status == 'payment'" lazy-rules
dense autogrow
lazy-rules :readonly="
type="number" !(status == 'checkRegister' || status == 'payment')
autogrow "
:readonly="!(status == 'checkRegister' || status == 'payment')" :borderless="
:borderless="!(status == 'checkRegister' || status == 'payment')" !(status == 'checkRegister' || status == 'payment')
v-model="defaultOccupation.salary" "
:rules="[(val) => !!val || `${'กรุณากรอก เงินเดือน'}`]" v-model="defaultOccupation.position"
:label="`${'เงินเดือน'}`" :rules="[
/> (val) => !!val || `${'กรุณากรอก ชื่อตำแหน่ง'}`,
</div> ]"
:label="`${'ชื่อตำแหน่ง'}`"
/>
</div>
<div class="col-4">
<q-input
:class="
getClass(
status == 'checkRegister' || status == 'payment'
)
"
:outlined="
status == 'checkRegister' || status == 'payment'
"
dense
lazy-rules
type="number"
autogrow
:readonly="
!(status == 'checkRegister' || status == 'payment')
"
:borderless="
!(status == 'checkRegister' || status == 'payment')
"
v-model="defaultOccupation.salary"
:rules="[(val) => !!val || `${'กรุณากรอก เงินเดือน'}`]"
:label="`${'เงินเดือน'}`"
/>
</div>
<div class="col-4"> <div class="col-4">
<q-input <q-input
:class="getClass(status == 'checkRegister' || status == 'payment')" :class="
:outlined="status == 'checkRegister' || status == 'payment'" getClass(
dense status == 'checkRegister' || status == 'payment'
lazy-rules )
autogrow "
:readonly="!(status == 'checkRegister' || status == 'payment')" :outlined="
:borderless="!(status == 'checkRegister' || status == 'payment')" status == 'checkRegister' || status == 'payment'
v-model="defaultOccupation.group" "
:rules="[(val) => !!val || `${'กรุณากรอก กลุ่ม/ฝ่าย'}`]" dense
:label="`${'กลุ่ม/ฝ่าย'}`" lazy-rules
/> autogrow
</div> :readonly="
<div class="col-4"> !(status == 'checkRegister' || status == 'payment')
<q-input "
:class="getClass(status == 'checkRegister' || status == 'payment')" :borderless="
:outlined="status == 'checkRegister' || status == 'payment'" !(status == 'checkRegister' || status == 'payment')
dense "
lazy-rules v-model="defaultOccupation.group"
autogrow :rules="[(val) => !!val || `${'กรุณากรอก กลุ่ม/ฝ่าย'}`]"
:readonly="!(status == 'checkRegister' || status == 'payment')" :label="`${'กลุ่ม/ฝ่าย'}`"
:borderless="!(status == 'checkRegister' || status == 'payment')" />
v-model="defaultOccupation.pile" </div>
:rules="[(val) => !!val || `${'กรุณากรอก กอง'}`]" <div class="col-4">
:label="`${'กอง'}`" <q-input
/> :class="
</div> getClass(
<div class="col-4"> status == 'checkRegister' || status == 'payment'
<q-input )
:class="getClass(status == 'checkRegister' || status == 'payment')" "
:outlined="status == 'checkRegister' || status == 'payment'" :outlined="
dense status == 'checkRegister' || status == 'payment'
lazy-rules "
autogrow dense
:readonly="!(status == 'checkRegister' || status == 'payment')" lazy-rules
:borderless="!(status == 'checkRegister' || status == 'payment')" autogrow
v-model="defaultOccupation.org" :readonly="
:rules="[(val) => !!val || `${'กรุณากรอก สังกัด'}`]" !(status == 'checkRegister' || status == 'payment')
:label="`${'สังกัด'}`" "
/> :borderless="
</div> !(status == 'checkRegister' || status == 'payment')
<div class="col-4"> "
<q-input v-model="defaultOccupation.pile"
:class="getClass(status == 'checkRegister' || status == 'payment')" :rules="[(val) => !!val || `${'กรุณากรอก กอง'}`]"
:outlined="status == 'checkRegister' || status == 'payment'" :label="`${'กอง'}`"
dense />
:counter=" </div>
status == 'checkRegister' || status == 'payment' ? true : false <div class="col-4">
" <q-input
maxlength="10" :class="
lazy-rules getClass(
type="tel" status == 'checkRegister' || status == 'payment'
mask="##########" )
autogrow "
:readonly="!(status == 'checkRegister' || status == 'payment')" :outlined="
:borderless="!(status == 'checkRegister' || status == 'payment')" status == 'checkRegister' || status == 'payment'
v-model="defaultOccupation.tel" "
:rules="[ dense
(val) => !!val || `${'กรุณากรอก เบอร์โทรที่ทำงาน'}`, lazy-rules
(val) => val.length == 10 || `${'กรุณากรอก เบอร์โทรที่ทำงาน'}`, autogrow
(val) => :readonly="
/^[0-9]*$/.test(val) || 'กรุณากรอก เบอร์โทรที่ทำงานให้ถูกต้อง', !(status == 'checkRegister' || status == 'payment')
]" "
:label="`${'เบอร์โทรที่ทำงาน'}`" :borderless="
/> !(status == 'checkRegister' || status == 'payment')
</div> "
</div> v-model="defaultOccupation.org"
</div> :rules="[(val) => !!val || `${'กรุณากรอก สังกัด'}`]"
</q-form> :label="`${'สังกัด'}`"
/>
</div>
<div class="col-4">
<q-input
:class="
getClass(
status == 'checkRegister' || status == 'payment'
)
"
:outlined="
status == 'checkRegister' || status == 'payment'
"
dense
:counter="
status == 'checkRegister' || status == 'payment'
? true
: false
"
maxlength="10"
lazy-rules
type="tel"
mask="##########"
autogrow
:readonly="
!(status == 'checkRegister' || status == 'payment')
"
:borderless="
!(status == 'checkRegister' || status == 'payment')
"
v-model="defaultOccupation.tel"
:rules="[
(val) =>
!!val || '* กรุณากรอกข้อมูลหมายเลขโทรศัพท์',
(val) =>
(val.length >= 9 && val.length <= 10) ||
'กรุณากรอกข้อมูลหมายเลขโทรศัพท์ให้ถูกต้อง',
]"
:label="`${'เบอร์โทรที่ทำงาน'}`"
/>
</div>
</div>
</div>
</q-form>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, watch } from "vue"; import { ref, onMounted, watch } from "vue";
@ -141,8 +212,8 @@ import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import type { Occupation } from "@/modules/03_recruiting/interface/index/Main"; import type { Occupation } from "@/modules/03_recruiting/interface/index/Main";
import { import {
defaultOccupation, defaultOccupation,
changeData, changeData,
} from "@/modules/03_recruiting/interface/index/Main"; } from "@/modules/03_recruiting/interface/index/Main";
import HeaderTop from "@/modules/03_recruiting/components/top.vue"; import HeaderTop from "@/modules/03_recruiting/components/top.vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
@ -151,14 +222,14 @@ import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
const props = defineProps({ const props = defineProps({
status: { status: {
type: String, type: String,
required: true, required: true,
}, },
form: { form: {
type: Object, type: Object,
required: true, required: true,
}, },
}); });
const $q = useQuasar(); const $q = useQuasar();
@ -173,43 +244,43 @@ const { messageError, showLoader, hideLoader } = mixin;
const emit = defineEmits(["update:form"]); const emit = defineEmits(["update:form"]);
watch(myform, async (count: any, prevCount: any) => { watch(myform, async (count: any, prevCount: any) => {
emit("update:form", count); emit("update:form", count);
}); });
watch(defaultOccupation, async (count: Occupation, prevCount: Occupation) => { watch(defaultOccupation, async (count: Occupation, prevCount: Occupation) => {
await changeData("occupation", count); await changeData("occupation", count);
}); });
onMounted(async () => { onMounted(async () => {
await fetchData(); await fetchData();
}); });
const fetchData = async () => { const fetchData = async () => {
showLoader(); showLoader();
await http await http
.get(config.API.candidateOccupation(candidateId.value)) .get(config.API.candidateOccupation(candidateId.value))
.then((res) => { .then((res) => {
const data = res.data.result; const data = res.data.result;
defaultOccupation.value.org = data.occupationOrg; defaultOccupation.value.org = data.occupationOrg;
defaultOccupation.value.pile = data.occupationPile; defaultOccupation.value.pile = data.occupationPile;
defaultOccupation.value.group = data.occupationGroup; defaultOccupation.value.group = data.occupationGroup;
defaultOccupation.value.salary = data.occupationSalary; defaultOccupation.value.salary = data.occupationSalary;
defaultOccupation.value.position = data.occupationPosition; defaultOccupation.value.position = data.occupationPosition;
defaultOccupation.value.positionType = data.occupationPositionType; defaultOccupation.value.positionType = data.occupationPositionType;
defaultOccupation.value.tel = data.occupationTelephone; defaultOccupation.value.tel = data.occupationTelephone;
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
}); });
}; };
const getClass = (val: boolean) => { const getClass = (val: boolean) => {
return { return {
"full-width inputgreen cursor-pointer": val, "full-width inputgreen cursor-pointer": val,
"full-width cursor-pointer": !val, "full-width cursor-pointer": !val,
}; };
}; };
</script> </script>