2023-11-07 15:06:48 +07:00
|
|
|
<script setup lang="ts">
|
2024-01-08 18:05:30 +07:00
|
|
|
import { ref, onMounted } from "vue"
|
|
|
|
|
import { useQuasar } from "quasar"
|
|
|
|
|
import { useRouter, useRoute } from "vue-router"
|
|
|
|
|
import { useLeaveStore } from "@/modules/05_leave/store"
|
|
|
|
|
import http from "@/plugins/http"
|
|
|
|
|
import config from "@/app.config"
|
|
|
|
|
import type { QForm } from "quasar"
|
|
|
|
|
import { useCounterMixin } from "@/stores/mixin"
|
2023-11-07 15:06:48 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
import FormPart2 from "@/modules/05_leave/components/FormLeave/Form.vue"
|
|
|
|
|
import SickForm from "@/modules/05_leave/components/FormLeave/01_SickForm.vue"
|
|
|
|
|
import FormBirth from "@/modules/05_leave/components/FormLeave/03_Birth.vue"
|
|
|
|
|
import HelpWifeBirthForm from "@/modules/05_leave/components/FormLeave/04_HelpWifeBirthForm.vue"
|
|
|
|
|
import VacationForm from "@/modules/05_leave/components/FormLeave/05_VacationForm.vue"
|
|
|
|
|
import OrdinationForm from "@/modules/05_leave/components/FormLeave/06_OrdinationForm.vue"
|
|
|
|
|
import HajjForm from "@/modules/05_leave/components/FormLeave/07_HajjForm.vue"
|
|
|
|
|
import MilitaryForm from "@/modules/05_leave/components/FormLeave/08_MilitaryForm.vue"
|
|
|
|
|
import StudyForm from "@/modules/05_leave/components/FormLeave/09_StudyForm.vue"
|
|
|
|
|
import TrainForm from "@/modules/05_leave/components/FormLeave/10_TrainForm.vue"
|
|
|
|
|
import WorkInternationalForm from "@/modules/05_leave/components/FormLeave/11_WorkInternationalForm.vue"
|
|
|
|
|
import FollowSpouseForm from "@/modules/05_leave/components/FormLeave/12_FollowSpouseForm.vue"
|
|
|
|
|
import RehabilitationForm from "@/modules/05_leave/components/FormLeave/13_RehabilitationForm.vue"
|
2023-11-07 15:06:48 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
const dataStore = useLeaveStore()
|
|
|
|
|
const { fetchLeaveType } = dataStore
|
|
|
|
|
const mixin = useCounterMixin()
|
|
|
|
|
const { dialogConfirm, success, messageError, showLoader, hideLoader } = mixin
|
2023-11-07 15:06:48 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
const router = useRouter()
|
|
|
|
|
const route = useRoute()
|
|
|
|
|
const myform = ref<QForm | null>(null)
|
|
|
|
|
const $q = useQuasar()
|
2023-11-07 15:06:48 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
const model = ref<string>("")
|
|
|
|
|
const modelSpecific = ref<string>("")
|
2023-11-07 15:06:48 +07:00
|
|
|
|
2023-12-08 09:41:02 +07:00
|
|
|
/**
|
|
|
|
|
* ดึงค่าประเภทการลาจาก Api
|
|
|
|
|
*/
|
2023-12-07 18:43:52 +07:00
|
|
|
async function fectOptionType() {
|
2024-01-08 18:05:30 +07:00
|
|
|
await http
|
|
|
|
|
.get(config.API.leaveType())
|
|
|
|
|
.then(async res => {
|
|
|
|
|
const data = res.data.result
|
|
|
|
|
await fetchLeaveType(data)
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
messageError($q, err)
|
|
|
|
|
})
|
2023-12-07 18:43:52 +07:00
|
|
|
}
|
2023-12-18 18:09:59 +07:00
|
|
|
|
|
|
|
|
function inputEdit(val: boolean) {
|
2024-01-08 18:05:30 +07:00
|
|
|
return {
|
|
|
|
|
"full-width cursor-pointer ": val,
|
|
|
|
|
"full-width cursor-pointer inputgreen": !val,
|
|
|
|
|
}
|
2023-12-18 18:09:59 +07:00
|
|
|
}
|
|
|
|
|
|
2024-01-04 15:17:42 +07:00
|
|
|
function onSubmit(postData: FormData) {
|
2024-01-08 18:05:30 +07:00
|
|
|
dialogConfirm($q, async () => {
|
|
|
|
|
showLoader()
|
|
|
|
|
await http
|
|
|
|
|
.post(config.API.leaveUser(), postData)
|
|
|
|
|
.then(res => {
|
|
|
|
|
router.push(`/leave/edit/${res.data.result.id}`)
|
|
|
|
|
success($q, "บันทึกสำเร็จ")
|
|
|
|
|
})
|
|
|
|
|
.catch((e: any) => {
|
|
|
|
|
messageError($q, e)
|
|
|
|
|
})
|
|
|
|
|
.finally(() => {
|
|
|
|
|
hideLoader()
|
|
|
|
|
})
|
|
|
|
|
})
|
2024-01-04 15:17:42 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onMounted(async () => {
|
2024-01-08 18:05:30 +07:00
|
|
|
if (dataStore.options.length == 0) {
|
|
|
|
|
await fectOptionType()
|
|
|
|
|
}
|
|
|
|
|
})
|
2023-11-07 15:06:48 +07:00
|
|
|
</script>
|
2023-11-09 16:00:55 +07:00
|
|
|
|
2023-11-07 15:06:48 +07:00
|
|
|
<template>
|
2024-01-08 18:05:30 +07:00
|
|
|
<div class="col-12 row justify-center">
|
|
|
|
|
<div class="col-xs-12 col-sm-12 col-md-11">
|
|
|
|
|
<div class="toptitle text-white col-12 row items-center">
|
|
|
|
|
<q-btn to="/leave" icon="mdi-arrow-left" unelevated round dense flat color="primary" class="q-mr-sm" />
|
|
|
|
|
<div>สร้างใบลา</div>
|
|
|
|
|
</div>
|
2024-01-04 15:17:42 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
<q-form ref="myform" class="col-12">
|
|
|
|
|
<q-card bordered>
|
|
|
|
|
<div class="col-12 row q-col-gutter-md q-pa-md">
|
|
|
|
|
<div class="col-xs-12 col-sm-12">
|
|
|
|
|
<div style="display: flex; align-items: center">
|
|
|
|
|
<q-icon name="mdi-numeric-1-circle" size="20px" color="primary" />
|
|
|
|
|
<div class="q-pl-sm text-weight-bold text-dark">เลือกประเภทการลา</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="q-py-sm q-px-lg">
|
|
|
|
|
<div class="row">
|
|
|
|
|
<q-select
|
|
|
|
|
dense
|
|
|
|
|
class="col-12 col-sm-6 col-md-4 inputgreen"
|
|
|
|
|
outlined
|
|
|
|
|
v-model="model"
|
|
|
|
|
:options="dataStore.options"
|
|
|
|
|
option-value="code"
|
|
|
|
|
option-label="name"
|
|
|
|
|
emit-value
|
|
|
|
|
map-options
|
|
|
|
|
prefix="ประเภทใบลา :"
|
|
|
|
|
@update:model-value="dataStore.typeConvert(model, null), (modelSpecific = ''), dataStore.fetchProfile()"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
2023-11-09 16:00:55 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
<div class="row q-mt-sm">
|
|
|
|
|
<div class="col-12 col-sm-6 col-md-3" v-if="model === 'LV-006' || model === 'LV-008'">
|
|
|
|
|
<q-select
|
|
|
|
|
dense
|
|
|
|
|
outlined
|
|
|
|
|
v-model="modelSpecific"
|
|
|
|
|
:options="model === 'LV-006' ? dataStore.optionsOrdination : dataStore.optionsSpecific"
|
|
|
|
|
option-value="code"
|
|
|
|
|
option-label="name"
|
|
|
|
|
emit-value
|
|
|
|
|
map-options
|
|
|
|
|
prefix="ประเภทการลา :"
|
|
|
|
|
@update:model-value="dataStore.typeConvert(model, modelSpecific)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-11-08 15:30:31 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
<div>
|
|
|
|
|
<div style="display: flex; align-items: center">
|
|
|
|
|
<q-icon name="mdi-numeric-2-circle" size="20px" color="primary" />
|
|
|
|
|
<div class="q-pl-sm text-weight-bold text-dark">ข้อมูลการลา</div>
|
|
|
|
|
</div>
|
|
|
|
|
<FormPart2 :model="model" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-11-09 16:00:55 +07:00
|
|
|
|
2024-01-08 18:05:30 +07:00
|
|
|
<div class="col-12">
|
|
|
|
|
<SickForm v-if="model === 'LV-001' || model === 'LV-002'" :on-submit="onSubmit" />
|
|
|
|
|
<FormBirth v-if="model === 'LV-003'" :on-submit="onSubmit" />
|
|
|
|
|
<HelpWifeBirthForm v-if="model === 'LV-004'" :on-submit="onSubmit" />
|
|
|
|
|
<VacationForm v-if="model === 'LV-005'" :on-submit="onSubmit" />
|
|
|
|
|
<OrdinationForm v-if="model === 'LV-006' && modelSpecific == 'b1'" :on-submit="onSubmit" />
|
|
|
|
|
<HajjForm v-if="model === 'LV-006' && modelSpecific == 'b2'" :on-submit="onSubmit" />
|
|
|
|
|
<MilitaryForm v-if="model === 'LV-007'" style="width: 100%" :on-submit="onSubmit" />
|
|
|
|
|
<StudyForm v-if="model === 'LV-008' && modelSpecific === 's1'" style="width: 100%" :on-submit="onSubmit" />
|
|
|
|
|
<TrainForm v-if="model === 'LV-008' && modelSpecific != 's1' && modelSpecific != ''" :on-submit="onSubmit" />
|
|
|
|
|
<WorkInternationalForm v-if="model === 'LV-009'" :on-submit="onSubmit" />
|
|
|
|
|
<FollowSpouseForm v-if="model === 'LV-010'" :on-submit="onSubmit" />
|
|
|
|
|
<RehabilitationForm v-if="model === 'LV-011'" :on-submit="onSubmit" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</q-card>
|
|
|
|
|
</q-form>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-11-07 15:06:48 +07:00
|
|
|
</template>
|