Merge branch 'develop'

This commit is contained in:
Warunee Tamkoo 2025-06-26 10:46:23 +07:00
commit 1f43943ad5
74 changed files with 1240 additions and 961 deletions

View file

@ -6,16 +6,18 @@ const holiday = `${env.API_URI}/metadata/holiday/`;
export default {
listUser: () => `${retirementResign}/resign/user`,
listUserByType:(type:string) => `${retirementResign}/resign${type}/user`,
listUserByType: (type: string) => `${retirementResign}/resign${type}/user`,
listResign: () => `${retirementResign}/resign`,
listResignByType: (type:string) => `${retirementResign}/resign${type}`,
listResignByType: (type: string) => `${retirementResign}/resign${type}`,
resingByid: (id: string) => `${retirementResign}/resign/${id}`,
resingByidType: (type:string,id: string) => `${retirementResign}/resign${type}/${id}`,
resingByidType: (type: string, id: string) =>
`${retirementResign}/resign${type}/user/${id}`,
questionnaireByid: (id: string) =>
`${retirementResign}/resign/questionnaire/${id}`,
listquestionnaire: () => `${retirementResign}/resign/questionnaire`,
cancelResign: (id: string) => `${retirementResign}/resign/cancel/${id}`,
cancelResignByType: (type:string,id: string) => `${retirementResign}/resign${type}/cancel/${id}`,
cancelResignByType: (type: string, id: string) =>
`${retirementResign}/resign${type}/cancel/${id}`,
// คำถาม
questionList: () => `${retirementResign}/resign/questionnaire/question`,

View file

@ -46,14 +46,14 @@ const generatePopupPath = (routeName: any, type: string) => {
if (routeName.includes("organizationChart")) {
return `${path}/chapter-1-user${type}-organization-chart`;
}
if (routeName.includes("registry")) {
if (routeName.includes("registry") || routeName.includes("request-edit")) {
return `${path}/chapter-2-user${type}-registry`;
}
if (routeName.includes("evaluate")) {
return `${path}/chapter-3-user-evaluate`;
}
if (routeName.includes("leave")) {
if (routeName.includes("leave") || routeName.includes("addAbsence")) {
return `${path}/chapter-${type ? "3" : "4"}-user${type}-leave`;
}
@ -79,7 +79,7 @@ const generatePopupPath = (routeName: any, type: string) => {
return `${path}/chapter-14-user-service-testing`;
}
if (routeName.includes("Retire")) {
return `${path}/chapter-${type ? "5" : "11"}-user${type}-retire`;
return `${path}/chapter-${type ? "6" : "12"}-user${type}-retire`;
} else {
return manualConfig[routeName as keyof typeof manualConfig];
}
@ -93,6 +93,8 @@ const manualConfig = {
addPortfolio: `${path}/chapter-5-user-portfolio`,
addTransfer: `${path}/chapter-6-user-transfer`,
KPIMain: `${path}/chapter-8-user-KPI`,
KPIAdd: `${path}/chapter-8-user-KPI`,
KPIEdit: `${path}/chapter-8-user-KPI`,
KPIMainEvaluator: `${path}/chapter-9-user-KPI-evaluator`,
};

View file

@ -162,12 +162,12 @@ watch(modal, (val) => {
}
});
watch(
() => [formDataQuery.isAct, formDataQuery.pageSize],
() => {
onSearchData();
}
);
// watch(
// () => [formDataQuery.isAct, formDataQuery.pageSize],
// () => {
// onSearchData();
// }
// );
/**
* function updatePagination

View file

@ -17,7 +17,6 @@ import { getToken, tokenParsed } from "@/plugins/auth";
export const useSupportStore = defineStore("supportServiceStore", () => {
const { showLoader, hideLoader, messageError } = useCounterMixin();
const $q = useQuasar();
const openChat = ref<boolean>(false);
const icon = ref<string>("mdi-account-check");
@ -114,7 +113,7 @@ export const useSupportStore = defineStore("supportServiceStore", () => {
const res = await http
.get(config.API.supportMessageStatus(issueId))
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();
@ -129,7 +128,7 @@ export const useSupportStore = defineStore("supportServiceStore", () => {
const res = await http
.get(config.API.supportMessage(issueId))
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();
@ -149,7 +148,7 @@ export const useSupportStore = defineStore("supportServiceStore", () => {
const res = await http
.get(config.API.supportIssueUserId(userId.value))
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();
@ -166,7 +165,7 @@ export const useSupportStore = defineStore("supportServiceStore", () => {
const res = await http
.get(config.API.supportIssueCategory)
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();
@ -188,7 +187,7 @@ export const useSupportStore = defineStore("supportServiceStore", () => {
const res = await http
.post(config.API.supportNewIssue, requestBody)
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();
@ -203,7 +202,7 @@ export const useSupportStore = defineStore("supportServiceStore", () => {
const res = await http
.get(config.API.supportSearchIssue(searchData))
.catch((err) => {
messageError($q, err);
console.log(err);
});
if (res && res.data) {
issue.value = res.data;

View file

@ -1,60 +1,64 @@
<script setup lang="ts">
import { ref, onMounted } from "vue"
import { useQuasar } from "quasar"
import { useRouter, useRoute } from "vue-router"
import { ref, onMounted } from "vue";
import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router";
import http from "@/plugins/http"
import config from "@/app.config"
import { useCounterMixin } from "@/stores/mixin"
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import type { QForm } from "quasar"
import type { QForm } from "quasar";
import Workflow from "@/components/Workflow/Main.vue"
import Workflow from "@/components/Workflow/Main.vue";
const $q = useQuasar()
const route = useRoute()
const router = useRouter()
const mixin = useCounterMixin()
const { success, messageError, showLoader, hideLoader, dialogConfirm } = mixin
const $q = useQuasar();
const route = useRoute();
const router = useRouter();
const mixin = useCounterMixin();
const { success, messageError, showLoader, hideLoader, dialogConfirm } = mixin;
const id = ref<string>(router.currentRoute.value.name === "addTransfer" ? "" : route.params.id.toString()) //id path
const id = ref<string>(
router.currentRoute.value.name === "addTransfer"
? ""
: route.params.id.toString()
); //id path
const files = ref<any>() //
const tranferOrg = ref<string>("") //
const noteReason = ref<string>("") //
const routeName = router.currentRoute.value.name // path
const files = ref<any>(); //
const tranferOrg = ref<string>(""); //
const noteReason = ref<string>(""); //
const routeName = router.currentRoute.value.name; // path
/** Dialog Save */
async function saveData() {
dialogConfirm(
$q,
() => {
createTransfer()
},
"ยืนยันการยื่นข้อมูลการโอน",
"ต้องการยื่นข้อมูลการโอนนี้ใช่หรือไม่"
)
dialogConfirm(
$q,
() => {
createTransfer();
},
"ยืนยันการยื่นข้อมูลการโอน",
"ต้องการยื่นข้อมูลการโอนนี้ใช่หรือไม่"
);
}
/** ฟังก์ชั่นสร้างขอโอน */
async function createTransfer() {
showLoader()
const formData = new FormData()
formData.append("Organization", tranferOrg.value)
formData.append("Reason", noteReason.value)
formData.append("file", files.value)
await http
.post(config.API.listtransfer(), formData)
.then(res => {
router.push(`/transfer/` + res.data.result)
success($q, "บันทึกข้อมูลสำเร็จ")
})
.catch(e => {
messageError($q, e)
})
.finally(() => {
hideLoader()
})
showLoader();
const formData = new FormData();
formData.append("Organization", tranferOrg.value);
formData.append("Reason", noteReason.value);
formData.append("file", files.value);
await http
.post(config.API.listtransfer(), formData)
.then((res) => {
router.push(`/transfer/` + res.data.result);
success($q, "บันทึกข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
/**
@ -62,21 +66,21 @@ async function createTransfer() {
* @param id ไอดของขอม
*/
async function fecthDataTransfer(id: string) {
showLoader()
await http
.get(config.API.transferByid(id))
.then((res: any) => {
let data = res.data.result
tranferOrg.value = data.organization
noteReason.value = data.reason
files.value = data.docs
})
.catch((e: any) => {
messageError($q, e)
})
.finally(() => {
hideLoader()
})
showLoader();
await http
.get(config.API.transferByid(id))
.then((res: any) => {
let data = res.data.result;
tranferOrg.value = data.organization;
noteReason.value = data.reason;
files.value = data.docs;
})
.catch((e: any) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
/**
@ -84,104 +88,133 @@ async function fecthDataTransfer(id: string) {
* @param url URL File
*/
function fileOpen(url: string) {
window.open(url, "_blank")
window.open(url, "_blank");
}
/**
* เรยกฟงกนทงหมดตอนเรยกใชไฟล
*/
onMounted(() => {
if (route.params.id !== undefined) {
fecthDataTransfer(id.value)
}
})
if (route.params.id !== undefined) {
fecthDataTransfer(id.value);
}
});
</script>
<template>
<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 icon="mdi-arrow-left" unelevated round dense flat color="primary" class="q-mr-sm" @click="router.go(-1)" />
<div v-if="routeName == 'addTransfer'">เพิ่มเรื่องขอโอน</div>
<div v-else>รายละเอียดเรื่องขอโอน</div>
</div>
<q-form class="col-12" greedy @submit.prevent @validation-success="saveData">
<q-card bordered>
<q-card-section>
<div class="row">
<div class="col-12 row q-col-gutter-sm">
<q-input
:class="routeName != 'addTransfer' ? 'col-12' : 'col-12 inputgreen'"
dense
outlined
v-model="tranferOrg"
hide-bottom-space
label="หน่วยงานที่ขอโอนไป"
:readonly="routeName != 'addTransfer'"
:rules="[(val:string) => !!val || `${'กรุณากรอกหน่วยงานที่ขอโอนไป'}`]"
/>
<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
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.push('/transfer')"
/>
<div v-if="routeName == 'addTransfer'">เพิ่มเรื่องขอโอน</div>
<div v-else>รายละเอียดเรื่องขอโอน</div>
</div>
<q-form
class="col-12"
greedy
@submit.prevent
@validation-success="saveData"
>
<q-card bordered>
<q-card-section>
<div class="row">
<div class="col-12 row q-col-gutter-sm">
<q-input
:class="
routeName != 'addTransfer' ? 'col-12' : 'col-12 inputgreen'
"
dense
outlined
v-model="tranferOrg"
hide-bottom-space
label="หน่วยงานที่ขอโอนไป"
:readonly="routeName != 'addTransfer'"
:rules="[(val:string) => !!val || `${'กรุณากรอกหน่วยงานที่ขอโอนไป'}`]"
/>
<q-input
:class="routeName != 'addTransfer' ? 'col-12' : 'col-12 inputgreen'"
dense
outlined
v-model="noteReason"
label="เหตุผล"
hide-bottom-space
type="textarea"
:readonly="routeName != 'addTransfer'"
:rules="[(val:string) => !!val || `${'กรุณากรอกเหตุผล'}`]"
/>
<q-input
:class="
routeName != 'addTransfer' ? 'col-12' : 'col-12 inputgreen'
"
dense
outlined
v-model="noteReason"
label="เหตุผล"
hide-bottom-space
type="textarea"
:readonly="routeName != 'addTransfer'"
:rules="[(val:string) => !!val || `${'กรุณากรอกเหตุผล'}`]"
/>
<div class="col-12 row" v-if="routeName == 'addTransfer'">
<q-file
v-model="files"
class="col-xs-12 col-sm-12 inputgreen"
outlined
dense
lazy-rules
hide-bottom-space
accept=".pdf"
:rules="[(val: string) => !!val || 'กรุณาเลือกไฟล์เอกสารเพิ่มเติม']"
label="เอกสารเพิ่มเติม"
>
<template v-slot:prepend> <q-icon name="attach_file" /> </template
></q-file>
</div>
<div class="col-12 row" v-if="routeName == 'addTransfer'">
<q-file
v-model="files"
class="col-xs-12 col-sm-12 inputgreen"
outlined
dense
lazy-rules
hide-bottom-space
accept=".pdf"
:rules="[(val: string) => !!val || 'กรุณาเลือกไฟล์เอกสารเพิ่มเติม']"
label="เอกสารเพิ่มเติม"
>
<template v-slot:prepend>
<q-icon name="attach_file" /> </template
></q-file>
</div>
<div class="col-12 row" v-if="routeName != 'addTransfer'">
<q-card bordered flat class="full-width">
<div class="bg-grey-1 q-pa-sm col-12 row items-center text-primary">
<div class="q-pl-sm text-weight-bold text-dark">เอกสารเพมเต</div>
</div>
<q-separator />
<q-list separator>
<q-item v-for="file in files" :key="file.key">
<q-item-section>
{{ file.fileName }}
</q-item-section>
<q-item-section avatar>
<q-btn color="teal-5" round flat icon="mdi-download" @click="fileOpen(file.pathName)"></q-btn>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
<div class="col-12 row" v-if="routeName != 'addTransfer'">
<q-card bordered flat class="full-width">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
เอกสารเพมเต
</div>
</div>
<q-separator />
<q-list separator>
<q-item v-for="file in files" :key="file.key">
<q-item-section>
{{ file.fileName }}
</q-item-section>
<q-item-section avatar>
<q-btn
color="teal-5"
round
flat
icon="mdi-download"
@click="fileOpen(file.pathName)"
></q-btn>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
<!-- Workflow -->
<div class="col-12" v-if="routeName != 'addTransfer'">
<Workflow :id="id" :sys-name="`SYS_TRANSFER_REQ`" />
</div>
</div>
</div>
</q-card-section>
<!-- Workflow -->
<div class="col-12" v-if="routeName != 'addTransfer'">
<Workflow :id="id" :sys-name="`SYS_TRANSFER_REQ`" />
</div>
</div>
</div>
</q-card-section>
<q-separator v-if="routeName == 'addTransfer'" />
<q-card-actions align="right" v-if="routeName == 'addTransfer'">
<q-btn color="primary" label="ยื่นเรื่องขอโอน" type="onsubmit" />
</q-card-actions>
</q-card>
</q-form>
</div>
</div>
<q-separator v-if="routeName == 'addTransfer'" />
<q-card-actions align="right" v-if="routeName == 'addTransfer'">
<q-btn color="primary" label="ยื่นเรื่องขอโอน" type="onsubmit" />
</q-card-actions>
</q-card>
</q-form>
</div>
</div>
</template>

View file

@ -62,6 +62,8 @@ interface DataOptions {
interface RowsType {
commanders: SeqTypeRow[];
approvers: SeqTypeRow[];
cancelCommanders: SeqTypeRow[] | null;
cancelApprovers: SeqTypeRow[] | null;
}
interface SeqTypeRow {
seq: number;

View file

@ -144,19 +144,6 @@ const columnsCommanders = ref<QTableProps["columns"]>([
},
]);
/**
* งกนเปลยนเป string ของ status
* @param val value ของ status true/false
*/
function statusOrder(val: boolean) {
switch (val) {
case true:
return "ยับยั้ง";
case false:
return "อนุญาต";
}
}
/**
* นทกขอมลการลาออก
*/
@ -233,6 +220,8 @@ async function fectDataresign(id: string) {
rowsApprover.value = {
commanders: data.commanders,
approvers: data.approvers,
cancelCommanders: data.cancelCommanders ?? null,
cancelApprovers: data.cancelApprovers ?? null,
};
files.value = data.docs;
dataDetail.value = data;
@ -586,137 +575,308 @@ onMounted(async () => {
</q-card>
</div> -->
<!-- ผลการพจารณาของผงคบบญชา -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผงคบบญชา
</div>
</div>
<q-separator />
<div class="col-12">
<d-table
ref="table"
:columns="columnsCommanders"
:rows="rowsApprover?.commanders ?? []"
row-key="key"
flat
bordered
:paging="true"
dense
:rows-per-page-options="[1, 25, 50, 100]"
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th
v-for="col in props.cols"
:key="col.name"
:props="props"
>
<span class="text-weight-medium">{{
col.label
}}</span>
</q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div class="row col-12" v-if="routeName != 'AddRetire'">
<div class="col-12 q-mt-sm text-weight-bold text-primary">
ผลการพจารณาการขอลาออก
</div>
<div v-else-if="col.name == 'approveStatus'">
<div class="col-12 q-mt-md">
<!-- ผลการพจารณาของผงคบบญชา -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผงคบบญชา
</div>
</div>
<q-separator />
<div class="col-12 q-pa-sm">
<d-table
ref="table"
:columns="columnsCommanders"
:rows="rowsApprover?.commanders ?? []"
row-key="key"
flat
bordered
:paging="true"
dense
:rows-per-page-options="[1, 25, 50, 100]"
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th
v-for="col in props.cols"
:key="col.name"
:props="props"
>
<span class="text-weight-medium">{{
col.label
}}</span>
</q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div v-else-if="col.name == 'approveStatus'">
{{
props.row.approveStatus
? convertStatusText(props.row.approveStatus)
: "-"
}}
</div>
<div v-else>
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</div>
</q-card>
</div>
<!-- ผลการพจารณาของผอำนาจ -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผอำนาจ
</div>
</div>
<q-separator />
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 row items-start">
<div class="col-12 text-top"> - นามสก</div>
<div class="col-12 text-detail">
{{
props.row.approveStatus
? convertStatusText(props.row.approveStatus)
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.firstName
? `${rowsApprover?.approvers[0].prefix}${rowsApprover?.approvers[0].firstName} ${rowsApprover?.approvers[0].lastName}`
: "-"
}}
</div>
<div v-else>
{{ col.value ? col.value : "-" }}
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.approveStatus
? convertStatusText(
rowsApprover?.approvers[0].approveStatus
)
: "-"
}}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">
นสดทายทบย
</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.rejectDate
? date2Thai(
rowsApprover?.approvers[0].rejectDate
)
: "-"
}}
</div>
</div>
<div class="col-xs-12 row items-start">
<div class="col-12 text-top">
ความคดเหนและเหตผล
</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.comment
? rowsApprover?.approvers[0].comment
: "-"
}}
</div>
</div>
</div>
</div>
</q-card>
</div>
</q-card>
</div>
</div>
<!-- ผลการพจารณาของผอำนาจ -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผอำนาจ
</div>
<!-- ยกเลกการลาออก -->
<div
class="row col-12"
v-if="
routeName != 'AddRetire' &&
rowsApprover &&
rowsApprover?.cancelCommanders &&
rowsApprover?.cancelCommanders?.length > 0
"
>
<div class="col-12 q-mt-sm text-weight-bold text-red">
ผลการพจารณาการขอยกเลกลาออก
</div>
<div class="col-12 q-pa-sm">
<!-- ผลการพจารณาของผงคบบญชา -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผงคบบญชา
</div>
</div>
<q-separator />
<div class="col-12 q-pa-sm">
<d-table
ref="table"
:columns="columnsCommanders"
:rows="rowsApprover?.cancelCommanders ?? []"
row-key="key"
flat
bordered
:paging="true"
dense
:rows-per-page-options="[1, 25, 50, 100]"
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th
v-for="col in props.cols"
:key="col.name"
:props="props"
>
<span class="text-weight-medium">{{
col.label
}}</span>
</q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div v-else-if="col.name == 'approveStatus'">
{{
props.row.approveStatus
? convertStatusText(props.row.approveStatus)
: "-"
}}
</div>
<div v-else>
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</div>
</q-card>
</div>
<q-separator />
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 row items-start">
<div class="col-12 text-top"> - นามสก</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.firstName
? `${rowsApprover?.approvers[0].prefix}${rowsApprover?.approvers[0].firstName} ${rowsApprover?.approvers[0].lastName}`
: "-"
}}
<!-- ผลการพจารณาของผอำนาจ -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผอำนาจ
</div>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.approveStatus
? convertStatusText(
rowsApprover?.approvers[0].approveStatus
)
: "-"
}}
<q-separator />
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 row items-start">
<div class="col-12 text-top"> - นามสก</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.cancelApprovers &&
rowsApprover.cancelApprovers[0]?.firstName
? `${rowsApprover?.cancelApprovers[0].prefix}${rowsApprover?.cancelApprovers[0].firstName} ${rowsApprover?.cancelApprovers[0].lastName}`
: "-"
}}
</div>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.cancelApprovers &&
rowsApprover.cancelApprovers[0]?.approveStatus
? convertStatusText(
rowsApprover?.cancelApprovers[0]
.approveStatus
)
: "-"
}}
</div>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">
นสดทายทบย
</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.cancelApprovers &&
rowsApprover.cancelApprovers[0]?.rejectDate
? date2Thai(
rowsApprover?.cancelApprovers[0].rejectDate
)
: "-"
}}
</div>
</div>
<div class="col-xs-12 row items-start">
<div class="col-12 text-top">
ความคดเหนและเหตผล
</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.cancelApprovers &&
rowsApprover.cancelApprovers[0]?.comment
? rowsApprover?.cancelApprovers[0].comment
: "-"
}}
</div>
</div>
</div>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">นสดทายทบย</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.rejectDate
? date2Thai(rowsApprover?.approvers[0].rejectDate)
: "-"
}}
</div>
</div>
<div class="col-xs-12 row items-start">
<div class="col-12 text-top">ความคดเหนและเหตผล</div>
<div class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
rowsApprover.approvers[0]?.comment
? rowsApprover?.approvers[0].comment
: "-"
}}
</div>
</div>
</div>
</q-card>
</div>
</q-card>
</div>
</div>
</div>

