2023-03-16 19:57:00 +07:00
|
|
|
<!-- step กรอกข้อมูล -->
|
2023-03-15 14:20:18 +07:00
|
|
|
<template>
|
|
|
|
|
<div>
|
2023-03-30 13:42:08 +07:00
|
|
|
<Profile
|
|
|
|
|
:status="status"
|
|
|
|
|
v-model:formInformation="formInformation"
|
|
|
|
|
v-model:formAddress="formAddress"
|
|
|
|
|
v-model:formFamily="formFamily"
|
|
|
|
|
v-model:formOccupation="formOccupation"
|
|
|
|
|
/>
|
2023-03-29 16:39:45 +07:00
|
|
|
<div class="text-center q-pt-sm">
|
2023-03-15 14:20:18 +07:00
|
|
|
<q-checkbox
|
|
|
|
|
v-model="acceptTermOfUse"
|
2023-03-25 01:07:18 +07:00
|
|
|
:disable="(status !== 'register' && status !== 'rejectRegister') || statusEdit"
|
2023-03-19 00:43:28 +07:00
|
|
|
label="ข้าพเจ้ารับรองว่า ข้าพเจ้ามีคุณสมบัติครบถ้วนตามประกาศรับสมัคร ข้อความข้างต้นตรงตามความจริงทุกประการ"
|
2023-03-15 14:20:18 +07:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="row justify-center q-pa-md">
|
2023-03-28 14:51:48 +07:00
|
|
|
<q-btn
|
2023-03-29 16:39:45 +07:00
|
|
|
color="blue"
|
2023-03-28 14:51:48 +07:00
|
|
|
class="q-ml-md"
|
|
|
|
|
label="บันทึกข้อมูล"
|
2023-03-29 16:39:45 +07:00
|
|
|
outline
|
|
|
|
|
icon="mdi-content-save"
|
2023-04-10 16:32:53 +07:00
|
|
|
@click="clickSave"
|
2023-03-28 14:51:48 +07:00
|
|
|
v-if="status === 'register' || status === 'rejectRegister'"
|
|
|
|
|
:disable="!acceptTermOfUse || statusEdit"
|
2023-03-20 13:01:27 +07:00
|
|
|
/>
|
2023-03-15 14:20:18 +07:00
|
|
|
<q-btn
|
|
|
|
|
color="primary"
|
|
|
|
|
class="q-ml-md"
|
2023-03-29 16:39:45 +07:00
|
|
|
icon="mdi-check"
|
2023-03-15 14:20:18 +07:00
|
|
|
label="สมัครสอบ"
|
2023-03-21 16:30:02 +07:00
|
|
|
@click="okModalConfirm"
|
2023-03-28 14:51:48 +07:00
|
|
|
v-if="status === 'register' || status === 'rejectRegister'"
|
2023-03-21 12:06:30 +07:00
|
|
|
:disable="!acceptTermOfUse || statusEdit"
|
2023-03-15 14:20:18 +07:00
|
|
|
/>
|
2023-03-19 00:43:28 +07:00
|
|
|
</div>
|
2023-03-15 14:20:18 +07:00
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
2023-03-16 00:35:08 +07:00
|
|
|
<script setup lang="ts">
|
2023-03-30 22:37:24 +07:00
|
|
|
import { onMounted, ref } from 'vue'
|
2023-03-22 00:25:55 +07:00
|
|
|
import { useQuasar } from 'quasar'
|
|
|
|
|
import { useCounterMixin } from '@/stores/mixin'
|
2023-03-24 20:47:01 +07:00
|
|
|
import http from '@/plugins/http'
|
|
|
|
|
import config from '@/app.config'
|
2023-03-25 01:07:18 +07:00
|
|
|
import Profile from '@/modules/01_exam/components/Form/Profile.vue'
|
2023-03-29 12:54:32 +07:00
|
|
|
import { useRoute } from 'vue-router'
|
2023-03-30 13:42:08 +07:00
|
|
|
import {
|
|
|
|
|
defaultInformation,
|
|
|
|
|
defaultOccupation,
|
|
|
|
|
defaultAddress,
|
|
|
|
|
defaultFamily
|
|
|
|
|
} from '@/modules/01_exam/interface/index/Main'
|
2023-03-19 00:43:28 +07:00
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
fetchStep: {
|
|
|
|
|
type: Function,
|
|
|
|
|
default: () => console.log('not function')
|
|
|
|
|
},
|
2023-03-25 01:07:18 +07:00
|
|
|
status: {
|
|
|
|
|
type: String,
|
2023-03-19 00:43:28 +07:00
|
|
|
required: true
|
|
|
|
|
}
|
|
|
|
|
})
|
2023-03-15 14:20:18 +07:00
|
|
|
|
2023-03-22 00:25:55 +07:00
|
|
|
const $q = useQuasar()
|
|
|
|
|
const mixin = useCounterMixin() //เรียกฟังก์ชันกลาง
|
2023-03-30 13:42:08 +07:00
|
|
|
const { modalConfirm, modalError, success, dateToISO } = mixin
|
2023-03-16 00:35:08 +07:00
|
|
|
const loader = ref<boolean>(false)
|
2023-03-20 13:01:27 +07:00
|
|
|
const statusEdit = ref<boolean>(false)
|
2023-03-19 00:43:28 +07:00
|
|
|
const acceptTermOfUse = ref<boolean>(false)
|
2023-03-29 12:54:32 +07:00
|
|
|
const route = useRoute()
|
|
|
|
|
const examId = ref<string>(route.params.id.toString())
|
2023-04-05 00:59:05 +07:00
|
|
|
const positionId = ref<string>(route.params.positionId.toString())
|
2023-03-30 13:42:08 +07:00
|
|
|
const formInformation = ref<any>({})
|
|
|
|
|
const formAddress = ref<any>({})
|
|
|
|
|
const formFamily = ref<any>({})
|
|
|
|
|
const formOccupation = ref<any>({})
|
2023-04-06 22:52:53 +07:00
|
|
|
const saveAuto = ref<boolean>(false)
|
2023-03-19 00:43:28 +07:00
|
|
|
|
|
|
|
|
onMounted(async () => {
|
2023-04-06 03:05:54 +07:00
|
|
|
// if (props.status !== 'register') {
|
|
|
|
|
// acceptTermOfUse.value = true
|
|
|
|
|
// }
|
|
|
|
|
await fetchStatus()
|
2023-03-19 00:43:28 +07:00
|
|
|
})
|
|
|
|
|
|
2023-03-21 16:30:02 +07:00
|
|
|
const okModalConfirm = () => {
|
2023-03-20 13:01:27 +07:00
|
|
|
if (statusEdit.value == true) {
|
2023-03-22 00:25:55 +07:00
|
|
|
modalError($q, 'ไม่สามารถสมัครสอบได้', 'มีข้อมูลที่ยังไม่ถูกบันทึกข้อมูล')
|
2023-03-19 00:43:28 +07:00
|
|
|
} else {
|
2023-04-06 22:52:53 +07:00
|
|
|
saveAuto.value = true
|
2023-03-22 00:25:55 +07:00
|
|
|
modalConfirm(
|
|
|
|
|
$q,
|
|
|
|
|
'ยืนยันการสมัครสอบ?',
|
|
|
|
|
'เมื่อยืนยันการสมัครสอบแล้วจะไม่สามารถแก้ไขข้อมูลได้',
|
2023-04-06 22:52:53 +07:00
|
|
|
saveData
|
2023-03-22 00:25:55 +07:00
|
|
|
)
|
2023-03-19 00:43:28 +07:00
|
|
|
}
|
|
|
|
|
}
|
2023-04-06 22:52:53 +07:00
|
|
|
|
2023-04-06 03:05:54 +07:00
|
|
|
const fetchStatus = async () => {
|
|
|
|
|
loader.value = true
|
|
|
|
|
await http
|
2023-04-06 22:52:53 +07:00
|
|
|
.get(config.API.candidateCard(examId.value, positionId.value))
|
2023-04-06 03:05:54 +07:00
|
|
|
.then((res) => {
|
|
|
|
|
acceptTermOfUse.value = true
|
|
|
|
|
})
|
2023-04-09 04:21:22 +07:00
|
|
|
.catch(() => {
|
|
|
|
|
acceptTermOfUse.value = false
|
|
|
|
|
})
|
2023-04-06 03:05:54 +07:00
|
|
|
.finally(() => {
|
|
|
|
|
loader.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
2023-03-19 00:43:28 +07:00
|
|
|
|
2023-03-24 20:47:01 +07:00
|
|
|
const saveForm = async () => {
|
|
|
|
|
loader.value = true
|
|
|
|
|
await http
|
2023-04-05 00:59:05 +07:00
|
|
|
.get(config.API.candidateRegister(examId.value, positionId.value))
|
2023-03-24 20:47:01 +07:00
|
|
|
.then(() => {
|
2023-04-06 22:52:53 +07:00
|
|
|
// success($q, 'สมัครสอบสำเร็จสำเร็จ')
|
2023-03-24 20:47:01 +07:00
|
|
|
})
|
|
|
|
|
.catch(() => {})
|
|
|
|
|
.finally(async () => {
|
|
|
|
|
await props.fetchStep()
|
|
|
|
|
loader.value = false
|
|
|
|
|
})
|
2023-03-19 00:43:28 +07:00
|
|
|
}
|
|
|
|
|
|
2023-04-10 16:32:53 +07:00
|
|
|
const clickSave = async () => {
|
|
|
|
|
saveAuto.value = false
|
|
|
|
|
await saveData()
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-30 13:42:08 +07:00
|
|
|
const saveData = async () => {
|
|
|
|
|
await formInformation.value.validate().then(async (suc: boolean) => {
|
|
|
|
|
if (suc) {
|
|
|
|
|
await formAddress.value.validate().then(async (suc: boolean) => {
|
|
|
|
|
if (suc) {
|
|
|
|
|
await formFamily.value.validate().then(async (suc: boolean) => {
|
|
|
|
|
if (suc) {
|
|
|
|
|
await formOccupation.value.validate().then(async (suc: boolean) => {
|
|
|
|
|
if (suc) {
|
|
|
|
|
const type = ref<string | null>('')
|
|
|
|
|
if (defaultOccupation.value.status == 'official')
|
|
|
|
|
type.value = defaultOccupation.value.official
|
|
|
|
|
if (defaultOccupation.value.status == 'personnel')
|
|
|
|
|
type.value = defaultOccupation.value.personnel
|
|
|
|
|
if (defaultOccupation.value.status == 'officialsOther')
|
|
|
|
|
type.value = defaultOccupation.value.officialsOther
|
|
|
|
|
if (defaultOccupation.value.status == 'employee')
|
|
|
|
|
type.value = defaultOccupation.value.employee
|
|
|
|
|
if (defaultOccupation.value.status == 'other')
|
|
|
|
|
type.value = defaultOccupation.value.other
|
|
|
|
|
loader.value = true
|
|
|
|
|
await http
|
2023-04-05 00:59:05 +07:00
|
|
|
.post(config.API.candidateId(examId.value, positionId.value), {
|
2023-03-30 13:42:08 +07:00
|
|
|
prefixId: defaultInformation.value.prefixId,
|
|
|
|
|
lastName: defaultInformation.value.lastname,
|
|
|
|
|
citizenProvinceId: defaultInformation.value.provinceId,
|
|
|
|
|
citizenDistrictId: defaultInformation.value.districtId,
|
|
|
|
|
dateOfBirth:
|
|
|
|
|
defaultInformation.value.birthDate == null
|
|
|
|
|
? null
|
|
|
|
|
: dateToISO(defaultInformation.value.birthDate),
|
|
|
|
|
citizenDate:
|
|
|
|
|
defaultInformation.value.cardIdDate == null
|
|
|
|
|
? null
|
|
|
|
|
: dateToISO(defaultInformation.value.cardIdDate),
|
|
|
|
|
citizenId: defaultInformation.value.cardid,
|
|
|
|
|
firstName: defaultInformation.value.firstname,
|
2023-03-30 22:37:24 +07:00
|
|
|
relationshipId: defaultInformation.value.relationshipId,
|
2023-03-30 13:42:08 +07:00
|
|
|
nationality: defaultInformation.value.nationality,
|
|
|
|
|
email: defaultInformation.value.email,
|
|
|
|
|
mobilePhone: defaultInformation.value.phone,
|
|
|
|
|
telephone: defaultInformation.value.tel,
|
|
|
|
|
knowledge: defaultInformation.value.knowledge,
|
|
|
|
|
occupationType: defaultOccupation.value.status,
|
|
|
|
|
occupationCompany: defaultOccupation.value.company,
|
|
|
|
|
occupationDepartment: defaultOccupation.value.department,
|
|
|
|
|
occupationEmail: defaultOccupation.value.email,
|
|
|
|
|
occupationTelephone: defaultOccupation.value.tel,
|
|
|
|
|
occupationPosition: type.value,
|
|
|
|
|
registAddress: defaultAddress.value.address,
|
|
|
|
|
currentAddress: defaultAddress.value.addressC,
|
|
|
|
|
registProvinceId: defaultAddress.value.provinceId,
|
|
|
|
|
currentProvinceId: defaultAddress.value.provinceIdC,
|
|
|
|
|
registDistrictId: defaultAddress.value.districtId,
|
|
|
|
|
currentDistrictId: defaultAddress.value.districtIdC,
|
|
|
|
|
registSubDistrictId: defaultAddress.value.subdistrictId,
|
|
|
|
|
currentSubDistrictId: defaultAddress.value.subdistrictIdC,
|
|
|
|
|
registZipCode: defaultAddress.value.code,
|
|
|
|
|
currentZipCode: defaultAddress.value.codeC,
|
|
|
|
|
registSame:
|
|
|
|
|
defaultAddress.value.same == '1'
|
|
|
|
|
? true
|
|
|
|
|
: defaultAddress.value.same == '0'
|
|
|
|
|
? false
|
|
|
|
|
: null,
|
|
|
|
|
marryPrefixId: defaultFamily.value.prefixIdC,
|
|
|
|
|
marryFirstName: defaultFamily.value.firstnameC,
|
|
|
|
|
marryLastName: defaultFamily.value.lastnameC,
|
|
|
|
|
marryOccupation: defaultFamily.value.occupationC,
|
|
|
|
|
marryNationality: defaultFamily.value.nationalityC,
|
|
|
|
|
fatherPrefixId: defaultFamily.value.prefixIdM,
|
|
|
|
|
fatherFirstName: defaultFamily.value.firstnameM,
|
|
|
|
|
fatherLastName: defaultFamily.value.lastnameM,
|
|
|
|
|
fatherOccupation: defaultFamily.value.occupationM,
|
|
|
|
|
fatherNationality: defaultFamily.value.nationalityM,
|
|
|
|
|
motherPrefixId: defaultFamily.value.prefixIdF,
|
|
|
|
|
motherFirstName: defaultFamily.value.firstnameF,
|
|
|
|
|
motherLastName: defaultFamily.value.lastnameF,
|
|
|
|
|
motherOccupation: defaultFamily.value.occupationF,
|
|
|
|
|
motherNationality: defaultFamily.value.nationalityF,
|
|
|
|
|
marry:
|
|
|
|
|
defaultFamily.value.same == '1'
|
|
|
|
|
? true
|
|
|
|
|
: defaultFamily.value.same == '0'
|
|
|
|
|
? false
|
|
|
|
|
: null
|
|
|
|
|
})
|
2023-04-10 16:32:53 +07:00
|
|
|
.then(async () => {
|
2023-03-30 13:42:08 +07:00
|
|
|
success($q, 'บันทึกข้อมูลส่วนตัวสำเร็จ')
|
2023-04-10 16:32:53 +07:00
|
|
|
if (saveAuto.value) await saveForm()
|
2023-03-30 13:42:08 +07:00
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
// modalError.value = true
|
|
|
|
|
// modalErrorTittle.value = 'ไม่สามารถบันทึกข้อมูลร่างได้'
|
|
|
|
|
// modalErrorDetail.value = e.response.data.message
|
|
|
|
|
// statusCode.value = e.response.data.status
|
|
|
|
|
})
|
|
|
|
|
.finally(async () => {
|
|
|
|
|
loader.value = false
|
|
|
|
|
await props.fetchStep()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
2023-03-15 14:20:18 +07:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped></style>
|