Merge branch 'develop' into devTee

This commit is contained in:
STW_TTTY\stwtt 2024-03-29 18:05:34 +07:00
commit 6a4bb43c69
31 changed files with 350 additions and 835 deletions

View file

@ -21,11 +21,9 @@ const profileStore = useProfileDataStore();
const $q = useQuasar();
const store = useRegistryNewDataStore();
const {
dialogRemove,
dialogConfirm,
success,
messageError,
showLoader,
hideLoader,
dialogMessageNotify,
date2Thai,
@ -54,24 +52,6 @@ const formData = reactive<FormAddPerson>({
birthDate: null,
});
const prefixRef = ref<object | null>(null);
const firstNameRef = ref<object | null>(null);
const lastNameRef = ref<object | null>(null);
const citizenIdRef = ref<object | null>(null);
const positionRef = ref<object | null>(null);
const posTypeIdRef = ref<object | null>(null);
const posLevelIdRef = ref<object | null>(null);
const objectRef: MyObjectRef = {
prefix: prefixRef,
firstName: firstNameRef,
lastName: lastNameRef,
citizenId: citizenIdRef,
position: positionRef,
posTypeId: posTypeIdRef,
posLevelId: posLevelIdRef,
};
function fetchPrefix() {
http
.get(config.API.orgPrefix)
@ -152,22 +132,6 @@ function clearFormData() {
formData.birthDate = null;
}
function validateForm() {
const hasError = [];
for (const key in objectRef) {
if (Object.prototype.hasOwnProperty.call(objectRef, key)) {
const property = objectRef[key];
if (property.value && typeof property.value.validate === "function") {
const isValid = property.value.validate();
hasError.push(isValid);
}
}
}
if (hasError.every((result) => result === true)) {
onSubmit();
}
}
async function onSubmit() {
dialogConfirm($q, async () => {
await http
@ -209,35 +173,38 @@ watch(
<template>
<q-dialog v-model="modal" persistent>
<q-card style="min-width: 350px">
<form @submit.prevent="validateForm">
<q-form @submit.prevent @validation-success="onSubmit()" greedy>
<q-card-section class="flex justify-between" style="padding: 0">
<DialogHeader tittle="เพิ่มข้อมูล" :close="closeDialog" />
</q-card-section>
<q-separator />
<q-card-section class="q-pa-md q-col-gutter-md">
<div class="row q-gutter-sm">
<div class="col">
<q-select
bg-color="white"
ref="prefixRef"
v-model="formData.prefix"
label="คำนำหน้าชื่อ"
outlined
dense
lazy-rules
:options="prefixOps"
option-label="name"
option-value="id"
map-options
hide-bottom-space
:rules="[(val) => !!val || 'กรุณาเลือกคำนำหน้าชื่อ']"
:rules="[
(val) => {
console.log(val);
return val.length > 0 || 'กรุณาเลือกคำนำหน้าชื่อ';
},
]"
emit-value
/>
</div>
<div class="col">
<q-select
bg-color="white"
ref="prefixRef"
v-model="formData.rank"
label="ยศ"
outlined
@ -253,7 +220,6 @@ watch(
</div>
<q-input
bg-color="white"
ref="firstNameRef"
outlined
v-model="formData.firstName"
label="ชื่อ"
@ -265,7 +231,6 @@ watch(
/>
<q-input
bg-color="white"
ref="lastNameRef"
outlined
v-model="formData.lastName"
label="นามสกุล"
@ -277,7 +242,6 @@ watch(
/>
<q-input
bg-color="white"
ref="citizenIdRef"
outlined
v-model="formData.citizenId"
label="เลขประจำตัวประชาชน"
@ -295,51 +259,6 @@ watch(
mask="#############"
@update:model-value="changeCardID"
/>
<q-input
bg-color="white"
ref="positionRef"
outlined
v-model="formData.position"
label="ตำแหน่ง"
dense
lazy-rules
borderless
:rules="[(val) => val.length > 0 || 'กรุณากรอกตำแหน่ง']"
hide-bottom-space
/>
<q-select
bg-color="white"
ref="posTypeIdRef"
v-model="formData.posTypeId"
label="ประเภทตำแหน่ง"
outlined
:options="store.posTypeOps"
dense
options-cover
map-options
emit-value
option-label="name"
option-value="id"
hide-bottom-space
:rules="[(val) => !!val || 'กรุณาเลือกประเภทตำแหน่ง']"
@update:model-value="fetchLevel"
/>
<q-select
bg-color="white"
ref="posLevelIdRef"
v-model="formData.posLevelId"
label="ระดับตำแหน่ง"
:options="levelOps"
outlined
dense
map-options
emit-value
option-label="posLevelName"
option-value="id"
options-cover
hide-bottom-space
:rules="[(val) => !!val || 'กรุณาเลือกระดับตำแหน่ง']"
/>
<div class="row q-col-gutter-sm">
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
@ -359,7 +278,6 @@ watch(
<template #trigger>
<q-input
for="inputDatereceive"
ref="dateReceivedRef"
outlined
dense
hide-bottom-space
@ -399,6 +317,48 @@ watch(
/>
</div>
</div>
<q-input
bg-color="white"
outlined
v-model="formData.position"
label="ตำแหน่ง"
dense
lazy-rules
borderless
:rules="[(val) => val.length > 0 || 'กรุณากรอกตำแหน่ง']"
hide-bottom-space
/>
<q-select
bg-color="white"
v-model="formData.posTypeId"
label="ประเภทตำแหน่ง"
outlined
:options="store.posTypeOps"
dense
options-cover
map-options
emit-value
option-label="name"
option-value="id"
hide-bottom-space
:rules="[(val) => !!val || 'กรุณาเลือกประเภทตำแหน่ง']"
@update:model-value="fetchLevel"
/>
<q-select
bg-color="white"
v-model="formData.posLevelId"
label="ระดับตำแหน่ง"
:options="levelOps"
outlined
dense
map-options
emit-value
option-label="posLevelName"
option-value="id"
options-cover
hide-bottom-space
:rules="[(val) => !!val || 'กรุณาเลือกระดับตำแหน่ง']"
/>
</q-card-section>
<q-separator />
@ -415,7 +375,7 @@ watch(
<q-tooltip>นทกขอม</q-tooltip>
</q-btn>
</q-card-actions>
</form>
</q-form>
</q-card>
</q-dialog>
</template>

View file

@ -9,6 +9,7 @@ import type { RequestItemsObject } from "@/modules/04_registryNew/interface/requ
import type { ResponseObject } from "@/modules/04_registryNew/interface/response/ProfesLicense";
import http from "@/plugins/http";
import config from "@/app.config";
import { log } from "console";
const mixin = useCounterMixin();
const $q = useQuasar();
const {
@ -179,7 +180,7 @@ const profesLicenseData = reactive<RequestItemsObject>({
issuer: "",
certificateNo: "",
issueDate: new Date(),
expireDate: new Date(),
expireDate: null,
profileId: id.value,
});
@ -244,7 +245,7 @@ async function fetchData(id: string) {
}
function clearForm() {
profesLicenseData.expireDate = new Date();
profesLicenseData.expireDate = null;
profesLicenseData.issueDate = new Date();
profesLicenseData.certificateNo = "";
profesLicenseData.certificateType = "";
@ -297,21 +298,21 @@ async function editData(idData: string) {
});
}
function deleteData(idData: string) {
dialogRemove($q, () =>
http
.delete(config.API.profileNewCertificateByCertificateId(idData))
.then(() => {
fetchData(id.value);
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
})
);
}
// function deleteData(idData: string) {
// dialogRemove($q, () =>
// http
// .delete(config.API.profileNewCertificateByCertificateId(idData))
// .then(() => {
// fetchData(id.value);
// })
// .catch((err) => {
// messageError($q, err);
// })
// .finally(() => {
// hideLoader();
// })
// );
// }
async function fetchHistoryData(id: string) {
showLoader();
@ -465,7 +466,7 @@ onMounted(async () => {
>
<q-tooltip>ประวแกไขใบอนญาตประกอบวชาช</q-tooltip>
</q-btn>
<q-btn
<!-- <q-btn
color="red"
flat
dense
@ -477,7 +478,7 @@ onMounted(async () => {
v-close-popup
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-btn> -->
</q-td>
</q-tr>
</template>
@ -529,26 +530,6 @@ onMounted(async () => {
</q-card>
</div>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="dialog" class="dialog" persistent>
@ -569,6 +550,7 @@ onMounted(async () => {
label="ชื่อใบอนุญาต"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกชื่อใบอนุญาต'}`]"
hide-bottom-space
/>
@ -580,6 +562,7 @@ onMounted(async () => {
label="หน่วยงานผู้ออกใบอนุญาต"
bg-color="white"
dense
class="inputgreen"
:rules="[
(val) => !!val || `${'กรุณากรอกหน่วยงานผู้ออกใบอนุญาต'}`,
]"
@ -594,6 +577,7 @@ onMounted(async () => {
v-model="profesLicenseData.certificateNo"
label="เลขที่ใบอนุญาต"
bg-color="white"
class="inputgreen"
dense
:rules="[(val) => !!val || `${'กรุณากรอกเลขที่ใบอนุญาต'}`]"
hide-bottom-space
@ -617,6 +601,7 @@ onMounted(async () => {
<q-input
dense
lazy-rules
class="inputgreen"
outlined
bg-color="white"
hide-bottom-space
@ -662,6 +647,9 @@ onMounted(async () => {
dense
outlined
bg-color="white"
class="inputgreen"
clearable
@clear="() => (profesLicenseData.expireDate = null)"
hide-bottom-space
:model-value="
profesLicenseData.expireDate
@ -669,6 +657,7 @@ onMounted(async () => {
: ''
"
:label="`${'วันที่หมดอายุ'}`"
@update:modelValue="profesLicenseData.expireDate"
>
<template v-slot:prepend>
<q-icon
@ -774,26 +763,6 @@ onMounted(async () => {
</q-td>
</q-tr>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -295,12 +295,12 @@ const trainData = reactive<RequestItemsObject>({
profileId: id.value,
name: "",
topic: "",
yearly: new Date().getFullYear(),
yearly: null,
place: "",
duration: "",
department: "",
numberOrder: "",
dateOrder: new Date(),
dateOrder: null,
startDate: new Date(),
endDate: new Date(),
startYear: new Date().getFullYear(),
@ -360,7 +360,7 @@ function clearForm() {
isDate.value = "false";
trainData.name = "";
trainData.topic = "";
trainData.yearly = new Date().getFullYear();
trainData.yearly = null;
trainData.place = "";
trainData.duration = "";
trainData.department = "";
@ -690,26 +690,6 @@ onMounted(async () => {
</q-card>
</div>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="dialog" class="dialog" persistent>
@ -731,6 +711,7 @@ onMounted(async () => {
label="ชื่อโครงการ/หลักสูตรการฝึกอบรม"
bg-color="white"
dense
class="inputgreen"
:rules="[
(val) =>
!!val || `${'กรุณากรอกชื่อโครงการ/หลักสูตรการฝึกอบรม'}`,
@ -741,6 +722,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.topic"
label="หัวข้อการฝึกอบรม/ดูงาน"
bg-color="white"
@ -800,6 +782,7 @@ onMounted(async () => {
dense
lazy-rules
outlined
class="inputgreen"
hide-bottom-space
:model-value="trainData.startYear + 543"
:rules="[
@ -844,6 +827,7 @@ onMounted(async () => {
<q-input
dense
lazy-rules
class="inputgreen"
outlined
hide-bottom-space
:model-value="trainData.finishYear + 543"
@ -891,6 +875,7 @@ onMounted(async () => {
outlined
dense
lazy-rules
class="inputgreen"
:model-value="date2Thai(trainData.startDate)"
:rules="[
(val) =>
@ -936,6 +921,7 @@ onMounted(async () => {
outlined
dense
lazy-rules
class="inputgreen"
:model-value="date2Thai(trainData.endDate)"
:rules="[
(val) =>
@ -978,8 +964,11 @@ onMounted(async () => {
dense
lazy-rules
outlined
class="inputgreen"
hide-bottom-space
:model-value="trainData.yearly + 543"
:model-value="
!!trainData.yearly ? trainData.yearly + 543 : null
"
:label="`${'ปีงบประมาณ'}`"
>
<template v-slot:prepend>
@ -1000,6 +989,7 @@ onMounted(async () => {
v-model="trainData.place"
label="สถานที่ฝึกอบรม/ดูงาน"
bg-color="white"
class="inputgreen"
dense
:rules="[
(val) => !!val || `${'กรุณากรอกสถานที่ฝึกอบรม/ดูงาน'}`,
@ -1012,6 +1002,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.duration"
label="รวมระยะเวลาในการฝึกอบรม/ดูงาน"
bg-color="white"
@ -1021,6 +1012,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.department"
label="หน่วยงานที่รับผิดชอบจัดการฝึกอบรม/ดูงาน"
bg-color="white"
@ -1031,6 +1023,7 @@ onMounted(async () => {
<div class="row q-px-md q-mb-sm q-gutter-sm">
<div class="col">
<q-input
class="inputgreen"
outlined
v-model="trainData.numberOrder"
label="เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"
@ -1055,6 +1048,7 @@ onMounted(async () => {
<q-input
outlined
dense
class="inputgreen"
lazy-rules
:model-value="date2Thai(trainData.dateOrder)"
hide-bottom-space
@ -1164,26 +1158,6 @@ onMounted(async () => {
</q-td>
</q-tr>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -789,26 +789,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="modal" persistent>
@ -1218,26 +1198,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -531,26 +531,6 @@ watch(
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="modal" persistent>
@ -849,26 +829,6 @@ watch(
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -583,26 +583,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="modal" persistent>
@ -895,26 +875,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -276,22 +276,22 @@ async function editData(idData: string) {
});
}
function deleteData(idData: string) {
dialogRemove($q, () =>
http
.delete(config.API.profileNewDisciplineByDisciplineId(idData))
.then(() => {
fetchData(profileId.value);
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
})
);
}
// function deleteData(idData: string) {
// dialogRemove($q, () =>
// http
// .delete(config.API.profileNewDisciplineByDisciplineId(idData))
// .then(() => {
// fetchData(profileId.value);
// success($q, "");
// })
// .catch((err) => {
// messageError($q, err);
// })
// .finally(() => {
// hideLoader();
// })
// );
// }
/**
* กดเลอกขอมลทจะแกไข
* @param props props ใน row เลอก
@ -467,7 +467,7 @@ onMounted(async () => {
>
<q-tooltip>ประวแกไขว</q-tooltip>
</q-btn>
<q-btn
<!-- <q-btn
color="red"
flat
dense
@ -479,7 +479,7 @@ onMounted(async () => {
v-close-popup
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-btn> -->
</q-td>
</q-tr>
</template>
@ -573,26 +573,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<!-- dialog add edit -->
@ -725,10 +705,12 @@ onMounted(async () => {
ref="dateRef"
class="full-width inputgreen cursor-pointer"
outlined
clearable
dense
:model-value="date2Thai(disciplineData.refCommandDate)"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="disciplineData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon

View file

@ -280,26 +280,6 @@ watch(modal, (status) => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -55,7 +55,6 @@ const formFilter = reactive<FormFilter>({
isProbation: false,
});
const modal = ref<boolean>(false);
const edit = ref<boolean>(false);
const modalHistory = ref<boolean>(false);
@ -252,7 +251,11 @@ function openDialogEdit(props: DetailData) {
edit.value = true;
modal.value = true;
id.value = props.id;
typeLeave.value = {id:props.typeLeaveId,name:props.typeLeave,code:props.code};
typeLeave.value = {
id: props.typeLeaveId,
name: props.typeLeave,
code: props.code,
};
statLeave.value = props.status;
reason.value = props.reason;
dateRange.value = [
@ -392,7 +395,7 @@ const editData = async () => {
http
.patch(config.API.profileNewLeaveById(id.value), {
leaveTypeId: typeLeave.value.id,
dateLeaveStart : dateToISO(dateRange.value[0]),
dateLeaveStart: dateToISO(dateRange.value[0]),
dateLeaveEnd: dateToISO(dateRange.value[1]),
leaveDays: numLeave.value,
leaveCount: 0,
@ -545,11 +548,7 @@ onMounted(() => {
</template>
<template v-slot:body="props" v-if="mode === 'table'">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.id"
@click="openDialogEdit(props.row)"
>
<q-td v-for="col in props.cols" :key="col.id">
<div v-if="col.name === 'no'">
{{
(formFilter.page - 1) * formFilter.pageSize + props.rowIndex + 1
@ -568,6 +567,19 @@ onMounted(() => {
</div>
</q-td>
<q-td auto-width>
<q-btn
color="primary"
flat
dense
round
class="q-mr-xs"
size="14px"
icon="mdi-pencil-outline"
clickable
@click="openDialogEdit(props.row)"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<q-btn
color="info"
flat
@ -594,7 +606,7 @@ onMounted(() => {
flat
round
@click="openDialogEdit(props.row)"
><q-tooltip>แกไข</q-tooltip></q-btn
><q-tooltip>แกไขอม</q-tooltip></q-btn
>
<q-btn
color="info"
@ -659,26 +671,6 @@ onMounted(() => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<!-- dialog add edit -->
@ -760,7 +752,6 @@ onMounted(() => {
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
ref="numLeaveRef"
class="full-width inputgreen cursor-pointer"
outlined

View file

@ -322,26 +322,6 @@ watch(modal, (status) => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -247,22 +247,22 @@ async function editData(idData: string) {
/** ลบข้อมูล */
function deleteData(idData: string) {
dialogRemove($q, () =>
http
.delete(config.API.profileNewDutyByDutyId(idData))
.then(() => {
fetchData(profileId.value);
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
})
);
}
// function deleteData(idData: string) {
// dialogRemove($q, () =>
// http
// .delete(config.API.profileNewDutyByDutyId(idData))
// .then(() => {
// fetchData(profileId.value);
// success($q, "");
// })
// .catch((err) => {
// messageError($q, err);
// })
// .finally(() => {
// hideLoader();
// })
// );
// }
/** กด Submit */
@ -421,7 +421,7 @@ onMounted(async () => {
>
<q-tooltip>ประวแกไขปฏราชการพเศษ</q-tooltip>
</q-btn>
<q-btn
<!-- <q-btn
color="red"
flat
dense
@ -433,7 +433,7 @@ onMounted(async () => {
v-close-popup
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-btn> -->
</q-td>
</q-tr>
</template>
@ -521,26 +521,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="modal" persistent>
@ -702,6 +682,8 @@ onMounted(async () => {
"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
clearable
@clear="dutyData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon

View file

@ -281,26 +281,6 @@ watch(modal, (status) => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -395,26 +395,6 @@ onMounted(() => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<!-- dialog add edit -->

View file

@ -218,26 +218,6 @@ watch(modal, (status) => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -599,7 +599,6 @@ onMounted(async () => {
lazy-rules
hide-bottom-space
readonly
class="inputgreen"
v-model="age"
:label="dataLabel.age"
/>
@ -839,26 +838,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -8,7 +8,6 @@ import http from "@/plugins/http";
import config from "@/app.config";
import dialogHeader from "@/components/DialogHeader.vue";
import { useCounterMixin } from "@/stores/mixin";
import HistoryTable from "@/components/TableHistory.vue";
import type { ResponseObject } from "@/components/information/interface/response/OldName";
import type { Pagination } from "@/modules/04_registryNew/interface/index/Main";
import type { RequestItemsObject } from "@/components/information/interface/request/OldName";
@ -229,14 +228,6 @@ function closeDialog() {
dialog.value = false;
}
// function clearForm() {
// changeNameData.status = "";
// changeNameData.prefix = "";
// changeNameData.firstName = "";
// changeNameData.lastName = "";
// alertUpload.value = false;
// }
async function onSubmit() {
if (!!fileUpload.value) {
await dialogConfirm(
@ -381,22 +372,22 @@ function editData(idData: string) {
});
}
function deleteData(idData: string) {
dialogRemove($q, () =>
http
.delete(config.API.profileNewChangeNameByChangeNameId(idData))
.then(() => {
fetchData(profileId.value);
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
})
);
}
// function deleteData(idData: string) {
// dialogRemove($q, () =>
// http
// .delete(config.API.profileNewChangeNameByChangeNameId(idData))
// .then(() => {
// fetchData(profileId.value);
// success($q, "");
// })
// .catch((err) => {
// messageError($q, err);
// })
// .finally(() => {
// hideLoader();
// })
// );
// }
function deleteFileData(idData: string) {
http
@ -588,7 +579,9 @@ function filterSelector(val: string, update: Function, refData: string) {
size="14px"
icon="mdi-file-document-outline"
@click="fetchProfile(props.row.id)"
/>
>
<q-tooltip>ดาวนโหลด</q-tooltip>
</q-btn>
<q-btn
color="primary"
flat
@ -616,8 +609,10 @@ function filterSelector(val: string, update: Function, refData: string) {
@click="
() => (fetchHistoryData(props.row.id), (historyDialog = true))
"
/>
<q-btn
>
<q-tooltip>ประวการเปลยนช-นามสก</q-tooltip>
</q-btn>
<!-- <q-btn
color="red"
flat
dense
@ -629,30 +624,10 @@ function filterSelector(val: string, update: Function, refData: string) {
v-close-popup
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-btn> -->
</q-td>
</q-tr>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="dialog" class="dialog" persistent>
@ -701,6 +676,17 @@ function filterSelector(val: string, update: Function, refData: string) {
:options="store.Ops.prefixOps"
label="คำนำหน้าชื่อ"
dense
:class="
!changeNameData.status ||
(changeNameData.status !== 'เปลี่ยนคำนำหน้าชื่อ' &&
changeNameData.status !== 'เปลี่ยนคำนำหน้าชื่อ และชื่อ' &&
changeNameData.status !==
'เปลี่ยนคำนำหน้าชื่อ และนามสกุล' &&
changeNameData.status !==
'เปลี่ยนคำนำหน้าชื่อ และชื่อ-นามสกุล')
? ''
: 'inputgreen'
"
outlined
use-input
lazy-rules
@ -731,6 +717,16 @@ function filterSelector(val: string, update: Function, refData: string) {
label="ชื่อ"
bg-color="white"
dense
:class="
!changeNameData.status ||
(changeNameData.status !== 'เปลี่ยนชื่อ' &&
changeNameData.status !== 'เปลี่ยนคำนำหน้าชื่อ และชื่อ' &&
changeNameData.status !== 'เปลี่ยนชื่อ-นามสกุล' &&
changeNameData.status !==
'เปลี่ยนคำนำหน้าชื่อ และชื่อ-นามสกุล')
? ''
: 'inputgreen'
"
:rules="[(val) => !!val || `${'กรุณากรอกชื่อ'}`]"
hide-bottom-space
/>
@ -751,6 +747,17 @@ function filterSelector(val: string, update: Function, refData: string) {
label="นามสกุล"
bg-color="white"
dense
:class="
!changeNameData.status ||
(changeNameData.status !== 'เปลี่ยนนามสกุล' &&
changeNameData.status !== 'เปลี่ยนชื่อ-นามสกุล' &&
changeNameData.status !==
'เปลี่ยนคำนำหน้าชื่อ และนามสกุล' &&
changeNameData.status !==
'เปลี่ยนคำนำหน้าชื่อ และชื่อ-นามสกุล')
? ''
: 'inputgreen'
"
:rules="[(val) => !!val || `${'กรุณากรอกนามสกุล'}`]"
hide-bottom-space
/>
@ -869,7 +876,7 @@ function filterSelector(val: string, update: Function, refData: string) {
<q-card style="min-width: 70%" class="bg-white">
<q-card-section class="flex justify-between" style="padding: 0">
<dialog-header
tittle="ประวัติแก้ไขประวัติการศึกษา"
tittle="ประวัติแก้ไขการเปลี่ยนชื่อ-นามสกุล"
:close="closeHistoryDialog"
/>
</q-card-section>
@ -939,26 +946,6 @@ function filterSelector(val: string, update: Function, refData: string) {
<q-td auto-width> </q-td>
</q-tr>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -662,7 +662,6 @@ onMounted(async () => {
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="formData.registrationZipCode"
:label="dataLabel.registrationZipCode"
/>
@ -784,7 +783,6 @@ onMounted(async () => {
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="formData.currentZipCode"
:label="dataLabel.registrationZipCode"
/>
@ -903,26 +901,6 @@ onMounted(async () => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -505,6 +505,10 @@ onMounted(async () => {
v-model="fatherData.citizenId"
:label="`${'เลขประจำตัวประชาชน'}`"
maxlength="13"
:rules="[
(val) => val.length === 13 || 'กรุณากรอกเลขบัตรประชาชน',
]"
class="inputgreen"
mask="#############"
/>
</div>
@ -516,11 +520,11 @@ onMounted(async () => {
lazy-rules
hidden-space
dense
class="inputgreen"
:rules="[(val) => !!val || 'กรุณาเลือกคำนำหน้าชื่อ']"
label="คำนำหน้าชื่อ"
v-model="fatherData.prefix"
use-input
clearable
input-debounce="0"
emit-value
map-options
@ -538,6 +542,7 @@ onMounted(async () => {
outlined
dense
bg-color="white"
class="inputgreen"
lazy-rules
v-model="fatherData.firstName"
:rules="[(val) => !!val || 'กรุณากรอกชื่อ']"
@ -550,6 +555,7 @@ onMounted(async () => {
:disable="!fatherData.isHaveInfo"
outlined
dense
class="inputgreen"
bg-color="white"
lazy-rules
v-model="fatherData.lastName"
@ -562,6 +568,7 @@ onMounted(async () => {
:disable="!fatherData.isHaveInfo"
outlined
dense
class="inputgreen"
bg-color="white"
v-model="fatherData.job"
label="อาชีพ"
@ -634,6 +641,10 @@ onMounted(async () => {
v-model="motherData.citizenId"
:label="`${'เลขประจำตัวประชาชน'}`"
maxlength="13"
:rules="[
(val) => val.length === 13 || 'กรุณากรอกเลขบัตรประชาชน',
]"
class="inputgreen"
mask="#############"
/>
</div>
@ -648,8 +659,8 @@ onMounted(async () => {
:rules="[(val) => !!val || 'กรุณาเลือกคำนำหน้าชื่อ']"
label="คำนำหน้าชื่อ"
hidden-space
class="inputgreen"
use-input
clearable
input-debounce="0"
emit-value
map-options
@ -666,6 +677,7 @@ onMounted(async () => {
:disable="!motherData.isHaveInfo"
outlined
dense
class="inputgreen"
bg-color="white"
lazy-rules
v-model="motherData.firstName"
@ -678,6 +690,7 @@ onMounted(async () => {
<q-input
:disable="!motherData.isHaveInfo"
outlined
class="inputgreen"
dense
bg-color="white"
lazy-rules
@ -690,6 +703,7 @@ onMounted(async () => {
<q-input
:disable="!motherData.isHaveInfo"
outlined
class="inputgreen"
dense
bg-color="white"
v-model="motherData.job"
@ -760,9 +774,13 @@ onMounted(async () => {
hide-bottom-space
bg-color="white"
dense
class="inputgreen"
v-model="spouseData.citizenId"
:label="`${'เลขประจำตัวประชาชน'}`"
maxlength="13"
:rules="[
(val) => val.length === 13 || 'กรุณากรอกเลขบัตรประชาชน',
]"
mask="#############"
/>
</div>
@ -770,6 +788,7 @@ onMounted(async () => {
<q-select
:disable="!spouseData.isHave"
outlined
class="inputgreen"
bg-color="white"
lazy-rules
dense
@ -778,7 +797,6 @@ onMounted(async () => {
label="คำนำหน้าชื่อ"
hidden-space
use-input
clearable
input-debounce="0"
emit-value
map-options
@ -794,6 +812,7 @@ onMounted(async () => {
<q-input
:disable="!spouseData.isHave"
outlined
class="inputgreen"
dense
bg-color="white"
lazy-rules
@ -808,6 +827,7 @@ onMounted(async () => {
:disable="!spouseData.isHave"
outlined
dense
class="inputgreen"
bg-color="white"
lazy-rules
v-model="spouseData.lastName"
@ -820,6 +840,7 @@ onMounted(async () => {
:disable="!spouseData.isHave"
outlined
dense
class="inputgreen"
bg-color="white"
v-model="spouseData.job"
label="อาชีพ"
@ -885,6 +906,10 @@ onMounted(async () => {
v-model="items.childrenCitizenId"
:label="`${'เลขประจำตัวประชาชน'}`"
bg-color="white"
class="inputgreen"
:rules="[
(val) => val.length === 13 || 'กรุณากรอกเลขบัตรประชาชน',
]"
maxlength="13"
mask="#############"
/>
@ -899,7 +924,7 @@ onMounted(async () => {
:rules="[(val) => !!val || 'กรุณาเลือกคำนำหน้าชื่อ']"
label="คำนำหน้าชื่อ"
use-input
clearable
class="inputgreen"
input-debounce="0"
emit-value
map-options
@ -916,6 +941,7 @@ onMounted(async () => {
outlined
dense
lazy-rules
class="inputgreen"
bg-color="white"
v-model="items.childrenFirstName"
:rules="[(val) => !!val || 'กรุณากรอกชื่อ']"
@ -926,6 +952,7 @@ onMounted(async () => {
<q-input
outlined
lazy-rules
class="inputgreen"
bg-color="white"
dense
v-model="items.childrenLastName"
@ -938,6 +965,7 @@ onMounted(async () => {
outlined
bg-color="white"
dense
class="inputgreen"
v-model="items.childrenCareer"
label="อาชีพ"
/>

View file

@ -661,22 +661,22 @@ function editData(idData: string) {
});
}
function deleteData(idData: string) {
dialogRemove($q, () =>
http
.delete(config.API.profileNewEducationByEducationId(idData))
.then(() => {
fetchData(id.value);
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
})
);
}
// function deleteData(idData: string) {
// dialogRemove($q, () =>
// http
// .delete(config.API.profileNewEducationByEducationId(idData))
// .then(() => {
// fetchData(id.value);
// success($q, "");
// })
// .catch((err) => {
// messageError($q, err);
// })
// .finally(() => {
// hideLoader();
// })
// );
// }
onMounted(async () => {
await fetchData(id.value);
@ -819,7 +819,7 @@ onMounted(async () => {
>
<q-tooltip>ประวแกไขประวการศกษา</q-tooltip>
</q-btn>
<q-btn
<!-- <q-btn
color="red"
flat
dense
@ -831,7 +831,7 @@ onMounted(async () => {
v-close-popup
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-btn> -->
</q-td>
</q-tr>
</template>
@ -945,26 +945,6 @@ onMounted(async () => {
</q-card>
</div>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="dialog" class="dialog" persistent>
@ -997,7 +977,7 @@ onMounted(async () => {
) "
:rules="[(val) => !!val || `${'กรุณาเลือกระดับการศึกษา'}`]"
label="ระดับการศึกษา"
clearable
class="inputgreen"
/>
</div>
<div class="col-6">
@ -1007,6 +987,7 @@ onMounted(async () => {
label="สถานศึกษา"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกสถานศึกษา'}`]"
hide-bottom-space
/>
@ -1024,6 +1005,7 @@ onMounted(async () => {
unchecked-icon="panorama_fish_eye"
val="false"
label="ปี"
class="inputgreen"
dense
/>
<q-radio
@ -1031,6 +1013,7 @@ onMounted(async () => {
checked-icon="task_alt"
unchecked-icon="panorama_fish_eye"
val="true"
class="inputgreen"
label="วัน/เดือน/ปี"
dense
/>
@ -1060,6 +1043,7 @@ onMounted(async () => {
dense
lazy-rules
outlined
class="inputgreen"
hide-bottom-space
:model-value="educationData.startYear + 543"
:rules="[
@ -1101,6 +1085,7 @@ onMounted(async () => {
<template #trigger>
<q-input
dense
class="inputgreen"
lazy-rules
outlined
hide-bottom-space
@ -1146,6 +1131,7 @@ onMounted(async () => {
<template #trigger>
<q-input
outlined
class="inputgreen"
dense
lazy-rules
:model-value="date2Thai(educationData.startDate)"
@ -1190,6 +1176,7 @@ onMounted(async () => {
<q-input
outlined
dense
class="inputgreen"
lazy-rules
:model-value="date2Thai(educationData.endDate)"
:rules="[
@ -1231,6 +1218,7 @@ onMounted(async () => {
outlined
bg-color="white"
dense
class="inputgreen"
lazy-rules
:model-value="date2Thai(educationData.finishDate)"
:rules="[
@ -1257,11 +1245,11 @@ onMounted(async () => {
dense
emit-value
map-options
clearable
bg-color="white"
v-model="educationData.isEducation"
:options="educationOption"
option-value="value"
class="inputgreen"
option-label="label"
input-debounce="0"
use-input
@ -1282,6 +1270,7 @@ onMounted(async () => {
outlined
v-model="educationData.degree"
label="วุฒิการศึกษา"
class="inputgreen"
bg-color="white"
dense
:rules="[(val) => !!val || `${'กรุณากรอกวุฒิการศึกษา'}`]"
@ -1291,6 +1280,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="educationData.field"
label="สาขาวิชา/ทาง"
bg-color="white"
@ -1304,6 +1294,7 @@ onMounted(async () => {
outlined
v-model="educationData.fundName"
label="ทุน"
class="inputgreen"
bg-color="white"
dense
/>
@ -1311,6 +1302,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="educationData.gpa"
label="เกรดเฉลี่ย"
bg-color="white"
@ -1323,6 +1315,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="educationData.country"
label="ประเทศ"
bg-color="white"
@ -1332,6 +1325,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="educationData.other"
label="ข้อมูลติดต่อ"
bg-color="white"
@ -1343,6 +1337,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="educationData.duration"
label="ระยะเวลา"
:rules="[(val) => !!val || `${'กรุณากรอกระยะเวลา'}`]"
@ -1353,6 +1348,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="educationData.durationYear"
label="ระยะเวลาหลักสูตร (ปี)"
:rules="[
@ -1368,6 +1364,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="educationData.note"
label="หมายเหตุ"
bg-color="white"
@ -1468,26 +1465,6 @@ onMounted(async () => {
<q-td auto-width> </q-td>
</q-tr>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -501,26 +501,6 @@ onMounted(async () => {
</q-card>
</div>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="dialog" class="dialog" persistent>
@ -538,6 +518,7 @@ onMounted(async () => {
<div class="col">
<q-input
outlined
class="inputgreen"
dense
bg-color="white"
v-model="specialSkill.field"
@ -550,6 +531,7 @@ onMounted(async () => {
<q-input
outlined
dense
class="inputgreen"
bg-color="white"
v-model="specialSkill.detail"
label="รายละเอียด"
@ -559,7 +541,7 @@ onMounted(async () => {
</div>
</div>
<q-input
class="col-12"
class="col-12 inputgreen"
outlined
dense
bg-color="white"
@ -567,9 +549,9 @@ onMounted(async () => {
label="หมายเหตุ"
/>
<q-input
class="col-12 inputgreen"
outlined
dense
class="col-12"
bg-color="white"
v-model="specialSkill.reference"
label="เอกสารอ้างอิง"
@ -664,26 +646,6 @@ onMounted(async () => {
<q-td auto-width> </q-td>
</q-tr>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -533,26 +533,6 @@ onMounted(() => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="modalDialogSalary" persistent full-width>
@ -624,6 +604,7 @@ onMounted(() => {
dense
lazy-rules
borderless
clearable
v-model="formDataSalary.templatePos"
:label="`${'ต้นแบบ (template) ตำแหน่ง'}`"
option-label="name"
@ -822,6 +803,7 @@ onMounted(() => {
dense
lazy-rules
borderless
clearable
v-model="formDataSalary.templateDoc"
:label="`${'ต้นแบบ (template) เอกสารอ้างอิง'}`"
option-label="name"

View file

@ -321,26 +321,6 @@ watch(
</q-td>
</q-tr>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -426,26 +426,6 @@ onMounted(() => {
direction-links
></q-pagination>
</template>
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
<q-dialog v-model="modalDialog" persistent>
@ -561,6 +541,7 @@ onMounted(() => {
}}</template>
<template #trigger>
<q-input
clearable
outlined
dense
borderless
@ -570,6 +551,7 @@ onMounted(() => {
"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="formData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon

View file

@ -222,26 +222,6 @@ watch(modal, (status) => {
direction-links
></q-pagination>
</template> -->
<template v-slot:no-data="{ icon, message, filter }">
<div class="full-width row flex-center text-accent q-gutter-sm">
<span
><div
style="
height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
"
class="text-grey-5"
>
<q-icon name="search" size="4rem" />
<span>ไมพบขอม</span>
</div>
</span>
</div>
</template>
</d-table>
</q-card-section>
</q-card>

View file

@ -3,7 +3,7 @@ interface RequestItemsObject {
issuer: string;
certificateNo: string;
issueDate: Date;
expireDate: Date;
expireDate: Date | null;
profileId: string;
}

View file

@ -1,12 +1,12 @@
interface RequestItemsObject {
name: string,
topic: string,
yearly: number,
yearly: number | null,
place: string,
duration: string,
department: string,
numberOrder: string,
dateOrder: Date,
dateOrder: Date | null,
startDate: Date,
endDate: Date,
startYear: number,

View file

@ -387,7 +387,10 @@ function fetchDataDashboard() {
.then((res) => {
const quota = res.data.result.dashboard;
itemsCardAPR.value[0].total = quota.total;
itemsCardAPR.value[1].total = quota.fifteenPercent;
itemsCardAPR.value[1].total = quota.fifteenPercent.toLocaleString("en", {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
itemsCardAPR.value[2].total = quota.chosen;
itemsCardAPR.value[3].total = quota.remaining;
itemsCardAPR.value[4].total = quota.totalBackup;

View file

@ -256,7 +256,12 @@ function fetchDataPeriod(id: string) {
pageSize: formFilter.pageSize.toString(),
keyword: formFilter.keyword,
type: store.tabType,
isRetire: isRetire.value === true ? "1" : "0",
isRetire:
store.roundMainCode !== "OCT"
? null
: isRetire.value === true
? "1"
: "0",
};
http

View file

@ -392,17 +392,44 @@ function fetchDataDashboard() {
.then((res) => {
const quota = res.data.result.dashboard;
itemsCardAPR.value[0].total = quota.total;
itemsCardAPR.value[1].total = quota.fifteenPercent;
itemsCardAPR.value[1].total = quota.fifteenPercent.toLocaleString("en", {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
itemsCardAPR.value[2].total = quota.chosen;
itemsCardAPR.value[3].total = quota.remaining;
itemsCardAPR.value[4].total = quota.totalBackup;
itemsCardOCT.value[0].total = quota.currentAmount;
itemsCardOCT.value[1].total = quota.sixPercentAmount;
itemsCardOCT.value[2].total = quota.spentAmount;
itemsCardOCT.value[3].total = quota.sixPercentSpentAmount;
itemsCardOCT.value[4].total = quota.useAmount;
itemsCardOCT.value[5].total = quota.remainingAmount;
itemsCardOCT.value[0].total = quota.currentAmount.toLocaleString("en", {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
itemsCardOCT.value[1].total = quota.sixPercentAmount.toLocaleString(
"en",
{
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}
);
itemsCardOCT.value[2].total = quota.spentAmount.toLocaleString("en", {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
itemsCardOCT.value[3].total = quota.sixPercentSpentAmount.toLocaleString(
"en",
{
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}
);
itemsCardOCT.value[4].total = quota.useAmount.toLocaleString("en", {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
itemsCardOCT.value[5].total = quota.remainingAmount.toLocaleString("en", {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
itemsCardOCT.value[6].total = quota.totalBackup;
itemsCardSpeciel.value[0].total = quota.total;

View file

@ -265,7 +265,12 @@ function fetchDataPeriod(id: string) {
pageSize: formFilter.pageSize.toString(),
keyword: formFilter.keyword,
type: store.tabType,
isRetire: isRetire.value === true ? "1" : "0",
isRetire:
store.roundMainCode !== "OCT"
? null
: isRetire.value === true
? "1"
: "0",
};
http

View file

@ -421,8 +421,7 @@ onMounted(async () => {
color="edit"
size="17px"
:name="
dateToISO(new Date()) >=
dateToISO(props.row.effectiveDate)
props.row.revisionId !== null
? 'mdi-eye-outline'
: 'edit'
"
@ -439,7 +438,10 @@ onMounted(async () => {
</q-item>
<q-item
v-if="props.row.revisionId !== null"
v-if="
props.row.isClose === false &&
props.row.isActive === true
"
clickable
v-close-popup
@click.stop="dialogClose(props.row.id)"