View file

@ -6,6 +6,7 @@ import http from "@/plugins/http";
import config from "@/app.config";
import { tokenParsed } from "@/plugins/auth";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import FullCalendar from "@fullcalendar/vue3";
import dayGridPlugin from "@fullcalendar/daygrid";
@ -23,6 +24,7 @@ import type {
import DialogDetail from "@/modules/05_leave/components/DialogDetail.vue";
const $q = useQuasar();
const store = useLeaveStore();
const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError, monthYear2Thai } = mixin;
const emit = defineEmits(["update:dateYear"]);
@ -74,7 +76,6 @@ const dateMonth = ref<DataDateMonthObject>({
/** function เรียกข้อมูล calendar*/
async function fetchDataCalendar() {
showLoader();
await http
.post(config.API.leaveCalendar(), {
year: dateMonth.value.year,
@ -118,9 +119,6 @@ async function fetchDataCalendar() {
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
@ -128,7 +126,6 @@ async function fetchDataCalendar() {
* fetch นหยดในปฏ
*/
async function fetchData() {
showLoader();
await http
.get(
config.API.listHolidayHistoryYearMonth(
@ -138,7 +135,6 @@ async function fetchData() {
)
.then((res) => {
const dataNormal = res.data.result.normal;
const dataSixDays = res.data.result.sixDays;
const data = dataNormal;
const event = data.map((e: any) => ({
id: e.id,
@ -155,23 +151,9 @@ async function fetchData() {
...calendarOptions.value.events,
...event,
];
// const dataSix = dataSixDays
// const eventSix = dataSix.map((e: any) => ({
// id: e.id,
// title: `${e.name} `,
// start: e.holidayDate,
// end: new Date(new Date(e.holidayDate).setHours(23, 59, 59)).toISOString(),
// allDay: e.holidayDate === e.holidayDate ? true : false,
// color: "#FFE5CC",
// textColor: "#FF8000",
// }))
// calendarOptions.value.events = [...calendarOptions.value.events, ...eventSix]
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
hideLoader();
});
}
@ -184,14 +166,11 @@ function convertKeycloakId(id: any) {
/** function เรียกประเภทการลา */
const leaveType = ref<LeaveType[]>([]);
async function fectOptionType() {
await http
.get(config.API.leaveType())
.then(async (res) => {
leaveType.value = res.data.result;
})
.catch((err) => {
messageError($q, err);
});
const data = await store.fetchLeaveTypeData();
if (!data) {
return;
}
leaveType.value = data;
}
/**
@ -205,11 +184,17 @@ function monthYearThai(val: DataDateMonthObject) {
/** function อัปเดท Calendar */
async function updateMonth() {
await fetchDataCalendar();
await fetchData();
const calen = fullCalendar.value.getApi();
const date = new Date(dateMonth.value.year, dateMonth.value.month);
calen.gotoDate(date);
try {
await fetchDataCalendar();
await fetchData();
const calen = fullCalendar.value.getApi();
const date = new Date(dateMonth.value.year, dateMonth.value.month);
calen.gotoDate(date);
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
}
/**
@ -226,10 +211,11 @@ async function onClickClose() {
modal.value = false;
}
/**** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่Calendar */
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่Calendar */
watch(
() => filterVal.value,
async () => {
showLoader();
const eventData = filterVal.value.map((item: any) => {
return mainData.value
.filter(
@ -250,24 +236,32 @@ watch(
const allEventData = [].concat(...eventData);
calendarOptions.value.events = allEventData;
await fetchData();
hideLoader();
}
);
/**Hook */
onMounted(async () => {
const user = await tokenParsed();
keycloakId.value = await (user ? user.sub : "");
filterVal.value.push(keycloakId.value);
await fetchDataCalendar();
await fetchData();
await fectOptionType();
try {
showLoader();
// keycloakId
const user = await tokenParsed();
keycloakId.value = await (user ? user.sub : "");
filterVal.value.push(keycloakId.value);
await Promise.all([fetchDataCalendar(), fectOptionType()]);
await fetchData();
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
});
</script>
<template>
<div class="row">
<div class="col-xs-12 col-md-3 q-mt-sm q-pr-sm row">
<q-card class="col-12" flat bordered >
<q-card class="col-12" flat bordered>
<q-scroll-area style="height: 38vw">
<div class="q-gutter-sm col-12">
<q-list class="rounded-borders q-pt-sm" dense>

View file

@ -15,14 +15,8 @@ const typeForm = defineModel<string>("type", { required: true });
const $q = useQuasar();
const dataStore = useLeaveStore();
const mixin = useCounterMixin();
const {
date2Thai,
dateToISO,
messageError,
convertDateToAPI,
showLoader,
hideLoader,
} = mixin;
const { date2Thai, messageError, convertDateToAPI, showLoader, hideLoader } =
mixin;
const edit = ref<boolean>(true);
const leaveDocumentRef = ref<any>(null);
@ -200,22 +194,25 @@ const dateEndInputStyle = computed(() => {
const leaveId = ref<any>("");
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const statusCheck = ref<any>("");
watch(props.data, () => {
if (props.data) {
// totalCheck.value = null;
formDataSick.leaveWrote = props.data.leaveWrote;
formDataSick.leaveStartDate = new Date(props.data.leaveStartDate);
formDataSick.leaveEndDate = new Date(props.data.leaveEndDate);
formDataSick.contractTel = props.data.contractTel;
formDataSick.leaveTotal = props.data.leaveTotal;
formDataSick.leaveDetail = props.data.leaveDetail;
formDataSick.leaveRange = props.data.leaveRange;
formDataSick.leaveRangeEnd = props.data.leaveRangeEnd;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataSick.leaveDocument = [];
watch(
() => props.data,
() => {
if (props.data) {
// totalCheck.value = null;
formDataSick.leaveWrote = props.data.leaveWrote;
formDataSick.leaveStartDate = new Date(props.data.leaveStartDate);
formDataSick.leaveEndDate = new Date(props.data.leaveEndDate);
formDataSick.contractTel = props.data.contractTel;
formDataSick.leaveTotal = props.data.leaveTotal;
formDataSick.leaveDetail = props.data.leaveDetail;
formDataSick.leaveRange = props.data.leaveRange;
formDataSick.leaveRangeEnd = props.data.leaveRangeEnd;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataSick.leaveDocument = [];
}
}
});
);
/** Hook */
onMounted(() => {
@ -264,7 +261,6 @@ onMounted(() => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataSick.leaveStartDate"
:locale="'th'"
autoApply
@ -342,7 +338,6 @@ onMounted(() => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataSick.leaveEndDate"
:locale="'th'"
autoApply

View file

@ -205,20 +205,23 @@ const dateEndInputStyle = computed(() => {
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, () => {
if (props.data) {
// totalCheck.value = null;
formDataBirth.leaveWrote = props.data.leaveWrote;
formDataBirth.leaveStartDate = props.data.leaveStartDate;
formDataBirth.leaveEndDate = props.data.leaveEndDate;
formDataBirth.leaveTotal = props.data.leaveTotal;
formDataBirth.leaveDetail = props.data.leaveDetail;
formDataBirth.leaveRangeEnd = props.data.leaveRangeEnd;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataBirth.leaveDocument = [];
watch(
() => props.data,
() => {
if (props.data) {
// totalCheck.value = null;
formDataBirth.leaveWrote = props.data.leaveWrote;
formDataBirth.leaveStartDate = props.data.leaveStartDate;
formDataBirth.leaveEndDate = props.data.leaveEndDate;
formDataBirth.leaveTotal = props.data.leaveTotal;
formDataBirth.leaveDetail = props.data.leaveDetail;
formDataBirth.leaveRangeEnd = props.data.leaveRangeEnd;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataBirth.leaveDocument = [];
}
}
});
);
/** Hook */
onMounted(() => {
@ -266,7 +269,6 @@ onMounted(() => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataBirth.leaveStartDate"
:locale="'th'"
autoApply
@ -344,7 +346,6 @@ onMounted(() => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataBirth.leaveEndDate"
:locale="'th'"
autoApply

View file

@ -205,23 +205,26 @@ async function fetchCheck() {
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataHelpWife.leaveWrote = props.data.leaveWrote;
formDataHelpWife.wifeDayName = props.data.wifeDayName;
formDataHelpWife.wifeDayDateBorn = props.data.wifeDayDateBorn;
formDataHelpWife.leaveStartDate = props.data.leaveStartDate;
formDataHelpWife.leaveEndDate = props.data.leaveEndDate;
formDataHelpWife.leaveTotal = props.data.leaveTotal;
formDataHelpWife.leaveRangeEnd = props.data.leaveRangeEnd;
formDataHelpWife.leaveRange = props.data.leaveRange;
formDataHelpWife.leaveDetail = props.data.leaveDetail;
formDataHelpWife.leaveDocument = [];
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataHelpWife.leaveWrote = props.data.leaveWrote;
formDataHelpWife.wifeDayName = props.data.wifeDayName;
formDataHelpWife.wifeDayDateBorn = props.data.wifeDayDateBorn;
formDataHelpWife.leaveStartDate = props.data.leaveStartDate;
formDataHelpWife.leaveEndDate = props.data.leaveEndDate;
formDataHelpWife.leaveTotal = props.data.leaveTotal;
formDataHelpWife.leaveRangeEnd = props.data.leaveRangeEnd;
formDataHelpWife.leaveRange = props.data.leaveRange;
formDataHelpWife.leaveDetail = props.data.leaveDetail;
formDataHelpWife.leaveDocument = [];
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
}
}
});
);
/**Hook */
onMounted(async () => {
@ -270,7 +273,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataHelpWife.leaveStartDate"
:locale="'th'"
autoApply
@ -348,7 +350,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataHelpWife.leaveEndDate"
:locale="'th'"
autoApply
@ -466,7 +467,6 @@ onMounted(async () => {
<div class="col-12 col-md-4 col-sm-12 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataHelpWife.wifeDayDateBorn"
:locale="'th'"
autoApply

View file

@ -203,24 +203,27 @@ async function fetchCheck() {
}
}
watch(props.data, () => {
if (props.data) {
// totalCheck.value = null;
formDataVacation.leaveWrote = props.data.leaveWrote;
formDataVacation.restDayOldTotal = props.data.restDayOldTotal;
formDataVacation.restDayCurrentTotal = props.data.restDayCurrentTotal;
formDataVacation.leaveStartDate = props.data.leaveStartDate;
formDataVacation.leaveEndDate = props.data.leaveEndDate;
formDataVacation.leaveTotal = props.data.leaveTotal;
watch(
() => props.data,
() => {
if (props.data) {
// totalCheck.value = null;
formDataVacation.leaveWrote = props.data.leaveWrote;
formDataVacation.restDayOldTotal = props.data.restDayOldTotal;
formDataVacation.restDayCurrentTotal = props.data.restDayCurrentTotal;
formDataVacation.leaveStartDate = props.data.leaveStartDate;
formDataVacation.leaveEndDate = props.data.leaveEndDate;
formDataVacation.leaveTotal = props.data.leaveTotal;
formDataVacation.leaveDetail = props.data.leaveDetail;
formDataVacation.leaveRangeEnd = props.data.leaveRangeEnd;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataVacation.leaveRange = props.data.leaveRange;
formDataVacation.leaveDocument = [];
formDataVacation.leaveDetail = props.data.leaveDetail;
formDataVacation.leaveRangeEnd = props.data.leaveRangeEnd;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataVacation.leaveRange = props.data.leaveRange;
formDataVacation.leaveDocument = [];
}
}
});
);
/**Hook */
onMounted(() => {
@ -270,7 +273,6 @@ onMounted(() => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataVacation.leaveStartDate"
:locale="'th'"
autoApply
@ -347,7 +349,6 @@ onMounted(() => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataVacation.leaveEndDate"
:locale="'th'"
autoApply

View file

@ -229,32 +229,36 @@ const dateEndInputStyle = computed(() => {
const leaveDocumentList = ref<any>();
const statusCheck = ref<string>("");
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataOrdination.leaveWrote = props.data.leaveWrote;
formDataOrdination.leaveStartDate = props.data.leaveStartDate;
formDataOrdination.leaveEndDate = props.data.leaveEndDate;
formDataOrdination.leaveTotal = props.data.leaveTotal;
formDataOrdination.ordainDayOrdination = props.data.ordainDayOrdination;
formDataOrdination.ordainDayLocationName = props.data.ordainDayLocationName;
formDataOrdination.ordainDayLocationAddress =
props.data.ordainDayLocationAddress;
formDataOrdination.ordainDayBuddhistLentName =
props.data.ordainDayBuddhistLentName;
formDataOrdination.ordainDayBuddhistLentAddress =
props.data.ordainDayBuddhistLentAddress;
formDataOrdination.ordainDayStatus = props.data.ordainDayStatus;
formDataOrdination.leaveDetail = props.data.leaveDetail;
leaveDocumentList.value = props.data.leaveDocument;
formDataOrdination.ordainDayLocationNumber =
props.data.ordainDayLocationNumber;
formDataOrdination.leaveRange = props.data.leaveRange;
formDataOrdination.leaveRangeEnd = props.data.leaveRangeEnd;
statusCheck.value = props.data.status;
formDataOrdination.leaveDocument = [];
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataOrdination.leaveWrote = props.data.leaveWrote;
formDataOrdination.leaveStartDate = props.data.leaveStartDate;
formDataOrdination.leaveEndDate = props.data.leaveEndDate;
formDataOrdination.leaveTotal = props.data.leaveTotal;
formDataOrdination.ordainDayOrdination = props.data.ordainDayOrdination;
formDataOrdination.ordainDayLocationName =
props.data.ordainDayLocationName;
formDataOrdination.ordainDayLocationAddress =
props.data.ordainDayLocationAddress;
formDataOrdination.ordainDayBuddhistLentName =
props.data.ordainDayBuddhistLentName;
formDataOrdination.ordainDayBuddhistLentAddress =
props.data.ordainDayBuddhistLentAddress;
formDataOrdination.ordainDayStatus = props.data.ordainDayStatus;
formDataOrdination.leaveDetail = props.data.leaveDetail;
leaveDocumentList.value = props.data.leaveDocument;
formDataOrdination.ordainDayLocationNumber =
props.data.ordainDayLocationNumber;
formDataOrdination.leaveRange = props.data.leaveRange;
formDataOrdination.leaveRangeEnd = props.data.leaveRangeEnd;
statusCheck.value = props.data.status;
formDataOrdination.leaveDocument = [];
}
}
});
);
/** Hook */
onMounted(async () => {
@ -320,7 +324,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataOrdination.leaveStartDate"
:locale="'th'"
autoApply
@ -398,7 +401,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataOrdination.leaveEndDate"
:locale="'th'"
autoApply
@ -497,7 +499,6 @@ onMounted(async () => {
<div class="col-12 col-md-3 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="formDataOrdination.leavegovernmentDate"
:locale="'th'"
autoApply
@ -543,7 +544,6 @@ onMounted(async () => {
<div class="col-12 col-md-3 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="formDataOrdination.leavebirthDate"
:locale="'th'"
autoApply
@ -614,7 +614,6 @@ onMounted(async () => {
<div class="text-weight-bold text-dark col-12">สถานทบวช</div>
<div class="col-12 col-md-4 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataOrdination.ordainDayOrdination"
:locale="'th'"
autoApply

View file

@ -122,7 +122,7 @@ function onValidate() {
formData.append("leaveTotal", formDataHaji.leaveTotal);
formData.append("leaveRange", formDataHaji.leaveRange);
formData.append("leaveRangeEnd", formDataHaji.leaveRangeEnd);
formData.append("hajj", 'true');
formData.append("hajj", "true");
props.onSubmit(formData, isLeave.value);
}
}
@ -193,22 +193,25 @@ const dateEndInputStyle = computed(() => {
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataHaji.leaveWrote = props.data.leaveWrote;
formDataHaji.leaveTotal = props.data.leaveTotal;
formDataHaji.leaveStartDate = props.data.leaveStartDate;
formDataHaji.leaveEndDate = props.data.leaveEndDate;
formDataHaji.hajjDayStatus = props.data.hajjDayStatus;
formDataHaji.leaveDetail = props.data.leaveDetail;
formDataHaji.leaveRangeEnd = props.data.leaveRangeEnd;
formDataHaji.leaveRange = props.data.leaveRange;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataHaji.leaveDocument = [];
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataHaji.leaveWrote = props.data.leaveWrote;
formDataHaji.leaveTotal = props.data.leaveTotal;
formDataHaji.leaveStartDate = props.data.leaveStartDate;
formDataHaji.leaveEndDate = props.data.leaveEndDate;
formDataHaji.hajjDayStatus = props.data.hajjDayStatus;
formDataHaji.leaveDetail = props.data.leaveDetail;
formDataHaji.leaveRangeEnd = props.data.leaveRangeEnd;
formDataHaji.leaveRange = props.data.leaveRange;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataHaji.leaveDocument = [];
}
}
});
);
/**Hook */
onMounted(async () => {
@ -255,7 +258,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<datepicker
class="col-12 col-md-3 col-sm-6 inputgreen"
menu-class-name="modalfix"
v-model="formDataHaji.leaveStartDate"
:locale="'th'"
autoApply
@ -329,7 +331,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<datepicker
class="col-12 col-md-3 col-sm-6 inputgreen"
menu-class-name="modalfix"
v-model="formDataHaji.leaveEndDate"
:locale="'th'"
autoApply
@ -425,7 +426,6 @@ onMounted(async () => {
<datepicker
class="col-12 col-md-3 col-sm-6"
menu-class-name="modalfix"
autoApply
borderless
readonly

View file

@ -215,31 +215,34 @@ async function fetchCheck() {
// formDataMilitary.leaveTotal = newLeaveTotal;
// }
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataMilitary.leaveWrote = props.data.leaveWrote;
formDataMilitary.leaveStartDate = props.data.leaveStartDate;
formDataMilitary.leaveEndDate = props.data.leaveEndDate;
formDataMilitary.leaveTotal = props.data.leaveTotal;
formDataMilitary.absentDaySummon = props.data.absentDaySummon;
formDataMilitary.absentDayLocation = props.data.absentDayLocation;
formDataMilitary.absentDayRegistorDate = props.data.absentDayRegistorDate;
formDataMilitary.absentDayGetIn = props.data.absentDayGetIn;
formDataMilitary.absentDayAt = props.data.absentDayAt;
formDataMilitary.leaveRange = props.data.leaveRange;
formDataMilitary.leaveRangeEnd = props.data.leaveRangeEnd;
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
formDataMilitary.leaveDetail = props.data.leaveDetail;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataMilitary.leaveDocument = [];
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataMilitary.leaveWrote = props.data.leaveWrote;
formDataMilitary.leaveStartDate = props.data.leaveStartDate;
formDataMilitary.leaveEndDate = props.data.leaveEndDate;
formDataMilitary.leaveTotal = props.data.leaveTotal;
formDataMilitary.absentDaySummon = props.data.absentDaySummon;
formDataMilitary.absentDayLocation = props.data.absentDayLocation;
formDataMilitary.absentDayRegistorDate = props.data.absentDayRegistorDate;
formDataMilitary.absentDayGetIn = props.data.absentDayGetIn;
formDataMilitary.absentDayAt = props.data.absentDayAt;
formDataMilitary.leaveRange = props.data.leaveRange;
formDataMilitary.leaveRangeEnd = props.data.leaveRangeEnd;
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
formDataMilitary.leaveDetail = props.data.leaveDetail;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataMilitary.leaveDocument = [];
}
}
});
);
/**Hook */
onMounted(async () => {
@ -296,7 +299,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataMilitary.leaveStartDate"
:locale="'th'"
autoApply
@ -374,7 +376,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm"> -->
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataMilitary.leaveEndDate"
:locale="'th'"
autoApply
@ -509,7 +510,6 @@ onMounted(async () => {
<div class="q-col-gutter-sm row">
<datepicker
class="col-12 col-md-4 col-sm-6 inputgreen"
menu-class-name="modalfix"
v-model="formDataMilitary.absentDayRegistorDate"
:locale="'th'"
autoApply

View file

@ -230,36 +230,39 @@ async function fetchCheck() {
// }
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataStudy.leaveWrote = props.data.leaveWrote;
formDataStudy.leaveStartDate = props.data.leaveStartDate;
formDataStudy.leaveEndDate = props.data.leaveEndDate;
formDataStudy.leaveTotal = props.data.leaveTotal;
formDataStudy.leavebirthDate = props.data.leavebirthDate;
formDataStudy.leavegovernmentDate = props.data.leavegovernmentDate;
formDataStudy.leaveSalary = props.data.leaveSalary;
formDataStudy.leaveSalaryText = props.data.leaveSalaryText;
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataStudy.leaveWrote = props.data.leaveWrote;
formDataStudy.leaveStartDate = props.data.leaveStartDate;
formDataStudy.leaveEndDate = props.data.leaveEndDate;
formDataStudy.leaveTotal = props.data.leaveTotal;
formDataStudy.leavebirthDate = props.data.leavebirthDate;
formDataStudy.leavegovernmentDate = props.data.leavegovernmentDate;
formDataStudy.leaveSalary = props.data.leaveSalary;
formDataStudy.leaveSalaryText = props.data.leaveSalaryText;
formDataStudy.studyDayScholarship = props.data.studyDayScholarship;
formDataStudy.studyDayCountry = props.data.studyDayCountry;
formDataStudy.studyDayUniversityName = props.data.studyDayUniversityName;
formDataStudy.studyDayDegreeLevel = props.data.studyDayDegreeLevel;
formDataStudy.studyDaySubject = props.data.studyDaySubject;
formDataStudy.leaveDetail = props.data.leaveDetail;
formDataStudy.leaveRange = props.data.leaveRange;
formDataStudy.leaveRangeEnd = props.data.leaveRangeEnd;
formDataStudy.leaveDocument = [];
leaveDocumentList.value = props.data.leaveDocument;
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
statusCheck.value = props.data.status;
formDataStudy.studyDayScholarship = props.data.studyDayScholarship;
formDataStudy.studyDayCountry = props.data.studyDayCountry;
formDataStudy.studyDayUniversityName = props.data.studyDayUniversityName;
formDataStudy.studyDayDegreeLevel = props.data.studyDayDegreeLevel;
formDataStudy.studyDaySubject = props.data.studyDaySubject;
formDataStudy.leaveDetail = props.data.leaveDetail;
formDataStudy.leaveRange = props.data.leaveRange;
formDataStudy.leaveRangeEnd = props.data.leaveRangeEnd;
formDataStudy.leaveDocument = [];
leaveDocumentList.value = props.data.leaveDocument;
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
statusCheck.value = props.data.status;
}
}
});
);
/**Hook */
onMounted(async () => {
@ -323,7 +326,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataStudy.leaveStartDate"
:locale="'th'"
autoApply
@ -401,7 +403,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm"> -->
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataStudy.leaveEndDate"
:locale="'th'"
autoApply
@ -504,7 +505,6 @@ onMounted(async () => {
<div class="q-col-gutter-sm row">
<div class="col-12 col-md-3 col-sm-6">
<datepicker
menu-class-name="modalfix"
autoApply
borderless
week-start="0"
@ -552,7 +552,6 @@ onMounted(async () => {
<div class="col-12 col-md-3 col-sm-6">
<datepicker
menu-class-name="modalfix"
autoApply
borderless
readonly

View file

@ -214,34 +214,38 @@ function updateLeaveTotal() {
formDataTrain.leaveTotal = newLeaveTotal;
}
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataTrain.leaveWrote = props.data.leaveWrote;
formDataTrain.leaveStartDate = props.data.leaveStartDate;
formDataTrain.leaveEndDate = props.data.leaveEndDate;
formDataTrain.leaveTotal = props.data.leaveTotal;
formDataTrain.leavebirthDate = props.data.leavebirthDate;
formDataTrain.leavegovernmentDate = props.data.leavegovernmentDate;
formDataTrain.leaveSalary = props.data.leaveSalary;
formDataTrain.leaveSalaryText = props.data.leaveSalaryText;
formDataTrain.studyDayScholarship = props.data.studyDayScholarship;
formDataTrain.studyDayCountry = props.data.studyDayCountry;
formDataTrain.studyDayTrainingSubject = props.data.studyDayTrainingSubject;
formDataTrain.studyDayTrainingName = props.data.studyDayTrainingName;
formDataTrain.leaveDetail = props.data.leaveDetail;
formDataTrain.leaveRange = props.data.leaveRange;
formDataTrain.leaveRangeEnd = props.data.leaveRangeEnd;
formDataTrain.leaveDocument = [];
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataTrain.leaveWrote = props.data.leaveWrote;
formDataTrain.leaveStartDate = props.data.leaveStartDate;
formDataTrain.leaveEndDate = props.data.leaveEndDate;
formDataTrain.leaveTotal = props.data.leaveTotal;
formDataTrain.leavebirthDate = props.data.leavebirthDate;
formDataTrain.leavegovernmentDate = props.data.leavegovernmentDate;
formDataTrain.leaveSalary = props.data.leaveSalary;
formDataTrain.leaveSalaryText = props.data.leaveSalaryText;
formDataTrain.studyDayScholarship = props.data.studyDayScholarship;
formDataTrain.studyDayCountry = props.data.studyDayCountry;
formDataTrain.studyDayTrainingSubject =
props.data.studyDayTrainingSubject;
formDataTrain.studyDayTrainingName = props.data.studyDayTrainingName;
formDataTrain.leaveDetail = props.data.leaveDetail;
formDataTrain.leaveRange = props.data.leaveRange;
formDataTrain.leaveRangeEnd = props.data.leaveRangeEnd;
formDataTrain.leaveDocument = [];
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
}
}
});
);
/**Hook */
onMounted(async () => {
@ -303,7 +307,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataTrain.leaveStartDate"
:locale="'th'"
autoApply
@ -380,7 +383,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm"> -->
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataTrain.leaveEndDate"
:locale="'th'"
autoApply
@ -484,7 +486,6 @@ onMounted(async () => {
<div class="col-12 col-sm-3">
<datepicker
v-model="formDataTrain.leavegovernmentDate"
menu-class-name="modalfix"
autoApply
borderless
week-start="0"
@ -533,7 +534,6 @@ onMounted(async () => {
<div class="col-12 col-sm-3">
<datepicker
v-model="formDataTrain.leavebirthDate"
menu-class-name="modalfix"
autoApply
borderless
readonly

View file

@ -219,30 +219,35 @@ const leaveDocumentList = ref<any>();
const leaveDraftDocument = ref<string>();
const statusCheck = ref<string>("");
watch(props, async () => {
if (props.data) {
// totalCheck.value = null;
formDataWorkInternational.leaveWrote = props.data.leaveWrote;
formDataWorkInternational.leaveStartDate = new Date(
props.data.leaveStartDate
);
formDataWorkInternational.leaveEndDate = new Date(props.data.leaveEndDate);
formDataWorkInternational.leaveDetail = props.data.leaveDetail;
leaveDraftDocument.value = props.data.leaveDraftDocument;
formDataWorkInternational.leaveRange = props.data.leaveRange;
formDataWorkInternational.leaveRangeEnd = props.data.leaveRangeEnd;
formDataWorkInternational.leaveTotal = props.data.leaveTotal;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataWorkInternational.leaveDraftDocument = null;
formDataWorkInternational.leaveDocument = [];
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
watch(
() => props,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataWorkInternational.leaveWrote = props.data.leaveWrote;
formDataWorkInternational.leaveStartDate = new Date(
props.data.leaveStartDate
);
formDataWorkInternational.leaveEndDate = new Date(
props.data.leaveEndDate
);
formDataWorkInternational.leaveDetail = props.data.leaveDetail;
leaveDraftDocument.value = props.data.leaveDraftDocument;
formDataWorkInternational.leaveRange = props.data.leaveRange;
formDataWorkInternational.leaveRangeEnd = props.data.leaveRangeEnd;
formDataWorkInternational.leaveTotal = props.data.leaveTotal;
leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status;
formDataWorkInternational.leaveDraftDocument = null;
formDataWorkInternational.leaveDocument = [];
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
}
}
});
);
watch(
() => formDataWorkInternational.leaveEndDate,
@ -311,7 +316,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataWorkInternational.leaveStartDate"
:locale="'th'"
autoApply
@ -388,7 +392,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm"> -->
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataWorkInternational.leaveEndDate"
:locale="'th'"
autoApply

View file

@ -285,50 +285,53 @@ const dateEndInputStyle = computed(() => {
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataFollowSpouse.leaveWrote = props.data.leaveWrote;
formDataFollowSpouse.leaveStartDate = new Date(props.data.leaveStartDate);
formDataFollowSpouse.leaveEndDate = new Date(props.data.leaveEndDate);
formDataFollowSpouse.leaveDetail = props.data.leaveDetail;
formDataFollowSpouse.leaveTotal = props.data.leaveTotal;
formDataFollowSpouse.leaveSalaryText = props.data.leaveSalaryText;
formDataFollowSpouse.leaveSalary = props.data.leaveSalary;
formDataFollowSpouse.coupleDayName = props.data.coupleDayName;
formDataFollowSpouse.coupleDayPosition = props.data.coupleDayPosition;
formDataFollowSpouse.coupleDayLevel = props.data.coupleDayLevel;
formDataFollowSpouse.leaveRange = props.data.leaveRange;
formDataFollowSpouse.leaveRangeEnd = props.data.leaveRangeEnd;
formDataFollowSpouse.coupleDaySumTotalHistory =
props.data.coupleDaySumTotalHistory;
formDataFollowSpouse.coupleDayLevelCountry =
props.data.coupleDayLevelCountry;
formDataFollowSpouse.coupleDayCountryHistory =
props.data.coupleDayCountryHistory;
formDataFollowSpouse.coupleDayTotalHistory =
props.data.coupleDayTotalHistory;
formDataFollowSpouse.coupleDayStartDateHistory =
props.data.coupleDayStartDateHistory;
formDataFollowSpouse.coupleDayEndDateHistory =
props.data.coupleDayEndDateHistory;
leaveDocumentList.value = props.data.leaveDocument;
checkTotalHistory();
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataFollowSpouse.leaveWrote = props.data.leaveWrote;
formDataFollowSpouse.leaveStartDate = new Date(props.data.leaveStartDate);
formDataFollowSpouse.leaveEndDate = new Date(props.data.leaveEndDate);
formDataFollowSpouse.leaveDetail = props.data.leaveDetail;
formDataFollowSpouse.leaveTotal = props.data.leaveTotal;
formDataFollowSpouse.leaveSalaryText = props.data.leaveSalaryText;
formDataFollowSpouse.leaveSalary = props.data.leaveSalary;
formDataFollowSpouse.coupleDayName = props.data.coupleDayName;
formDataFollowSpouse.coupleDayPosition = props.data.coupleDayPosition;
formDataFollowSpouse.coupleDayLevel = props.data.coupleDayLevel;
formDataFollowSpouse.leaveRange = props.data.leaveRange;
formDataFollowSpouse.leaveRangeEnd = props.data.leaveRangeEnd;
formDataFollowSpouse.coupleDaySumTotalHistory =
props.data.coupleDaySumTotalHistory;
formDataFollowSpouse.coupleDayLevelCountry =
props.data.coupleDayLevelCountry;
formDataFollowSpouse.coupleDayCountryHistory =
props.data.coupleDayCountryHistory;
formDataFollowSpouse.coupleDayTotalHistory =
props.data.coupleDayTotalHistory;
formDataFollowSpouse.coupleDayStartDateHistory =
props.data.coupleDayStartDateHistory;
formDataFollowSpouse.coupleDayEndDateHistory =
props.data.coupleDayEndDateHistory;
leaveDocumentList.value = props.data.leaveDocument;
checkTotalHistory();
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
const coupleDayTotalHistory = await calculateDurationYmd(
props.data.coupleDayStartDateHistory,
props.data.coupleDayEndDateHistory
);
formDataFollowSpouse.coupleDayTotalHistory = coupleDayTotalHistory;
statusCheck.value = props.data.status;
formDataFollowSpouse.leaveDocument = [];
const coupleDayTotalHistory = await calculateDurationYmd(
props.data.coupleDayStartDateHistory,
props.data.coupleDayEndDateHistory
);
formDataFollowSpouse.coupleDayTotalHistory = coupleDayTotalHistory;
statusCheck.value = props.data.status;
formDataFollowSpouse.leaveDocument = [];
}
}
});
);
/**Hook */
onMounted(async () => {
@ -405,7 +408,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataFollowSpouse.leaveStartDate"
:locale="'th'"
autoApply
@ -483,7 +485,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm"> -->
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataFollowSpouse.leaveEndDate"
:locale="'th'"
autoApply
@ -673,7 +674,6 @@ onMounted(async () => {
<datepicker
class="col-12 col-md-3 col-sm-12 inputgreen"
menu-class-name="modalfix"
v-model="formDataFollowSpouse.coupleDayStartDateHistory"
:locale="'th'"
autoApply
@ -720,7 +720,6 @@ onMounted(async () => {
</datepicker>
<datepicker
class="col-12 col-md-3 col-sm-12 inputgreen"
menu-class-name="modalfix"
v-model="formDataFollowSpouse.coupleDayEndDateHistory"
:locale="'th'"
autoApply

View file

@ -198,27 +198,32 @@ const dateEndInputStyle = computed(() => {
const leaveDocumentList = ref<any>();
const leaveDraftDocument = ref<string>();
const statusCheck = ref<string>("");
watch(props.data, async () => {
if (props.data) {
// totalCheck.value = null;
formDataRehabilitation.leaveWrote = props.data.leaveWrote;
formDataRehabilitation.leaveStartDate = new Date(props.data.leaveStartDate);
formDataRehabilitation.leaveEndDate = new Date(props.data.leaveEndDate);
formDataRehabilitation.leaveDetail = props.data.leaveDetail;
leaveDraftDocument.value = props.data.leaveDraftDocument;
leaveDocumentList.value = props.data.leaveDocument;
formDataRehabilitation.leaveRange = props.data.leaveRange;
formDataRehabilitation.leaveRangeEnd = props.data.leaveRangeEnd;
formDataRehabilitation.leaveDraftDocument = null;
formDataRehabilitation.leaveDocument = [];
statusCheck.value = props.data.status;
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
watch(
() => props.data,
async () => {
if (props.data) {
// totalCheck.value = null;
formDataRehabilitation.leaveWrote = props.data.leaveWrote;
formDataRehabilitation.leaveStartDate = new Date(
props.data.leaveStartDate
);
formDataRehabilitation.leaveEndDate = new Date(props.data.leaveEndDate);
formDataRehabilitation.leaveDetail = props.data.leaveDetail;
leaveDraftDocument.value = props.data.leaveDraftDocument;
leaveDocumentList.value = props.data.leaveDocument;
formDataRehabilitation.leaveRange = props.data.leaveRange;
formDataRehabilitation.leaveRangeEnd = props.data.leaveRangeEnd;
formDataRehabilitation.leaveDraftDocument = null;
formDataRehabilitation.leaveDocument = [];
statusCheck.value = props.data.status;
const leaveTotal = await calculateDurationYmd(
props.data.leaveStartDate,
props.data.leaveEndDate
);
leaveText.value = leaveTotal;
}
}
});
);
/**Hook */
onMounted(async () => {
@ -274,7 +279,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataRehabilitation.leaveStartDate"
:locale="'th'"
autoApply
@ -351,7 +355,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm"> -->
<div class="col-12 col-md-3 col-sm-6 inputgreen">
<datepicker
menu-class-name="modalfix"
v-model="formDataRehabilitation.leaveEndDate"
:locale="'th'"
autoApply

View file

@ -101,7 +101,10 @@ async function getCommander() {
page: pagination.value.page,
pageSize: pagination.value.rowsPerPage,
keycloakId: storeData.formData.keycloakId,
type:storeData.officerType.toLocaleUpperCase() == 'OFFICER' ? 'officer':'employee'
type:
storeData.officerType.toLocaleUpperCase() == "OFFICER"
? "officer"
: "employee",
})
.then((res) => {
rows.value = res.data.result.data;
@ -170,7 +173,6 @@ onMounted(() => {
<div class="col-12 row q-pa-sm q-col-gutter-sm">
<datepicker
class="col-12 col-sm-6"
menu-class-name="modalfix"
v-model="dataStore.dateSendLeave"
:locale="'th'"
autoApply

View file

@ -65,15 +65,12 @@ async function fetchDataTable() {
/** function เรียกประเภทการลา */
async function fectOptionType() {
await http
.get(config.API.leaveType())
.then(async (res) => {
leaveType.value = res.data.result;
LeaveData.fetchLeaveType(res.data.result);
})
.catch((err) => {
messageError($q, err);
});
const data = await LeaveData.fetchLeaveTypeData();
if (!data) {
return;
}
leaveType.value = data;
LeaveData.fetchLeaveType(data);
}
/**
@ -95,25 +92,26 @@ async function onClickEdit(id: string) {
router.push(`/leave/edit/${id}`);
}
//
function clickDelete(id: string) {
dialogRemove($q, () => onClickDelete(id));
}
/**
* function ลบรายการ
* @param id
* งกนลบขอมลการลา
* @param id รายการลาทองการลบ
*/
async function onClickDelete(id: string) {
await http
.delete(config.API.leaveUserId(id))
.then(async (res) => {
success($q, "ลบข้อมูลสำเร็จ");
fetchDataTable();
})
.catch((err) => {
messageError($q, err);
});
function clickDelete(id: string) {
dialogRemove($q, async () => {
showLoader();
await http
.delete(config.API.leaveUserId(id))
.then(async () => {
await fetchDataTable();
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
});
}
/** function closePopup*/
@ -170,8 +168,15 @@ function convert(val: any) {
* เรยกฟงกนทงหมดตอนเรยกใชไฟล
*/
onMounted(async () => {
await fectOptionType();
await fetchDataTable();
try {
showLoader();
await fectOptionType();
await fetchDataTable();
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
});
</script>
<template>
@ -299,6 +304,7 @@ onMounted(async () => {
<q-menu>
<q-list>
<q-item
v-if="props.row.status != 'DRAFT'"
clickable
v-close-popup
@click="onClickView(props.row.id, 'CANCEL')"

View file

@ -101,7 +101,6 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
<div class="items-center col-12 row q-col-gutter-sm">
<datepicker
v-if="leaveStore.tabValue === 'list'"
menu-class-name="modalfix"
v-model="year"
class="col-xs-12 col-sm-auto"
:locale="'th'"
@ -135,6 +134,8 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
</datepicker>
<!-- นหาขอความใน table -->
<q-select
fill-input
hide-selected
outlined
dense
v-model="leaveStore.type"
@ -174,6 +175,8 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
/> </template
></q-select>
<q-select
fill-input
hide-selected
outlined
dense
v-model="leaveStore.status"

View file

@ -1,6 +1,5 @@
import { defineStore } from "pinia";
import { ref } from "vue";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
@ -18,8 +17,7 @@ import type {
import type { DataOption } from "../14_IDP/interface/Main";
const mixin = useCounterMixin();
const { date2Thai, messageError, showLoader, hideLoader } = mixin;
const $q = useQuasar();
const { date2Thai, showLoader, hideLoader } = mixin;
const type = ref<string>("00000000-0000-0000-0000-000000000000");
const status = ref<string>("ALL");
export const useLeaveStore = defineStore("Leave", () => {
@ -29,6 +27,7 @@ export const useLeaveStore = defineStore("Leave", () => {
const LeaveStatus = ref<string | null>("0");
const fiscalYearyear = ref<Number | null>(new Date().getFullYear());
const rows = ref<ListLeaveTable[]>([]);
const leaveTypeData = ref<TypeLeave[]>([]);
/**
* function Table
@ -126,7 +125,8 @@ export const useLeaveStore = defineStore("Leave", () => {
{ id: "PENDING", name: "กำลังดำเนินการ" },
{ id: "APPROVE", name: "อนุญาต " },
{ id: "REJECT", name: "ไม่อนุญาต" },
{ id: "DELETE", name: "ยกเลิก" },
{ id: "DELETING", name: "กำลังดำเนินการยกเลิก" },
{ id: "DELETE", name: "ยกเลิกสำเร็จ" },
]);
const statusOptions = ref<any[]>(statusOptionsMain.value);
@ -136,10 +136,9 @@ export const useLeaveStore = defineStore("Leave", () => {
* @param update
* @param refData
*/
function filterOption(val: any, update: Function, refData: string) {
function filterOption(val: string, update: Function, refData: string) {
switch (refData) {
case "LeaveTypeOption":
type.value = "";
update(() => {
typeOptions.value = typeOptionsMain.value.filter(
(v: any) => v.name.indexOf(val) > -1
@ -147,7 +146,6 @@ export const useLeaveStore = defineStore("Leave", () => {
});
break;
case "LeaveStatusOption":
status.value = "";
update(() => {
statusOptions.value = statusOptionsMain.value.filter(
(v: any) => v.name.indexOf(val) > -1
@ -344,7 +342,7 @@ export const useLeaveStore = defineStore("Leave", () => {
Number(data.leaveLimit) - Number(data.restDayTotalOld);
})
.catch((e: any) => {
messageError($q, e);
console.log(e);
})
.finally(() => {
hideLoader();
@ -368,7 +366,7 @@ export const useLeaveStore = defineStore("Leave", () => {
Number(data.leaveLimit) - Number(data.restDayTotalOld);
})
.catch((e: any) => {
messageError($q, e);
console.log(e);
});
dateSendLeave.value = data.dateSendLeave;
@ -405,6 +403,21 @@ export const useLeaveStore = defineStore("Leave", () => {
restDayCurrentTotal.value = 0;
}
/** ฟังก์ชันเรียกข้อมูลประเภทการลา */
async function fetchLeaveTypeData() {
if (leaveTypeData.value.length > 0) {
return leaveTypeData.value;
} else {
try {
const res = await http.get(config.API.leaveType());
leaveTypeData.value = res.data.result;
return leaveTypeData.value;
} catch (error) {
console.error("Fetch leave type error:", error);
}
}
}
return {
tabValue,
typeOptions,
@ -459,5 +472,7 @@ export const useLeaveStore = defineStore("Leave", () => {
currentAddress,
rangeOptions,
converstType,
fetchLeaveTypeData,
};
});

View file

@ -433,7 +433,7 @@ onMounted(async () => {
:on-confirm="onConfirm"
:click-delete="clickDelete"
/>
<HelpWifeBirthForm5
<HelpWifeBirthForm
v-if="model === 'LV-004'"
:data="formData"
:on-submit="onSubmit"

View file

@ -118,8 +118,11 @@ const columns = ref<QTableProps["columns"]>([
},
]);
const isloading = ref<boolean>(false);
/** function เรียกข้อมูลตารางสถิติการลา*/
async function fetchStatsTable() {
isloading.value = true;
await http
.get(config.API.leaveStats())
.then((res) => {
@ -168,9 +171,11 @@ async function fetchStatsTable() {
leaveCountReject: e.leaveCountReject,
leaveCountDelete: e.leaveCountDelete,
}));
isloading.value = false;
})
.catch((err) => {
messageError($q, err);
isloading.value = true;
});
}
@ -210,7 +215,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-12 col-md-11 row">
<!-- สถการลา -->
<div class="col-12 row q-pb-sm">
<q-card bordered class="col-12 row">
<q-card bordered class="col-12 row" v-if="!isloading">
<div class="row col-12 items-center q-px-md q-py-sm">
<div class="text-weight-bold">สถการลา</div>
<q-space />
@ -230,12 +235,7 @@ onMounted(async () => {
:key="item.text"
>
<div class="col-xs-12 col-sm-12">
<q-card
bordered
flat
class="col-12 row shadow-0 no-wrap"
v-if="item.text === 'ลาพักผ่อน'"
>
<q-card bordered flat class="col-12 row shadow-0 no-wrap">
<div class="col-xs-12 col-sm-8 row justify-center q-py-md">
<div class="col-12 row items-center justify-center q-pb-sm">
<q-knob
@ -327,6 +327,91 @@ onMounted(async () => {
</div>
</div>
</q-card>
<q-card bordered class="col-12 row q-px-md q-py-sm" v-else>
<div class="row col-12 items-center q-px-md q-py-sm">
<div class="text-weight-bold">สถการลา</div>
<q-space />
<q-skeleton type="QBtn" size="20px" style="width: 100px" />
</div>
<div
bordered
class="col-6 row justify-center q-px-md q-pb-md q-col-gutter-sm"
>
<div class="col-xs-12 col-sm-12">
<q-card bordered flat class="col-12 row shadow-0 no-wrap">
<div class="col-xs-12 col-sm-8 row justify-center q-py-md">
<div class="col-12 row items-center justify-center q-pb-sm">
<q-skeleton type="circle" size="60px" />
<div class="col-12 row items-center justify-center">
<q-skeleton type="text" size="20px" style="width: 50px" />
</div>
</div>
</div>
<div class="row gt-xs"><q-separator vertical /></div>
<div class="col-xs-12 col-sm-4 gt-xs row">
<div class="col-12 row text-dark text-body2 items-center">
<div class="col-12 row q-pa-xs q-px-md row">
<span class="text-grey-7 col-6">ได</span>
<q-skeleton type="text" style="width: 50px" />
</div>
<div class="col-12"><q-separator /></div>
<div class="col-12 row q-pa-xs q-px-md">
<span class="text-grey-7 col-6">ใชไป</span>
<q-skeleton type="text" style="width: 50px" />
</div>
<div class="col-12"><q-separator /></div>
<div class="col-12 row q-pa-xs q-px-md">
<span class="text-grey-7 col-6">คงเหล</span>
<q-skeleton type="text" style="width: 50px" />
</div>
</div>
</div>
</q-card>
</div>
</div>
<div class="col-6 row">
<div bordered class="col-12 row justify-center q-px-md q-pb-md">
<div class="col-xs-12 col-sm-12 row">
<div class="col-12 row">
<q-card
bordered
flat
class="shadow-0 col-12 fit row items-center q-px-lg"
>
<div class="text-subtitle2 col-4">
<q-skeleton type="text" style="width: 50px" />
</div>
<div class="text-subtitle2 col-8 row">
<span class="text-grey-7 q-pr-md">ใชไป</span>
<q-skeleton type="text" style="width: 50px" />
</div>
</q-card>
</div>
</div>
</div>
<div bordered class="col-12 row justify-center q-px-md q-pb-md">
<div class="col-xs-12 col-sm-12 row">
<div class="col-12 row">
<q-card
bordered
flat
class="shadow-0 col-12 fit row items-center q-px-lg"
>
<div class="text-subtitle2 col-4">
<q-skeleton type="text" style="width: 50px" />
</div>
<div class="text-subtitle2 col-8 row">
<span class="text-grey-7 q-pr-md">ใชไป</span>
<q-skeleton type="text" style="width: 50px" />
</div>
</q-card>
</div>
</div>
</div>
</div>
</q-card>
</div>
<div class="row col-12">

View file

@ -96,7 +96,7 @@ onMounted(() => {
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/evaluate')"
/>
<div>ประเมนเชยวชาญ</div>
</div>

View file

@ -272,11 +272,13 @@ function getCommander() {
.get(config.API.searchCommander)
.then((res) => {
const data = res.data.result;
formCommand.author = data.fullname;
formCommand.author = data.fullname;
formCommand.commanderFullname = data.commanderFullname;
formCommand.commanderPosition = data.commanderPosition;
formCommand.commanderAboveFullname = data.commanderAboveFullname;
formCommand.commanderAbovePosition = data.commanderAbovePosition;
formCommand.commanderOrg = data.commanderOrg;
formCommand.commanderAboveOrg = data.commanderAboveOrg;
})
.catch((e) => {
console.log(e);
@ -316,7 +318,6 @@ watch(
onMounted(async () => {
const user = await tokenParsed();
try {
showLoader();
await Promise.all([

View file

@ -29,6 +29,7 @@ const evaluateId = ref<string>(route.params.id.toString());
const emit = defineEmits(["update:form"]);
const fileEvaluation1 = ref<any>();
const assignedPosLevel = ref<string>(""); //
/** form จัดเตรียมเอกสารเล่ม 2*/
const formCommand = reactive<FormCommand>({
@ -148,6 +149,8 @@ async function fetcheSigner(id: string) {
formCommand.subject = data.subjectDoc2;
formCommand.assignedPosition = data.assignedPosition;
assignedPosLevel.value = data.assignedPosLevel;
store.statusUpload6 = data.isUpdated;
})
.catch((err) => {
@ -195,20 +198,22 @@ async function checkDoc() {
});
}
function getCommander() {
http
.get(config.API.searchCommander)
.then((res) => {
const data = res.data.result;
formCommand.commanderFullname = data.commanderFullname;
formCommand.commanderPosition = data.commanderPosition;
formCommand.commanderAboveFullname = data.commanderAboveFullname;
formCommand.commanderAbovePosition = data.commanderAbovePosition;
})
.catch((e) => {
messageError($q, e);
});
}
// function getCommander() {
// http
// .get(config.API.searchCommander)
// .then((res) => {
// const data = res.data.result;
// formCommand.commanderFullname = data.commanderFullname;
// formCommand.commanderPosition = data.commanderPosition;
// formCommand.commanderAboveFullname = data.commanderAboveFullname;
// formCommand.commanderAbovePosition = data.commanderAbovePosition;
// formCommand.commanderOrg = data.commanderOrg;
// formCommand.commanderAboveOrg = data.commanderAboveOrg;
// })
// .catch((e) => {
// messageError($q, e);
// });
// }
function onAddSubject() {
formCommand.subject.push("");
@ -282,7 +287,7 @@ onMounted(async () => {
lazy-rules
/>
</div>
<div class="col-6">
<div class="col-3">
<q-input
:readonly="store.currentStep != 6 || store.statusUpload6"
class="col-xs-12 col-sm-6"
@ -298,6 +303,17 @@ onMounted(async () => {
lazy-rules
/>
</div>
<div class="col-3">
<q-input
readonly
class="col-xs-12 col-sm-6"
dense
outlined
v-model="assignedPosLevel"
label="ระดับตำแหน่งที่ได้รับ"
hide-bottom-space
/>
</div>
</div>
<div

View file

@ -249,7 +249,7 @@ function onOpenDialogPerformance(
stetusEdit: boolean = false,
index: number | null = null
) {
if (stetusEdit && index) {
if (stetusEdit && index !== null) {
isIndex.value = index;
const data = formDetail.assessments[index];
formPerformance.year = data.year ? Number(data.year) - 543 : null;
@ -276,7 +276,7 @@ function onSubmitPerformance() {
isAdd: true,
};
if (isEdit.value && isIndex.value) {
if (isEdit.value && isIndex.value !== null && isIndex.value !== undefined) {
formDetail.assessments[isIndex.value] = body;
} else {
formDetail.assessments.push(body);

View file

@ -1,15 +1,13 @@
import http from "@/plugins/http";
import config from "@/app.config";
import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
const store = useEvaluateStore();
const mixin = useCounterMixin();
const $q = useQuasar();
const { showLoader, hideLoader, messageError } = mixin;
const { showLoader, hideLoader } = mixin;
/** function เช็คการยื่นข้อประเมิน*/
async function fetchCheckStatus() {
@ -26,7 +24,7 @@ async function fetchCheckStatus() {
fetchCheckStep(store?.evaluateId);
})
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();
@ -65,7 +63,7 @@ async function fetchCheckStep(id: string) {
store.step = step;
})
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
store.showLoadStatus = true;
@ -143,7 +141,7 @@ async function saveEvaluation(formSpec: any, detail: any) {
fetchCheckStatus();
})
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
fetchCheckStep(store?.evaluateId);
@ -155,10 +153,9 @@ async function nextPrapare(type: string, body: any) {
showLoader();
await http
.put(config.API.evaluationPreparedoc(store.evaluateId, type), body)
.then((res) => {
})
.then((res) => {})
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();
@ -170,10 +167,9 @@ async function nextCheckDoc(type: string) {
showLoader();
await http
.put(config.API.evaluationCheckdoc(store.evaluateId, type))
.then((res) => {
})
.then((res) => {})
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();

View file

@ -206,7 +206,7 @@ onMounted(async () => {
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/')"
/>
<div>ประเมนบคคล</div>
</div>

View file

@ -100,7 +100,7 @@ onMounted(() => {
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/appeal-complain')"
/>
เพมอทธรณ/องทกข
</div>

View file

@ -148,35 +148,46 @@ function onSubmit(data: FormDataType) {
);
}
watch(props.formProfile, () => {
if (props.formProfile !== null) {
formData.fullname = props.formProfile.fullname;
formData.profileId = props.formProfile.profileId;
formData.citizenId = props.formProfile.citizenId;
formData.oc = props.formProfile.oc;
formData.position = props.formProfile.position;
}
});
watch(
() => props.formProfile,
(newValue) => {
if (newValue !== null) {
formData.fullname = newValue.fullname;
formData.profileId = newValue.profileId;
formData.citizenId = newValue.citizenId;
formData.oc = newValue.oc;
formData.position = newValue.position;
}
},
{ deep: true }
);
watch(props.data, () => {
isReadOnly.value = true;
formData.id = props.data.id;
formData.title = props.data.title;
formData.description = props.data.description;
formData.status = props.data.status;
formData.type = props.data.type;
formData.year = props.data.year;
formData.caseType = props.data.caseType;
formData.caseNumber = props.data.caseNumber;
formData.fullname = props.data.fullname;
formData.citizenId = props.data.citizenId;
formData.profileId = props.data.profileId;
formData.lastUpdatedAt = props.data.lastUpdatedAt;
formData.disciplineComplaint_Appeal_Docs =
props.data.disciplineComplaint_Appeal_Docs;
formData.historyStatus = props.data.historyStatus;
});
watch(
() => props.data,
(newValue) => {
if (newValue !== null) {
isReadOnly.value = true;
formData.id = props.data.id;
formData.title = props.data.title;
formData.description = props.data.description;
formData.status = props.data.status;
formData.type = props.data.type;
formData.year = props.data.year;
formData.caseType = props.data.caseType;
formData.caseNumber = props.data.caseNumber;
formData.fullname = props.data.fullname;
formData.citizenId = props.data.citizenId;
formData.profileId = props.data.profileId;
formData.lastUpdatedAt = props.data.lastUpdatedAt;
formData.disciplineComplaint_Appeal_Docs =
props.data.disciplineComplaint_Appeal_Docs;
formData.historyStatus = props.data.historyStatus;
}
},
{ deep: true }
);
</script>
<template>
<div class="row">
<div class="col-sm-12 col-md-12 col-xs-12">

View file

@ -264,13 +264,13 @@ onMounted(async () => {
color="primary"
icon="mdi-plus"
@click="redirectToPageadd()"
><q-tooltip>เพมการอทธรณ/องทกข</q-tooltip></q-btn
>
<q-tooltip>เพมการอทธรณ/องทกข</q-tooltip>
</q-btn>
<div class="row col-12 q-col-gutter-sm q-mb-sm">
<div class="col-xs-12 col-md-2">
<datepicker
menu-class-name="modalfix"
v-model="formData.year"
class="col-2"
:locale="'th'"

View file

@ -236,8 +236,6 @@ function onSubmit() {
}
}
const customPosition = () => ({ top: "490px", left: "410px" });
async function getDataByYear() {
if (formData.year) {
showLoader();
@ -270,15 +268,15 @@ function getProjectDetail(val: any) {
development.value = data.developmentProjectTechniqueActuals;
reasonDevelopment70.value =
data.developmentProjectTechniqueActuals.includes("other1")
? data.reasonDevelopment70
? data.reasonActual70
: "";
reasonDevelopment20.value =
data.developmentProjectTechniqueActuals.includes("other2")
? data.reasonDevelopment20
? data.reasonActual20
: "";
reasonDevelopment10.value =
data.developmentProjectTechniqueActuals.includes("other3")
? data.reasonDevelopment10
? data.reasonActual10
: "";
})
.catch((e) => {
@ -388,9 +386,7 @@ watch(
v-model="formData.year"
:locale="'th'"
autoApply
position="center"
year-picker
:alt-position="customPosition"
:enableTimePicker="false"
@update:model-value="getDataByYear(), (projectName = '')"
>

View file

@ -1,17 +1,9 @@
import { defineStore } from "pinia";
import { ref, reactive, watch } from "vue";
import { ref, reactive } from "vue";
import type { DataOptions } from "./interface/index/Main";
import type { FormQuery } from "@/modules/08_KPI/interface/request/index";
import { useCounterMixin } from "@/stores/mixin";
import http from "@/plugins/http";
import config from "@/app.config";
import { useQuasar } from "quasar";
export const useKpiDataStore = defineStore("KPIDate", () => {
const $q = useQuasar();
const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError } = mixin;
const mainRowData = ref<any>();
const isUpdate = ref<boolean>(false);
const tabMainevaluator = ref<string>("1");
@ -432,47 +424,6 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
const devProbationScore = ref<number>(10); // สรุปผลการประเมินพฤติกรรมการปฏิบัติราชการ (สมรรถนะ+การพัฒนาตนเอง) (คะแนนเต็ม competencyDevScore คะแนน)
const competencyDevProbationScore = ref<number>(50); // สรุปผลการประเมินพฤติกรรมการปฏิบัติราชการ (สมรรถนะ+การพัฒนาตนเอง) (คะแนนเต็ม competencyDevScore คะแนน)
// function getDataWork() {
// showLoader();
// http
// .get(config.API.orgPosition + `/${dataProfile.value.profileId}`)
// .then((res) => {
// const data = res.data.result.isProbation;
// work.value = data;
// if (data) {
// indicatorScore.value = 50;
// competencyScore.value = 40;
// excusiveCompetencyScore.value = 40;
// competencyDevScore.value = 10;
// } else {
// indicatorScore.value = 70;
// competencyScore.value = 20;
// excusiveCompetencyScore.value = 20;
// competencyDevScore.value = 30;
// }
// })
// .catch((e) => {
// messageError($q, e);
// })
// .finally(() => {
// hideLoader();
// });
// }
// watch(
// () => tabMain.value,
// () => {
// if (tabMain.value == "3" && tabOpen.value == 3) {
// getDataWork();
// } else {
// indicatorScore.value = 70;
// competencyScore.value = 20;
// excusiveCompetencyScore.value = 20;
// competencyDevScore.value = 30;
// }
// }
// );
return {
tabMain,
dataProfile,
@ -526,6 +477,6 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
mainRowData,
resultsOptions,
statusOptions,
roleText
roleText,
};
});

View file

@ -1244,10 +1244,18 @@ onMounted(async () => {
<div class="col-12">กษาการในตำแหน/การรกษาราชการแทน</div>
</div>
<div class="row">
<div class="col-12" v-if="evaluator.isPosmasterAct">
<div
class="col-12"
v-if="evaluator.isPosmasterAct"
v-for="(data, index) in evaluator.posmasterAct"
:key="index"
>
{{
`${evaluator.posmasterAct[0].prefix}${evaluator.posmasterAct[0].firstName} ${evaluator.posmasterAct[0].lastName} (${evaluator.posmasterAct[0].posNo})`
data.firstName
? `- ${data.prefix}${data.firstName} ${data.lastName}`
: "- ว่าง"
}}
{{ `(${data.posNo})` }}
</div>
<div class="col-12" v-else>-</div>
</div>

View file

@ -435,7 +435,6 @@ onMounted(async () => {
<div class="row col-12 q-col-gutter-sm">
<div class="col-xs-12 col-md-1">
<datepicker
menu-class-name="modalfix"
v-model="year"
:locale="'th'"
autoApply

View file

@ -219,13 +219,14 @@ onMounted(async () => {
<div class="items-center col-12 row q-col-gutter-sm q-mb-sm">
<datepicker
class="col-md-1 col-xs-12"
menu-class-name="modalfix"
v-model="store.yearRound"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
@update:model-value=" store.formQuery.page = 1,fetchRoundOption(true)"
@update:model-value="
(store.formQuery.page = 1), fetchRoundOption(true)
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -300,7 +301,6 @@ onMounted(async () => {
:options="columns"
option-value="name"
style="min-width: 140px"
/>
</div>

View file

@ -689,7 +689,6 @@ onMounted(async () => {
<div class="row q-col-gutter-md">
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.scholarshipYear"
:locale="'th'"
autoApply
@ -822,7 +821,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.bookNoDate"
:locale="'th'"
autoApply
@ -865,7 +863,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.bookApproveDate"
:locale="'th'"
autoApply
@ -960,7 +957,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.contractDate"
:locale="'th'"
autoApply
@ -1018,7 +1014,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.reportBackNoDate"
:locale="'th'"
autoApply
@ -1057,7 +1052,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.reportBackDate"
:locale="'th'"
autoApply
@ -1205,7 +1199,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.startDate"
:locale="'th'"
autoApply
@ -1250,7 +1243,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.endDate"
:locale="'th'"
autoApply
@ -1334,7 +1326,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyStartDate"
:locale="'th'"
autoApply
@ -1375,7 +1366,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyEndDate"
:locale="'th'"
readonly
@ -1441,7 +1431,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadStartDate"
:locale="'th'"
autoApply
@ -1484,7 +1473,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadEndDate"
:locale="'th'"
autoApply
@ -1588,7 +1576,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.startDate"
:locale="'th'"
autoApply
@ -1633,7 +1620,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.endDate"
:locale="'th'"
readonly
@ -1717,7 +1703,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyStartDate"
:locale="'th'"
readonly
@ -1758,7 +1743,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyEndDate"
:locale="'th'"
autoApply
@ -1856,7 +1840,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.startDate"
:locale="'th'"
readonly
@ -1901,7 +1884,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.endDate"
:locale="'th'"
autoApply
@ -1985,7 +1967,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyStartDate"
:locale="'th'"
readonly
@ -2026,7 +2007,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyEndDate"
readonly
:locale="'th'"
@ -2099,7 +2079,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadStartDate"
:locale="'th'"
autoApply
@ -2142,7 +2121,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadEndDate"
:locale="'th'"
autoApply
@ -2343,7 +2321,6 @@ onMounted(async () => {
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.startDate"
:locale="'th'"
autoApply
@ -2392,7 +2369,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.endDate"
:locale="'th'"
autoApply
@ -2460,7 +2436,10 @@ onMounted(async () => {
/>
</div>
<div v-if="formBody.studyTopic == 'ดูงาน'" class="col-12 col-md-3">
<div
v-if="formBody.studyTopic == 'ดูงาน'"
class="col-12 col-md-3"
>
<q-input
dense
readonly
@ -2479,7 +2458,6 @@ onMounted(async () => {
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadStartDate"
:locale="'th'"
autoApply
@ -2526,7 +2504,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadEndDate"
:locale="'th'"
autoApply
@ -2636,7 +2613,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.startDate"
:locale="'th'"
autoApply
@ -2682,7 +2658,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.endDate"
:locale="'th'"
readonly
@ -2750,7 +2725,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyStartDate"
:locale="'th'"
readonly
@ -2796,7 +2770,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyEndDate"
:locale="'th'"
autoApply
@ -2880,7 +2853,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadStartDate"
:locale="'th'"
autoApply
@ -2921,7 +2893,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyAbroadEndDate"
:locale="'th'"
autoApply

View file

@ -181,7 +181,6 @@ onMounted(async () => {
<div class="items-center col-12 row q-col-gutter-sm q-mb-sm">
<datepicker
class="col-xs-12 col-md-1"
menu-class-name="modalfix"
v-model="year"
:locale="'th'"
autoApply

View file

@ -411,10 +411,10 @@ onMounted(async () => {
<div class="row">
<div class="col-12 col-sm-12 col-md-6 q-gutter-y-sm">
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">
<div class="col-4 text-grey-6 text-weight-medium">
เลขประจำตวประชาชน
</div>
<div class="col-7">
<div class="col-8">
{{
formDataInformation.citizenId
? formDataInformation.citizenId
@ -424,8 +424,8 @@ onMounted(async () => {
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium"> - สก</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium"> - สก</div>
<div class="col-8">
{{
formDataInformation.firstName
? `${
@ -441,10 +441,10 @@ onMounted(async () => {
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">
<div class="col-4 text-grey-6 text-weight-medium">
/เดอน/เก
</div>
<div class="col-7">
<div class="col-8">
{{
formDataInformation.birthDate
? date2Thai(formDataInformation.birthDate)
@ -454,8 +454,8 @@ onMounted(async () => {
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">เพศ</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">เพศ</div>
<div class="col-8">
{{
formDataInformation.gender ? formDataInformation.gender : "-"
}}
@ -463,8 +463,8 @@ onMounted(async () => {
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">สถานภาพ</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">สถานภาพ</div>
<div class="col-8">
{{
formDataInformation.relationship
? formDataInformation.relationship
@ -476,8 +476,8 @@ onMounted(async () => {
<div class="col-12 col-sm-12 col-md-6 q-gutter-y-sm">
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">ญชาต</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">ญชาต</div>
<div class="col-8">
{{
formDataInformation.nationality
? formDataInformation.nationality
@ -486,8 +486,8 @@ onMounted(async () => {
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">เชอชาต</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">เชอชาต</div>
<div class="col-8">
{{
formDataInformation.ethnicity
? formDataInformation.ethnicity
@ -496,8 +496,8 @@ onMounted(async () => {
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">ศาสนา</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">ศาสนา</div>
<div class="col-8">
{{
formDataInformation.religion
? formDataInformation.religion
@ -506,8 +506,8 @@ onMounted(async () => {
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">หมเลอด</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">หมเลอด</div>
<div class="col-8">
{{
formDataInformation.bloodGroup
? formDataInformation.bloodGroup
@ -516,8 +516,8 @@ onMounted(async () => {
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">เบอรโทร</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">เบอรโทร</div>
<div class="col-8">
<div class="row q-col-gutter-sm">
<div class="col-9">
<q-input
@ -580,8 +580,8 @@ onMounted(async () => {
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">เมล</div>
<div class="col-7">
<div class="col-4 text-grey-6 text-weight-medium">เมล</div>
<div class="col-8">
<div class="row q-col-gutter-sm">
<div class="col-9">
<q-input

View file

@ -267,7 +267,7 @@ const columns = ref<QTableProps["columns"]>([
},
]);
const pagination = ref({
sortBy: "lastUpdatedAt",
// sortBy: "lastUpdatedAt",
});
const columnsHistory = ref<QTableProps["columns"]>([

View file

@ -497,19 +497,19 @@ onMounted(async () => {
<div class="row">
<div class="col-12 col-sm-12 col-md-6 q-gutter-y-sm">
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">
<div class="col-6 text-grey-6 text-weight-medium">
นทงบรรจ
</div>
<div class="col-7">
<div class="col-6">
{{ formData.dateAppoint ? date2Thai(formData.dateAppoint) : "-" }}
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">
<div class="col-6 text-grey-6 text-weight-medium">
นทเรมปฏราชการ
</div>
<div class="col-7">
<div class="col-6">
{{ formData.dateStart ? date2Thai(formData.dateStart) : "-" }}
</div>
</div>
@ -518,22 +518,32 @@ onMounted(async () => {
v-if="dateToISO(formData.dateAppoint as Date) !== dateToISO(formData.dateStart as Date)"
class="row"
>
<div class="col-5 text-grey-6 text-weight-medium">
<div class="col-6 text-grey-6 text-weight-medium">
เหตผลทนทไมตรงก
</div>
<div class="col-7">
<div class="col-6">
{{ formData.reasonSameDate ? formData.reasonSameDate : "-" }}
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">
<div class="col-6 text-grey-6 text-weight-medium">
นครบเกษยณอาย
</div>
<div class="col-7">
<div class="col-6">
{{ formData.dateLeave ? date2Thai(formData.dateLeave) : "-" }}
</div>
</div>
<div class="row">
<div class="col-6 text-grey-6 text-weight-medium">
นทเกษยณอายราชการตามกฏหมาย
</div>
<div class="col-6">
{{
formData.dateRetireLaw ? date2Thai(formData.dateRetireLaw) : "-"
}}
</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-6 q-gutter-y-sm">
@ -561,16 +571,6 @@ onMounted(async () => {
{{ formData.govAgePlus ? formData.govAgePlus : 0 }}
</div>
</div>
<div class="row">
<div class="col-5 text-grey-6 text-weight-medium">
นทเกษยณอายราชการตามกฏหมาย
</div>
<div class="col-7">
{{
formData.dateRetireLaw ? date2Thai(formData.dateRetireLaw) : "-"
}}
</div>
</div>
</div>
</div>
</q-card>

View file

@ -114,7 +114,7 @@ const baseColumns = ref<QTableColumn[]>([
style: "font-size: 14px",
format(val, row) {
return row.posNoAbb && row.posNo
? `${row.posNoAbb}${row.posNo}`
? `${row.posNoAbb} ${row.posNo}`
: row.posNo
? row.posNo
: "-";

View file

@ -7,9 +7,6 @@ import http from "@/plugins/http";
import config from "@/app.config";
import { useDataStore } from "@/stores/data";
//history dialog
import DialogHistory from "@/modules/10_registry/Dialog/DialogHistory.vue";
import DialogDevelop from "@/modules/10_registry/Dialog/DialogDevelopmant.vue";
const typeIDP = ref<string>("");

View file

@ -254,7 +254,6 @@ watch(
}
);
const customPosition = () => ({ top: "385px", left: "410px" });
async function getDataByYear() {
if (formData.year) {
showLoader();
@ -409,7 +408,6 @@ function filterOptionFn(val: string, update: Function) {
autoApply
position="center"
year-picker
:alt-position="customPosition"
:enableTimePicker="false"
@update:model-value="getDataByYear(), (projectName = '')"
>

View file

@ -1,13 +1,7 @@
import { defineStore } from "pinia";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
const $q = useQuasar();
const mixin = useCounterMixin();
const { messageError } = mixin;
export const useRegistryDataStore = defineStore("RegistryDataStoreMain", () => {
async function getPathUploadFlie(
@ -27,7 +21,7 @@ export const useRegistryDataStore = defineStore("RegistryDataStoreMain", () => {
);
return res.data;
} catch (err) {
messageError($q, err);
console.log(err);
}
}

View file

@ -6,7 +6,6 @@ import { useCounterMixin } from "@/stores/mixin";
import type { DataOption } from "@/modules/10_registry/interface/index/Main";
const $q = useQuasar();
const mixin = useCounterMixin();
const {} = mixin;

View file

@ -23,7 +23,7 @@ const router = useRouter();
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/registry')"
/>
<div>อมลสวนต</div>
</div>

View file

@ -23,7 +23,7 @@ const router = useRouter();
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/registry')"
/>
<div>อมลราชการ</div>
</div>

View file

@ -18,7 +18,7 @@ const router = useRouter();
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/registry')"
/>
<div>อมลเงนเดอน/าจาง</div>
</div>

View file

@ -22,7 +22,7 @@ const router = useRouter();
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/registry')"
/>
<div>อมลผลงานและเครองราชฯ</div>
</div>

View file

@ -19,7 +19,7 @@ const router = useRouter();
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/registry')"
/>
<div>เอกสารหลกฐานและอนๆ</div>
</div>

View file

@ -140,7 +140,7 @@ onMounted(async () => {
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/registry/request-edit')"
/>
รายละเอยดคำรองขอแกไขทะเบยนประว
</div>
@ -159,7 +159,6 @@ onMounted(async () => {
<!-- นทนขอ -->
<div class="col-md-2 col-xs-12">
<datepicker
menu-class-name="modalfix"
v-model="dataRequest.createdAt"
:locale="'th'"
autoApply
@ -313,10 +312,13 @@ onMounted(async () => {
<div class="col-12 q-mt-sm">
<Workflow
v-if="dataStore.officerType === 'OFFICER'"
ref="workflowRef"
:id="requestId"
sys-name="REGISTRY_PROFILE"
:sys-name="
dataStore.officerType === 'OFFICER'
? 'REGISTRY_PROFILE'
: 'REGISTRY_PROFILE_EMP'
"
/>
</div>
</div>

View file

@ -1036,6 +1036,7 @@ onMounted(async () => {
<div>แบบมอบหมายงานฯ</div>
</div>
</div>
<q-form
greedy
@submit.prevent
@ -1164,7 +1165,6 @@ onMounted(async () => {
</div>
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date_start"
:locale="'th'"
autoApply
@ -1200,7 +1200,6 @@ onMounted(async () => {
</div>
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date_finish"
:locale="'th'"
autoApply
@ -2338,7 +2337,6 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date1"
:locale="'th'"
autoApply
@ -2441,7 +2439,6 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date2"
:locale="'th'"
autoApply
@ -2532,7 +2529,6 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date3"
:locale="'th'"
autoApply
@ -2644,7 +2640,6 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date4"
:locale="'th'"
autoApply

View file

@ -340,7 +340,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="date_start"
:locale="'th'"
autoApply
@ -382,7 +381,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="date_finish"
:locale="'th'"
autoApply
@ -554,7 +552,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="chairman_dated"
:locale="'th'"
:readonly="!status"
@ -613,7 +610,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="director1_dated"
:locale="'th'"
autoApply
@ -672,7 +668,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="director2_dated"
:locale="'th'"
autoApply

View file

@ -550,7 +550,6 @@ onMounted(() => {
<div class="column q-gutter-y-sm">
<div class="text-dark text-weight-bold"> เดอน ประเม</div>
<datepicker
menu-class-name="modalfix"
v-model="evaluate_date"
:locale="'th'"
autoApply

View file

@ -412,7 +412,6 @@ onMounted(async () => {
<div class="row q-col-gutter-sm">
<div class="col-12 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="start_date"
:locale="'th'"
autoApply
@ -450,7 +449,6 @@ onMounted(async () => {
</div>
<div class="col-12 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="date_finish"
:locale="'th'"
autoApply
@ -2190,7 +2188,6 @@ onMounted(async () => {
/>
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="dateAutherise"
:locale="'th'"
autoApply

View file

@ -429,7 +429,6 @@ onMounted(async () => {
<div class="col-12 text-top0 row items-top q-col-gutter-sm">
<div class="col-12 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="start_date"
:locale="'th'"
autoApply
@ -470,7 +469,6 @@ onMounted(async () => {
<div class="col-12 col-sm-6">
<datepicker
menu-class-name="modalfix"
v-model="date_finish"
:locale="'th'"
autoApply
@ -1691,7 +1689,6 @@ onMounted(async () => {
/>
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="dateAutherise"
:locale="'th'"
autoApply

View file

@ -2313,7 +2313,6 @@ onMounted(async () => {
/>
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="dateAutherise"
:locale="'th'"
autoApply

View file

@ -217,7 +217,7 @@ onMounted(async () => {
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/')"
/>
<div>แผนผงองคกร</div>
</div>

View file

@ -188,7 +188,7 @@ onMounted(() => {
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/portfolio')"
/>
<div v-if="routeName == 'addTransfer'">เพิ่มเอกสาร/ผลงาน</div>
<div v-else>รายละเอียดเอกสาร/ผลงาน</div>

View file

@ -3,6 +3,9 @@ import { reactive, ref, computed, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useQuasar } from "quasar";
import axios from "axios";
import { useDataStore } from "@/stores/data";
import Workflow from "@/components/Workflow/Main.vue";
import http from "@/plugins/http";
import config from "@/app.config";
@ -16,12 +19,16 @@ import type {
const $q = useQuasar();
const { dialogConfirm, showLoader, hideLoader, messageError, success } =
useCounterMixin();
const dataStore = useDataStore();
const idRow = ref<string>("");
const router = useRouter();
const route = useRoute();
const isReadOnly = ref<boolean>(false);
const isEdit = ref<boolean>(false); // /
const requestId = ref<string>(
route.params.id ? route.params.id.toString() : ""
);
const formData = reactive<FormDataIDP>({
topic: "",
@ -321,7 +328,7 @@ onMounted(() => {
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
@click="router.push('/IDP')"
/>
{{
isEdit
@ -538,6 +545,15 @@ onMounted(() => {
><q-tooltip>นท</q-tooltip></q-btn
>
</q-card-actions>
<div class="col-12 q-mt-sm">
<Workflow
v-if="dataStore.officerType === 'OFFICER' && requestId"
ref="workflowRef"
:id="requestId"
sys-name="REGISTRY_IDP"
/>
</div>
</q-form>
</q-card>
</div>

View file

@ -470,7 +470,6 @@ onMounted(async () => {
</div>
<div class="col-12">
<datepicker
menu-class-name="modalfix"
v-model="formData.evaluate_date"
:locale="'th'"
autoApply

View file

@ -1216,7 +1216,6 @@ onMounted(async () => {
</div>
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date_start"
:locale="'th'"
autoApply
@ -1256,7 +1255,6 @@ onMounted(async () => {
</div>
<div class="col-xs-12 col-sm-4">
<datepicker
menu-class-name="modalfix"
v-model="date_finish"
:locale="'th'"
autoApply

View file

@ -1,6 +1,7 @@
const ACCESS_TOKEN = "BMAHRISUSER_KEYCLOAK_IDENTITY";
const key_C_Config = {
url_Logout: import.meta.env.VITE_URL_SSO,
landing_PageUrl: import.meta.env.VITE_URL_LANDING,
};
interface AuthResponse {
access_token: string;
@ -10,22 +11,32 @@ interface AuthResponse {
const authenticated = async () => ((await getToken()) ? true : false);
async function setAuthen(r: AuthResponse, val: string) {
await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in);
setCookie("SSO", val, r.expires_in);
window.location.href = "/";
async function setAuthen(r: AuthResponse, val: string, url?: string) {
if (r && r.access_token) {
await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in);
setCookie("SSO", val, r.expires_in);
window.location.href = url ? encodeURI(url) : "/";
}
}
async function logout() {
await deleteCookie(ACCESS_TOKEN);
window.location.href = key_C_Config.url_Logout;
async function logout(force: boolean = false) {
if (!force) {
await deleteCookie(ACCESS_TOKEN);
window.location.href = key_C_Config.url_Logout;
} else {
const currentUrl = window.location.href;
const loginUrl = `${
key_C_Config.landing_PageUrl
}?system=user&redirectUrl=${encodeURIComponent(currentUrl)}`;
window.location.href = loginUrl;
}
}
async function getToken() {
return getCookie(ACCESS_TOKEN);
}
// 2024-08-29T02:55:13.000Z
function setCookie(name: string, value: any, time: number) {
async function setCookie(name: string, value: any, time: number) {
let expires = "";
if (time) {
const date = new Date();
@ -47,7 +58,7 @@ function getCookie(name: string) {
return null;
}
function deleteCookie(name: string) {
async function deleteCookie(name: string) {
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
}
@ -71,4 +82,23 @@ async function tokenParsed() {
return JSON.parse(jsonPayload);
}
export { getToken, authenticated, logout, setAuthen, tokenParsed, getCookie };
async function redirectToLandingPage() {
await deleteCookie(ACCESS_TOKEN);
window.location.href = key_C_Config.landing_PageUrl;
}
async function logoutSSO() {
await deleteCookie(ACCESS_TOKEN);
window.location.href = key_C_Config.landing_PageUrl + `/logout`;
}
export {
getToken,
authenticated,
logout,
setAuthen,
tokenParsed,
getCookie,
redirectToLandingPage,
logoutSSO,
};

View file

@ -1,13 +1,10 @@
import axios from "axios";
import config from "@/app.config";
import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
const $q = useQuasar();
const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError } = mixin;
const { showLoader, hideLoader } = mixin;
async function genReport(data: any, fileName: string, type: string = "docx") {
showLoader();
@ -49,7 +46,7 @@ async function genReport(data: any, fileName: string, type: string = "docx") {
}
})
.catch((err) => {
messageError($q, err);
console.log(err);
})
.finally(() => {
hideLoader();

View file

@ -32,6 +32,8 @@ http.interceptors.response.use(
if (typeof error !== undefined) {
// eslint-disable-next-line no-prototype-builtins
if (error.hasOwnProperty("response")) {
console.log("error.response.status", error.response.status);
if (error.response.status === 403) {
window.location.href = "/error";
// Store.commit("SET_ERROR_MESSAGE", error.response.data.message);

View file

@ -95,7 +95,8 @@ router.beforeEach(async (to, from, next) => {
if (to.meta.Auth) {
const checkAuthen = await authenticated();
if (!checkAuthen && to.meta.Auth) {
logout();
logout(true);
return;
}
}
next();

View file

@ -132,3 +132,6 @@ input.input-alert
.filter-card
background-color: #f1f1f1b0
.modalfix
position: fixed !important

View file

@ -7,7 +7,13 @@ import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
import CustomComponent from "@/components/CustomDialog.vue";
import avatar from "@/assets/avatar_user.jpg";
import { tokenParsed, logout, getCookie } from "@/plugins/auth";
import {
tokenParsed,
logout,
getCookie,
redirectToLandingPage,
logoutSSO,
} from "@/plugins/auth";
import { useDataStore } from "@/stores/data";
@ -154,7 +160,7 @@ const doLogout = () => {
async () => {
await http.post(config.API.keycloakLogSSO, { text: "ออกจากระบบ" });
// authen with client
await logout();
await logoutSSO();
},
"ยืนยันการออกจากระบบ",
"ต้องการออกจากระบบใช่หรือไม่"
@ -502,7 +508,7 @@ function onViewDetailNoti(url: string) {
<q-item
clickable
v-close-popup
:href="landingPageUrl"
@click="redirectToLandingPage"
v-if="isSsoToken"
>
<q-item-section avatar style="min-width: 30px">

View file

@ -12,7 +12,11 @@ onMounted(async () => {
expires_in: route.query.expires ? route.query.expires : 36000,
refresh_token: route.query.accessToken,
};
setAuthen(params, "y");
setAuthen(
params,
"y",
route.query.redirectUrl ? (route.query.redirectUrl as string) : "/"
);
}
});
</script>