เพิ่ม v-model

This commit is contained in:
setthawutttty 2023-10-05 11:58:28 +07:00
parent 12b9ad4a0d
commit cfbc431583

View file

@ -1,342 +1,479 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from "vue" import { ref, onMounted } from "vue";
import { useQuasar } from "quasar" import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router" import { useRouter, useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin" import { useCounterMixin } from "@/stores/mixin";
import http from "@/plugins/http" import http from "@/plugins/http";
import config from "@/app.config" import config from "@/app.config";
import type { QForm } from "quasar" import type { QForm } from "quasar";
const mixin = useCounterMixin() const mixin = useCounterMixin();
const { date2Thai, dateToISO, success, messageError, showLoader, hideLoader, fails } = mixin const {
const router = useRouter() date2Thai,
const route = useRoute() dateToISO,
const myform = ref<QForm | null>(null) success,
const $q = useQuasar() messageError,
const routeName = router.currentRoute.value.name showLoader,
const id = ref<string>("") hideLoader,
const fileDocDataUpload = ref<File[]>([]) fails,
const files = ref<any>() } = mixin;
const tranferOrg = ref("") const router = useRouter();
const dateCommand = ref<Date>(new Date()) const route = useRoute();
const dateLeave = ref<Date>(new Date()) const myform = ref<QForm | null>(null);
const noteReason = ref("") const $q = useQuasar();
const nameFile = ref<string>("") const routeName = router.currentRoute.value.name;
const model = ref(null) const id = ref<string>("");
const modelSpecific = ref(null) const fileDocDataUpload = ref<File[]>([]);
const files = ref<any>();
const tranferOrg = ref("");
const dateCommand = ref<Date>(new Date());
const locationAbsence = ref<string>("")
const levelStudy = ref<string>("")
const degree = ref<string>("")
const major = ref<string>("")
const educational = ref<string>("")
const studyPeriod = ref<string>("")
const country = ref<string>("")
const capital = ref<string>("")
const tel = ref<number>();
const detail = ref<string>();
const Writeat = ref<string>();
const dateLeaveStart = ref<Date>(new Date());
const dateLeaveEnd = ref<Date>(new Date());
const dateTotal = ref<number>();
const noteReason = ref("");
const nameFile = ref<string>("");
const model = ref(null);
const modelSpecific = ref(null);
const options = ref([ const options = ref([
"ลาป่วย", "ลาป่วย",
"ลากิจส่วนตัว", "ลากิจส่วนตัว",
"ลาคลอดบุตร", "ลาคลอดบุตร",
"ลาไปช่วยเหลือภริยาที่คลอดบุตร", "ลาไปช่วยเหลือภริยาที่คลอดบุตร",
"ลาพักผ่อน", "ลาพักผ่อน",
"ลาอุปสมบทหรือลาประกอบพิธีฮัจย์ฯ", "ลาอุปสมบทหรือลาประกอบพิธีฮัจย์ฯ",
"ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล", "ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล",
"ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน", "ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน",
"ลาไปปฎิบัติงานในองค์การระหว่างประเทศ", "ลาไปปฎิบัติงานในองค์การระหว่างประเทศ",
"ลาติดตามคู่สมรส", "ลาติดตามคู่สมรส",
"ลาไปฟื้นฟูสมรรถภาพด้านอาชีพ", "ลาไปฟื้นฟูสมรรถภาพด้านอาชีพ",
]) ]);
const optionsSpecific = ref(["ลาไปศึกษา", "ฝึกอบรม", "ปฎิบัติการวิจัย", "ดูงาน"]) const optionsSpecific = ref([
"ลาไปศึกษา",
"ฝึกอบรม",
"ปฎิบัติการวิจัย",
"ดูงาน",
]);
const dataDetail = ref<any>({ const dataDetail = ref<any>({
datetext: "", datetext: "",
activeDate: new Date(), activeDate: new Date(),
createdAt: new Date(), createdAt: new Date(),
firstName: "", firstName: "",
id: "", id: "",
isActive: true, isActive: true,
lastName: "", lastName: "",
location: "", location: "",
organizationPositionOld: "", organizationPositionOld: "",
positionLevelOld: "", positionLevelOld: "",
positionNumberOld: "", positionNumberOld: "",
positionTypeOld: "", positionTypeOld: "",
prefix: "", prefix: "",
profileId: "", profileId: "",
reason: "", reason: "",
salary: 0, salary: 0,
sendDate: new Date(), sendDate: new Date(),
status: "", status: "",
statustext: "", statustext: "",
fullname: "", fullname: "",
}) });
const clickBack = () => { const clickBack = () => {
router.push(`/retire`) router.push(`/retire`);
} };
const statusOrder = (val: boolean) => { const statusOrder = (val: boolean) => {
switch (val) { switch (val) {
case true: case true:
return "ยับยั้งการลาออก" return "ยับยั้งการลาออก";
case false: case false:
return "อนุมัติการลาออก" return "อนุมัติการลาออก";
} }
} };
onMounted(() => { onMounted(() => {
// if (route.params.id !== undefined) { // if (route.params.id !== undefined) {
// id.value = route.params.id.toString() // id.value = route.params.id.toString()
// fectDataresign(id.value) // fectDataresign(id.value)
// } // }
}) });
const saveResing = () => { const saveResing = () => {
$q.dialog({ $q.dialog({
title: "ยืนยันการยื่นข้อมูลลาออก", title: "ยืนยันการยื่นข้อมูลลาออก",
message: "ต้องการยื่นข้อมูลลาออกนี้ใช่หรือไม่?", message: "ต้องการยื่นข้อมูลลาออกนี้ใช่หรือไม่?",
cancel: { cancel: {
flat: true, flat: true,
color: "negative", color: "negative",
}, },
persistent: true, persistent: true,
}) })
.onOk(() => { .onOk(() => {
// createFormresign() // createFormresign()
}) })
.onCancel(() => {}) .onCancel(() => {})
.onDismiss(() => {}) .onDismiss(() => {});
};
const saveData = () => {
if(model.value !== 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'){
console.log(1)
} else if (model.value === 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน') {
console.log(2)
}
router.push(`/`);
} }
</script> </script>
<template> <template>
<div class="col-12 row justify-center"> <div class="col-12 row justify-center">
<div class="col-xs-12 col-sm-12 col-md-11"> <div class="col-xs-12 col-sm-12 col-md-11">
<div class="toptitle text-white col-12 row items-center"> <div class="toptitle text-white col-12 row items-center">
<q-btn icon="mdi-arrow-left" unelevated round dense flat color="primary" class="q-mr-sm" @click="router.go(-1)" /> <q-btn
<div>นใบลา</div> icon="mdi-arrow-left"
</div> unelevated
<q-form ref="myform" class="col-12"> round
<q-card bordered> dense
<div class="col-12 row q-col-gutter-md q-pa-md"> flat
<div class="col-xs-12 col-sm-12"> color="primary"
<div class="q-pl-sm text-weight-bold text-dark">เลอกประเภทการลา</div> class="q-mr-sm"
<div class="col-12 row q-pa-sm q-col-gutter-sm"> @click="router.push(`/leave`)"
<q-select dense class="q-ml-lg col-6" outlined v-model="model" :options="options" prefix="ประเภทใบลา :" /> />
</div> <div>นใบลา</div>
<div class="q-pl-sm text-weight-bold text-dark" v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'">เลือกประเภทใบลาศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน</div> </div>
<div class="col-12 row q-pa-sm q-col-gutter-sm" v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'"> <q-form ref="myform" class="col-12">
<q-select dense class="q-ml-lg col-6" outlined v-model="modelSpecific" :options="optionsSpecific" /> <q-card bordered>
</div> <div class="col-12 row q-col-gutter-md q-pa-md">
<div class="q-pl-sm text-weight-bold text-dark">กรอกขอม</div> <div class="col-xs-12 col-sm-12">
<q-card bordered class="q-pa-md bg-grey-1"> <div class="q-pl-sm text-weight-bold text-dark">
<div class="col-12 row q-pa-sm q-col-gutter-sm"> เลอกประเภทการลา
<datepicker </div>
class="col-2" <div class="col-12 row q-pa-sm q-col-gutter-sm">
menu-class-name="modalfix" <q-select
v-model="dateLeave" dense
:locale="'th'" class="q-ml-lg col-6"
autoApply outlined
borderless v-model="model"
:enableTimePicker="false" :options="options"
week-start="0" prefix="ประเภทใบลา :"
:readonly="routeName != 'addAbsence'" />
> </div>
<template #year="{ year }"> <div
{{ year + 543 }} class="q-pl-sm text-weight-bold text-dark"
</template> v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'"
<template #year-overlay-value="{ value }"> >
{{ parseInt(value + 543) }} เลอกประเภทใบลาศกษา กอบรม ปฎการว หรอดงาน
</template> </div>
<template #trigger> <div
<q-input class="col-12 row q-pa-sm q-col-gutter-sm"
outlined v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'"
dense >
hide-bottom-space <q-select
:readonly="routeName != 'addAbsence'" dense
class="full-width datepicker" class="q-ml-lg col-6"
:model-value="dateLeave != null ? date2Thai(dateLeave) : null" outlined
:label="`${'วันที่เริ่ม'}`" v-model="modelSpecific"
:rules="[val => !!val || `${'กรุณาเลือกวันที่เริ่มลา'}`]" :options="optionsSpecific"
> prefix="ประเภทใบลา :"
<template v-slot:prepend> />
<q-icon name="event" class="cursor-pointer" style="color: var(--q-primary)"> </q-icon> </div>
</template> <div class="q-pl-sm text-weight-bold text-dark">กรอกขอม</div>
</q-input> <q-card bordered class="q-pa-md bg-grey-1">
</template> <div class="col-12 row q-pa-sm q-col-gutter-sm">
</datepicker> <datepicker
<datepicker class="col-2"
class="col-2" menu-class-name="modalfix"
menu-class-name="modalfix" v-model="dateLeaveStart"
v-model="dateLeave" :locale="'th'"
:locale="'th'" autoApply
autoApply borderless
borderless :enableTimePicker="false"
:enableTimePicker="false" week-start="0"
week-start="0" :readonly="routeName != 'addAbsence'"
:readonly="routeName != 'addAbsence'" >
> <template #year="{ year }">
<template #year="{ year }"> {{ year + 543 }}
{{ year + 543 }} </template>
</template> <template #year-overlay-value="{ value }">
<template #year-overlay-value="{ value }"> {{ parseInt(value + 543) }}
{{ parseInt(value + 543) }} </template>
</template> <template #trigger>
<template #trigger> <q-input
<q-input outlined
outlined dense
dense hide-bottom-space
hide-bottom-space :readonly="routeName != 'addAbsence'"
:readonly="routeName != 'addAbsence'" class="full-width datepicker"
class="full-width datepicker" :model-value="
:model-value="dateLeave != null ? date2Thai(dateLeave) : null" dateLeaveStart != null
:label="`${'จนถึงวันที่'}`" ? date2Thai(dateLeaveStart)
:rules="[val => !!val || `${'กรุณาเลือกวันที่่สิ้นสุดการลา'}`]" : null
> "
<template v-slot:prepend> :label="`${'วันที่เริ่ม'}`"
<q-icon name="event" class="cursor-pointer" style="color: var(--q-primary)"> </q-icon> :rules="[
</template> (val) => !!val || `${'กรุณาเลือกวันที่เริ่มลา'}`,
</q-input> ]"
</template> >
</datepicker> <template v-slot:prepend>
<q-input <q-icon
class="col-2" name="event"
dense class="cursor-pointer"
outlined style="color: var(--q-primary)"
v-model="noteReason" >
label="จำนวนวัน(บันทึกลง ก.พ.7)" </q-icon>
:readonly="routeName != 'addAbsence'" </template>
:rules="[val => !!val || `${'กรุณากรอกจำนวนวัน'}`]" </q-input>
/> </template>
<q-input class="col-3" dense outlined v-model="noteReason" label="เขียนที่" :readonly="routeName != 'addAbsence'" :rules="[val => !!val || `${'เขียนที่'}`]" /> </datepicker>
<q-input <datepicker
class="col-3" class="col-2"
dense menu-class-name="modalfix"
outlined v-model="dateLeaveEnd"
v-model="noteReason" :locale="'th'"
label="หมายเลขโทรศัพท์ที่ติดต่อได้" autoApply
:readonly="routeName != 'addAbsence'" borderless
:rules="[val => !!val || `${'กรุณากรอกหมายเลขโทรศัพท์ที่ติดต่อได้'}`]" :enableTimePicker="false"
/> week-start="0"
<q-input :readonly="routeName != 'addAbsence'"
class="col-6" >
dense <template #year="{ year }">
outlined {{ year + 543 }}
v-model="noteReason" </template>
label="รายละเอียด" <template #year-overlay-value="{ value }">
:readonly="routeName != 'addAbsence'" {{ parseInt(value + 543) }}
:rules="[val => !!val || `${'กรุณากรอกรายละเอียด'}`]" </template>
/> <template #trigger>
<q-input <q-input
class="col-6" outlined
dense dense
outlined hide-bottom-space
v-model="noteReason" :readonly="routeName != 'addAbsence'"
label="สถาที่ติดต่อขณะลา" class="full-width datepicker"
:readonly="routeName != 'addAbsence'" :model-value="
:rules="[val => !!val || `${'กรุณากรอกสถาที่ติดต่อขณะลา'}`]" dateLeaveEnd != null ? date2Thai(dateLeaveEnd) : null
/> "
:label="`${'จนถึงวันที่'}`"
:rules="[
(val) =>
!!val || `${'กรุณาเลือกวันที่่สิ้นสุดการลา'}`,
]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
<q-input
class="col-2"
dense
outlined
type="number"
v-model="dateTotal"
label="จำนวนวัน(บันทึกลง ก.พ.7)"
:readonly="routeName != 'addAbsence'"
:rules="[(val) => !!val || `${'กรุณากรอกจำนวนวัน'}`]"
/>
<q-input
class="col-3"
dense
outlined
v-model="Writeat"
label="เขียนที่"
:readonly="routeName != 'addAbsence'"
:rules="[(val) => !!val || `${'เขียนที่'}`]"
/>
<q-input
class="col-3"
dense
outlined
v-model="tel"
mask="(###)-###-####"
unmasked-value
label="หมายเลขโทรศัพท์ที่ติดต่อได้"
:readonly="routeName != 'addAbsence'"
:rules="[
(val) =>
!!val || `${'กรุณากรอกหมายเลขโทรศัพท์ที่ติดต่อได้'}`,
]"
/>
<q-input
class="col-6"
dense
outlined
v-model="detail"
label="รายละเอียด"
:readonly="routeName != 'addAbsence'"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
/>
<q-input
class="col-6"
dense
outlined
v-model="locationAbsence"
label="สถาที่ติดต่อขณะลา"
:readonly="routeName != 'addAbsence'"
:rules="[
(val) => !!val || `${'กรุณากรอกสถาที่ติดต่อขณะลา'}`,
]"
/>
<q-input <q-input
class="col-4" class="col-4"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="ระดับที่ขอลาศึกษา" outlined
:readonly="routeName != 'addAbsence'" v-model="levelStudy"
/> label="ระดับที่ขอลาศึกษา"
:readonly="routeName != 'addAbsence'"
/>
<q-input <q-input
class="col-4" class="col-4"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="ชื่อปริญญา/ประกาศนียบัตร" outlined
:readonly="routeName != 'addAbsence'" v-model="degree"
/> label="ชื่อปริญญา/ประกาศนียบัตร"
:readonly="routeName != 'addAbsence'"
/>
<q-input <q-input
class="col-4" class="col-4"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="สาขาวิชาเอก/หลักสูตร/วิชา" outlined
:readonly="routeName != 'addAbsence'" v-model="major"
/> label="สาขาวิชาเอก/หลักสูตร/วิชา"
:readonly="routeName != 'addAbsence'"
/>
<q-input <q-input
class="col-4" class="col-4"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="ณ สถานศึกษา" outlined
:readonly="routeName != 'addAbsence'" v-model="educational"
/> label="ณ สถานศึกษา"
:readonly="routeName != 'addAbsence'"
/>
<q-input <q-input
class="col-4" class="col-4"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="ระยะเวลาในการศึกษาตลอดหลักสูตร" outlined
:readonly="routeName != 'addAbsence'" v-model="studyPeriod"
/> label="ระยะเวลาในการศึกษาตลอดหลักสูตร"
:readonly="routeName != 'addAbsence'"
/>
<q-input <q-input
class="col-4" class="col-4"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="ประเทศ" outlined
:readonly="routeName != 'addAbsence'" v-model="country"
/> label="ประเทศ"
:readonly="routeName != 'addAbsence'"
/>
<q-input <q-input
class="col-4" class="col-4"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="ด้วยทุน" outlined
:readonly="routeName != 'addAbsence'" v-model="capital"
/> label="ด้วยทุน"
:readonly="routeName != 'addAbsence'"
/>
<q-input <q-input
class="col-8" class="col-8"
v-if="model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'" v-if="
dense model == 'ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน'
outlined "
v-model="noteReason" dense
label="ที่มาของหลักสูตร" outlined
:readonly="routeName != 'addAbsence'" v-model="noteReason"
/> label="ที่มาของหลักสูตร"
:readonly="routeName != 'addAbsence'"
/>
<q-file v-model="files" dense label="เอกสารประกอบ" outlined use-chips multiple class="q-pl-sm col-6"> <q-file
<template v-slot:prepend> v-model="files"
<q-icon name="attach_file" color="primary" /> dense
</template> label="เอกสารประกอบ"
</q-file> outlined
use-chips
multiple
class="q-pl-sm col-6"
>
<template v-slot:prepend>
<q-icon name="attach_file" color="primary" />
</template>
</q-file>
<div class="col-12 row" v-if="routeName != 'addAbsence'"> <div class="col-12 row" v-if="routeName != 'addAbsence'">
<div class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"> <div
<div class="q-pl-sm text-weight-bold text-dark">เอกสารเพมเต</div> class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
</div> >
<q-card bordered flat class="full-width"> <div class="q-pl-sm text-weight-bold text-dark">
<q-list separator> เอกสารเพมเต
<q-item v-for="file in files" :key="file.key" class="q-my-xs"> </div>
<q-item-section> </div>
<q-item-label class="full-width ellipsis"> <q-card bordered flat class="full-width">
{{ file.fileName }} <q-list separator>
</q-item-label> <q-item
v-for="file in files"
:key="file.key"
class="q-my-xs"
>
<q-item-section>
<q-item-label class="full-width ellipsis">
{{ file.fileName }}
</q-item-label>
<q-item-label caption> </q-item-label> <q-item-label caption> </q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
</q-list> </q-list>
</q-card> </q-card>
</div> </div>
</div> </div>
</q-card> </q-card>
</div> </div>
<!-- <div class="row col-12 q-pa-md" v-if="routeName != 'addAbsence'"> <!-- <div class="row col-12 q-pa-md" v-if="routeName != 'addAbsence'">
<q-space /> <q-space />
<q-btn <q-btn
v-if="dataDetail.status !== 'DELETE' && dataDetail.status !== 'DONE'" v-if="dataDetail.status !== 'DELETE' && dataDetail.status !== 'DONE'"
@ -349,14 +486,26 @@ const saveResing = () => {
:disable="tranferOrg == '' && noteReason == ''" :disable="tranferOrg == '' && noteReason == ''"
/> />
</div> --> </div> -->
</div> </div>
<q-separator /> <q-separator />
<div class="row col-12 q-pa-md"> <div class="row col-12 q-pa-md">
<q-space /> <q-space />
<q-btn unelevated dense class="q-px-md items-center" color="primary" label="บันทึก" @click="saveData" :disable="tranferOrg == '' && noteReason == ''" /> <q-btn
</div> unelevated
</q-card> dense
</q-form> class="q-px-md items-center btnBlue"
</div> label="บันทึก"
</div> @click="saveData"
/>
</div>
</q-card>
</q-form>
</div>
</div>
</template> </template>
<style scoped lang="scss">
.btnBlue {
background-color: #016987;
color: #fff;
}
</style>