Merge branch 'develop' into devTee

This commit is contained in:
setthawutttty 2024-01-12 15:06:04 +07:00
commit 5d5cfdc88d
46 changed files with 1102 additions and 301 deletions

View file

@ -6,8 +6,7 @@ export default {
evaluateDirectorMain: () => `${evaluateDirectorMain}`, evaluateDirectorMain: () => `${evaluateDirectorMain}`,
evaluateDirectorById: (id: string) => `${evaluateDirectorMain}/${id}`, evaluateDirectorById: (id: string) => `${evaluateDirectorMain}/${id}`,
evaluationMain: (page: number, pageSize: number, keyword: string) => evaluationMain: () => `${evaluation}`,
`${evaluation}?page=${page}&pageSize=${pageSize}&keyword=${keyword}`,
evaluateGetDetail: (id: string) => `${evaluation}/check-spec/${id}`, evaluateGetDetail: (id: string) => `${evaluation}/check-spec/${id}`,
evaluateGetStep: (id: string) => `${evaluation}/check/${id}`, evaluateGetStep: (id: string) => `${evaluation}/check/${id}`,
@ -26,7 +25,7 @@ export default {
evaluationApproveDoc1: (id: string) => `${evaluation}/doc1/approve/${id}`, evaluationApproveDoc1: (id: string) => `${evaluation}/doc1/approve/${id}`,
evaluationNext5To6: (id: string) => `${evaluation}/announce/${id}`, evaluationNext5To6: (id: string) => `${evaluation}/announce/${id}`,
evaluationNextFinish: (id: string) => `${evaluation}/wait-check-doc-v2/${id}`, evaluationNextFinish: (id: string) => `${evaluation}/wait-check-doc-v2/${id}`,
evaluationHistory: (id: string) => `${evaluation}/step-history/${id}`, evaluationHistory: (id: string) => `${evaluation}/step-history/${id}`,
evaluationDateAnnounce: (id: string) => `${evaluation}/check-date/${id}`, evaluationDateAnnounce: (id: string) => `${evaluation}/check-date/${id}`,

View file

@ -50,6 +50,79 @@ const menuList = readonly<any[]>([
path: "dashboard", path: "dashboard",
role: "dashboard", role: "dashboard",
}, },
{
key: 3,
icon: "o_person",
activeIcon: "person",
label: "ข้อมูลหลัก (ใหม่)",
path: "metadataNew",
role: "metadata",
children: [
{
key: 3.1,
label: "ข้อมูลปฏิทินวันหยุด",
path: "masterCalendarWork",
},
{
key: 3.2,
label: "ข้อมูลเครื่องราชอิสริยาภรณ์",
path: "masterInsignia",
},
],
},
{
key: 4,
icon: "o_groups",
activeIcon: "groups",
label: "โครงสร้างอัตรากำลัง (ใหม่)",
path: "organizationalNew",
role: "organization",
// children: [
// {
// key: 3.1,
// label: "จัดการตำแหน่ง",
// path: "organizationalMapping",
// },
// {
// key: 3.2,
// label: "แผนภูมิโครงสร้าง",
// path: "organizationalStructChart",
// },
// {
// key: 3.3,
// label: "แผนภูมิองค์กร",
// path: "organizationalOrgChart",
// },
// {
// key: 3.4,
// label: "ผังโครงสร้าง",
// path: "organizationalTree",
// },
// {
// key: 3.5,
// label: "ผังโครงสร้างลูกจ้าง",
// path: "organizationalEmployee",
// },
// {
// key: 3.6,
// label: "จัดการบัญชี 2",
// path: "manageReport2",
// },
// {
// key: 3.7,
// label: "รายงานบัญชี",
// path: "organizationalReport",
// },
// ],
},
{
key: 4,
icon: "o_contact_page",
activeIcon: "contact_page",
label: "ทะเบียนประวัติ (ใหม่)",
path: "registryNew",
role: "registry",
},
{ {
key: 2, key: 2,
icon: "o_person", icon: "o_person",

View file

@ -0,0 +1,10 @@
interface Pagination {
rowsPerPage: number;
}
interface DataOption {
id: string;
name: string;
}
export type { Pagination, DataOption };

View file

@ -0,0 +1,14 @@
interface DataSumCalendarObject {
id: number;
monthFull: String;
count: number;
color: String;
}
interface DataListsObject {
id: number;
count: number;
name: string;
}
export type { DataSumCalendarObject, DataListsObject };

View file

@ -0,0 +1,26 @@
const calendarWorkPage = () =>
import("@/modules/01_metadataNew/views/calendar.vue");
const masterInsignia = () => import("@/modules/01_metadataNew/views/insignia.vue");
export default [
{
path: "/master-data/calendar",
name: "masterCalendarWork",
component: calendarWorkPage,
meta: {
Auth: true,
Key: [7],
Role: "metadata",
},
},
{
path: "/master-data/insignia",
name: "masterInsignia",
component: masterInsignia,
meta: {
Auth: true,
Key: [7],
Role: "metadata",
},
},
];

View file

View file

@ -0,0 +1,7 @@
<template>
อมลปฏนวนหย
</template>
<script setup lang="ts"></script>
<style scoped></style>

View file

@ -0,0 +1,7 @@
<template>
อมลเครองราชอสรยาภรณ
</template>
<script setup lang="ts"></script>
<style scoped></style>

View file

@ -0,0 +1,10 @@
interface Pagination {
rowsPerPage: number;
}
interface DataOption {
id: string;
name: string;
}
export type { Pagination, DataOption };

View file

@ -0,0 +1,14 @@
interface DataSumCalendarObject {
id: number;
monthFull: String;
count: number;
color: String;
}
interface DataListsObject {
id: number;
count: number;
name: string;
}
export type { DataSumCalendarObject, DataListsObject };

View file

@ -0,0 +1,14 @@
const mainPage = () => import("@/modules/02_organizationalNew/views/main.vue");
export default [
{
path: "/organization-new",
name: "organizationalNew",
component: mainPage,
meta: {
Auth: true,
Key: [7],
Role: "organization",
},
},
];

View file

@ -0,0 +1,7 @@
<template>
โครงสรางอตรากำล (ใหม)
</template>
<script setup lang="ts"></script>
<style scoped></style>

View file

@ -0,0 +1,10 @@
interface Pagination {
rowsPerPage: number;
}
interface DataOption {
id: string;
name: string;
}
export type { Pagination, DataOption };

View file

@ -0,0 +1,14 @@
interface DataSumCalendarObject {
id: number;
monthFull: String;
count: number;
color: String;
}
interface DataListsObject {
id: number;
count: number;
name: string;
}
export type { DataSumCalendarObject, DataListsObject };

View file

@ -0,0 +1,14 @@
const mainPage = () => import("@/modules/02_organizationalNew/views/main.vue");
export default [
{
path: "/registry-new",
name: "registryNew",
component: mainPage,
meta: {
Auth: true,
Key: [7],
Role: "registry",
},
},
];

View file

View file

@ -0,0 +1,7 @@
<template>
ทะเบยนประว (ใหม)
</template>
<script setup lang="ts"></script>
<style scoped></style>

View file

@ -626,7 +626,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -45,8 +45,8 @@
icon="mdi-history" icon="mdi-history"
@click="clickHistory(props.row)" @click="clickHistory(props.row)"
> >
<q-tooltip>ประวแกไขประกาศเกยรต</q-tooltip> <q-tooltip>ประวแกไขประกาศเกยรต</q-tooltip>
</q-btn> </q-btn>
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
@ -67,9 +67,7 @@
/> />
<q-separator /> <q-separator />
<q-card-section class="q-p-sm"> <q-card-section class="q-p-sm">
<div <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"
>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
@ -516,7 +514,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++;
}); });
} }
}; };

View file

@ -617,7 +617,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -31,9 +31,9 @@
color="blue" color="blue"
icon="mdi-download-outline" icon="mdi-download-outline"
@click="downloadData(file.file)" @click="downloadData(file.file)"
> >
<q-tooltip>ดาวนโหลดเอกสารหลกฐาน</q-tooltip> <q-tooltip>ดาวนโหลดเอกสารหลกฐาน</q-tooltip>
</q-btn> </q-btn>
<q-btn <q-btn
class="gt-xs" class="gt-xs"
size="12px" size="12px"
@ -45,8 +45,8 @@
v-show="edit" v-show="edit"
@click="deleteData(file.id)" @click="deleteData(file.id)"
> >
<q-tooltip>ลบเอกสารหลกฐาน</q-tooltip> <q-tooltip>ลบเอกสารหลกฐาน</q-tooltip>
</q-btn> </q-btn>
</div> </div>
</q-item-section> </q-item-section>
</q-item> </q-item>
@ -145,6 +145,9 @@ import { useRoute } from "vue-router";
import HeaderTop from "@/modules/04_registry/components/Information/top.vue"; import HeaderTop from "@/modules/04_registry/components/Information/top.vue";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useProfileDataStore } from "@/modules/04_registry/store";
const profileStore = useProfileDataStore();
const props = defineProps({ const props = defineProps({
statusEdit: { statusEdit: {
@ -189,7 +192,7 @@ const getData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); profileStore.isLoad++;
}); });
} }
}; };

View file

@ -57,8 +57,8 @@
icon="mdi-history" icon="mdi-history"
@click="clickHistory(props.row)" @click="clickHistory(props.row)"
> >
<q-tooltip>ประวแกไขประวการศกษา</q-tooltip> <q-tooltip>ประวแกไขประวการศกษา</q-tooltip>
</q-btn> </q-btn>
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
@ -72,9 +72,7 @@
<DialogHeader tittle="ประวัติการศึกษา" :close="clickClose" /> <DialogHeader tittle="ประวัติการศึกษา" :close="clickClose" />
<q-separator /> <q-separator />
<q-card-section class="q-p-sm"> <q-card-section class="q-p-sm">
<div <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"
>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<selector <selector
:class="getClass(edit)" :class="getClass(edit)"
@ -1065,7 +1063,7 @@ const fetchLevel = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++;
}); });
}; };
@ -1087,7 +1085,8 @@ const fetchPositionPath = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++;
// hideLoader();
}); });
}; };
@ -1152,7 +1151,8 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
store.isLoad++;
}); });
} }
}; };

View file

@ -306,6 +306,9 @@ import HistoryTable from "@/components/TableHistory.vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import type { AddressOps } from "@/modules/04_registry/interface/index/Main"; import type { AddressOps } from "@/modules/04_registry/interface/index/Main";
import type { QTableProps } from "quasar"; import type { QTableProps } from "quasar";
import { useProfileDataStore } from "@/modules/04_registry/store";
const profileStore = useProfileDataStore();
const props = defineProps({ const props = defineProps({
statusEdit: { statusEdit: {
@ -631,7 +634,7 @@ const getNewData = async () => {
const fetchData = async () => { const fetchData = async () => {
if (route.params.id) { if (route.params.id) {
showLoader(); // showLoader();
await http await http
.get(config.API.profileAdrsId(route.params.id.toString())) .get(config.API.profileAdrsId(route.params.id.toString()))
.then((res) => { .then((res) => {
@ -671,7 +674,8 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
profileStore.isLoad++;
}); });
} }
}; };
@ -835,7 +839,7 @@ const fetchProvince = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); profileStore.isLoad++;
}); });
}; };
@ -888,9 +892,9 @@ const fetchDistrict = async (id: string | null, position: string) => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); profileStore.isLoad++;
}); });
} } else profileStore.isLoad++;
}; };
const fetchSubDistrict = async (id: string | null, position: string) => { const fetchSubDistrict = async (id: string | null, position: string) => {
@ -942,9 +946,9 @@ const fetchSubDistrict = async (id: string | null, position: string) => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); profileStore.isLoad++;
}); });
} } else profileStore.isLoad++;
}; };
const changeBtn = async () => { const changeBtn = async () => {

View file

@ -69,9 +69,7 @@
/> />
<q-separator /> <q-separator />
<q-card-section class="q-p-sm"> <q-card-section class="q-p-sm">
<div <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"
>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-input <q-input
:class="getClass(edit)" :class="getClass(edit)"
@ -512,7 +510,8 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
store.isLoad++;
}); });
} }
}; };

View file

@ -1284,17 +1284,17 @@
</div> </div>
<div class="col"> <div class="col">
<q-input <q-input
:class="getClass(false)" :class="getClass(false)"
hide-bottom-space hide-bottom-space
:outlined="false" :outlined="false"
dense dense
lazy-rules lazy-rules
:readonly="true" :readonly="true"
:borderless="true" :borderless="true"
v-model="items.childrenFirstName" v-model="items.childrenFirstName"
:rules="[(val:string) => !!val || `${'กรุณากรอก ชื่อ'}`]" :rules="[(val:string) => !!val || `${'กรุณากรอก ชื่อ'}`]"
:label="`${'ชื่อ'}`" :label="`${'ชื่อ'}`"
/> />
</div> </div>
<div class="col"> <div class="col">
<q-input <q-input
@ -1436,6 +1436,7 @@
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import type { QForm } from "quasar"; import type { QForm } from "quasar";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useProfileDataStore } from "@/modules/04_registry/store";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import type { import type {
@ -1453,6 +1454,8 @@ import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
const profileStore = useProfileDataStore();
const props = defineProps({ const props = defineProps({
statusEdit: { statusEdit: {
type: Boolean, type: Boolean,
@ -1595,7 +1598,8 @@ const fetchPrefix = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
profileStore.isLoad++;
}); });
}; };
@ -1747,7 +1751,8 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(async () => { .finally(async () => {
hideLoader(); // hideLoader();
profileStore.isLoad++
}); });
} }
}; };

View file

@ -619,7 +619,7 @@ watch(retireText, async () => {
}); });
const fetchData = async () => { const fetchData = async () => {
showLoader(); // showLoader();
await http await http
.get(config.API.profileGovId(route.params.id.toString())) .get(config.API.profileGovId(route.params.id.toString()))
.then((res) => { .then((res) => {
@ -645,7 +645,8 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(async () => { .finally(async () => {
hideLoader(); // hideLoader();
profileStore.isLoad++;
}); });
}; };

View file

@ -1,41 +1,106 @@
<template> <template>
<q-card flat bordered class="col-12 q-px-lg q-py-md"> <q-card flat bordered class="col-12 q-px-lg q-py-md">
<HeaderTop v-model:edit="edit" header="ข้อมูลส่วนตัว" icon="mdi-account" :save="saveData" :history="!statusAdd()" <HeaderTop
:changeBtn="changeBtn" :disable="statusEdit" :cancel="onCancel" :historyClick="clickHistory" v-model:edit="edit"
:addEmployee="statusAdd()" /> header="ข้อมูลส่วนตัว"
icon="mdi-account"
:save="saveData"
:history="!statusAdd()"
:changeBtn="changeBtn"
:disable="statusEdit"
:cancel="onCancel"
:historyClick="clickHistory"
:addEmployee="statusAdd()"
/>
<q-form ref="myform" class="col-12"> <q-form ref="myform" class="col-12">
<div class="row col-12 q-col-gutter-x-sm q-col-gutter-y-sm"> <div class="row col-12 q-col-gutter-x-sm q-col-gutter-y-sm">
<div class="col-xs-6 col-sm-3 col-md-3"> <div class="col-xs-6 col-sm-3 col-md-3">
<q-input :class="getClass(edit)" hide-bottom-space :outlined="edit" dense lazy-rules :readonly="!edit" <q-input
:borderless="!edit" v-model="informaData.cardid" @update:model-value="changeCardID" :rules="[ :class="getClass(edit)"
hide-bottom-space
:outlined="edit"
dense
lazy-rules
:readonly="!edit"
:borderless="!edit"
v-model="informaData.cardid"
@update:model-value="changeCardID"
:rules="[
(val: string) => !!val || `${'กรุณากรอก เลขประจำตัวประชาชน'}`, (val: string) => !!val || `${'กรุณากรอก เลขประจำตัวประชาชน'}`,
(val: string) => (val: string) =>
val.length >= 13 || val.length >= 13 ||
`${'กรุณากรอกเลขประจำตัวประชาชนให้ครบ'}`, `${'กรุณากรอกเลขประจำตัวประชาชนให้ครบ'}`,
]" label="เลขประจำตวประชาชน" maxlength="13" mask="#############" /> ]"
label="เลขประจำตัวประชาชน"
maxlength="13"
mask="#############"
/>
</div> </div>
<div class="col-xs-6 col-sm-3 col-md-3"> <div class="col-xs-6 col-sm-3 col-md-3">
<selector :hide-dropdown-icon="!edit" hide-bottom-space :class="getClass(edit)" :readonly="!edit" <selector
:borderless="!edit" :rules="[(val: string) => !!val || `${'กรุณาเลือก คำนำหน้าชื่อ'}`]" :outlined="edit" dense :hide-dropdown-icon="!edit"
lazy-rules v-model="informaData.prefixId" emit-value map-options option-label="name" :options="Ops.prefixOps" hide-bottom-space
option-value="id" :label="`${'คำนำหน้าชื่อ'}`" use-input input-debounce="0" @filter="(inputValue: any, :class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
:rules="[(val: string) => !!val || `${'กรุณาเลือก คำนำหน้าชื่อ'}`]"
:outlined="edit"
dense
lazy-rules
v-model="informaData.prefixId"
emit-value
map-options
option-label="name"
:options="Ops.prefixOps"
option-value="id"
:label="`${'คำนำหน้าชื่อ'}`"
use-input
input-debounce="0"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'prefixOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'prefixOps'
)" /> )"
/>
</div> </div>
<div class="col-xs-6 col-sm-3 col-md-3"> <div class="col-xs-6 col-sm-3 col-md-3">
<q-input :class="getClass(edit)" hide-bottom-space :outlined="edit" dense lazy-rules :readonly="!edit" <q-input
:borderless="!edit" v-model="informaData.firstname" :rules="[(val: string) => !!val || `${'กรุณากรอก ชื่อ'}`]" :class="getClass(edit)"
:label="`${'ชื่อ'}`" /> hide-bottom-space
:outlined="edit"
dense
lazy-rules
:readonly="!edit"
:borderless="!edit"
v-model="informaData.firstname"
:rules="[(val: string) => !!val || `${'กรุณากรอก ชื่อ'}`]"
:label="`${'ชื่อ'}`"
/>
</div> </div>
<div class="col-xs-6 col-sm-3 col-md-3"> <div class="col-xs-6 col-sm-3 col-md-3">
<q-input :class="getClass(edit)" hide-bottom-space :outlined="edit" dense lazy-rules :readonly="!edit" <q-input
:borderless="!edit" v-model="informaData.lastname" :class="getClass(edit)"
:rules="[(val: string) => !!val || `${'กรุณากรอก นามสกุล'}`]" :label="`${'นามสกุล'}`" /> hide-bottom-space
:outlined="edit"
dense
lazy-rules
:readonly="!edit"
:borderless="!edit"
v-model="informaData.lastname"
:rules="[(val: string) => !!val || `${'กรุณากรอก นามสกุล'}`]"
:label="`${'นามสกุล'}`"
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<datepicker v-model="informaData.birthDate" :locale="'th'" autoApply :enableTimePicker="false" week-start="0" <datepicker
:max-date="new Date()" :disabled="!edit" @update:model-value="handleDate"> v-model="informaData.birthDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
:max-date="new Date()"
:disabled="!edit"
@update:model-value="handleDate"
>
<template #year="{ year }"> <template #year="{ year }">
{{ year + 543 }} {{ year + 543 }}
</template> </template>
@ -43,15 +108,30 @@
{{ parseInt(value + 543) }} {{ parseInt(value + 543) }}
</template> </template>
<template #trigger> <template #trigger>
<q-input :class="getClass(edit)" hide-bottom-space :outlined="edit" dense lazy-rules :readonly="!edit" <q-input
:borderless="!edit" :model-value="informaData.birthDate !== null :class="getClass(edit)"
hide-bottom-space
:outlined="edit"
dense
lazy-rules
:readonly="!edit"
:borderless="!edit"
:model-value="
informaData.birthDate !== null
? date2Thai(informaData.birthDate) ? date2Thai(informaData.birthDate)
: null : null
" :rules="[(val: string) => !!val || `${'กรุณาเลือก วัน/เดือน/ปี เกิด'}`]" "
:label="`${'วัน/เดือน/ปี เกิด'}`"> :rules="[(val: string) => !!val || `${'กรุณาเลือก วัน/เดือน/ปี เกิด'}`]"
:label="`${'วัน/เดือน/ปี เกิด'}`"
>
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="event" class="cursor-pointer" :style="edit ? 'color: var(--q-primary)' : 'color: var(--q-grey)' <q-icon
"> name="event"
class="cursor-pointer"
:style="
edit ? 'color: var(--q-primary)' : 'color: var(--q-grey)'
"
>
</q-icon> </q-icon>
</template> </template>
</q-input> </q-input>
@ -59,99 +139,273 @@
</datepicker> </datepicker>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<q-input :class="getClass(false)" hide-bottom-space dense lazy-rules readonly borderless <q-input
:style="!edit ? '' : 'padding:0 12px;'" :model-value="informaData.age" :label="`${'อายุ'}`" /> :class="getClass(false)"
hide-bottom-space
dense
lazy-rules
readonly
borderless
:style="!edit ? '' : 'padding:0 12px;'"
:model-value="informaData.age"
:label="`${'อายุ'}`"
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<selector :hide-dropdown-icon="!edit" hide-bottom-space :class="getClass(edit)" :readonly="!edit" <selector
:borderless="!edit" :outlined="edit" dense lazy-rules v-model="informaData.genderId" emit-value map-options :hide-dropdown-icon="!edit"
option-label="name" :options="Ops.genderOps" option-value="id" :label="`${'เพศ'}`" use-input hide-bottom-space
input-debounce="0" @filter="(inputValue: any, :class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
:outlined="edit"
dense
lazy-rules
v-model="informaData.genderId"
emit-value
map-options
option-label="name"
:options="Ops.genderOps"
option-value="id"
:label="`${'เพศ'}`"
use-input
input-debounce="0"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'genderOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'genderOps'
)" /> )"
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<selector :hide-dropdown-icon="!edit" hide-bottom-space :class="getClass(edit)" :readonly="!edit" <selector
:borderless="!edit" :outlined="edit" dense lazy-rules v-model="informaData.statusId" emit-value map-options :hide-dropdown-icon="!edit"
option-label="name" :options="Ops.statusOps" option-value="id" :label="`${'สถานภาพ'}`" use-input hide-bottom-space
input-debounce="0" @filter="(inputValue: any, :class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
:outlined="edit"
dense
lazy-rules
v-model="informaData.statusId"
emit-value
map-options
option-label="name"
:options="Ops.statusOps"
option-value="id"
:label="`${'สถานภาพ'}`"
use-input
input-debounce="0"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'statusOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'statusOps'
)" /> )"
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<q-input :class="getClass(edit)" hide-bottom-space :outlined="edit" dense lazy-rules :readonly="!edit" <q-input
:borderless="!edit" v-model="informaData.nationality" :label="`${'สัญชาติ'}`" /> :class="getClass(edit)"
hide-bottom-space
:outlined="edit"
dense
lazy-rules
:readonly="!edit"
:borderless="!edit"
v-model="informaData.nationality"
:label="`${'สัญชาติ'}`"
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<q-input :class="getClass(edit)" hide-bottom-space :outlined="edit" dense lazy-rules :readonly="!edit" <q-input
:borderless="!edit" v-model="informaData.ethnicity" :label="`${'เชื้อชาติ'}`" /> :class="getClass(edit)"
hide-bottom-space
:outlined="edit"
dense
lazy-rules
:readonly="!edit"
:borderless="!edit"
v-model="informaData.ethnicity"
:label="`${'เชื้อชาติ'}`"
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<selector :hide-dropdown-icon="!edit" hide-bottom-space :class="getClass(edit)" :readonly="!edit" <selector
:borderless="!edit" :outlined="edit" dense lazy-rules v-model="informaData.religionId" emit-value map-options :hide-dropdown-icon="!edit"
option-label="name" :options="Ops.religionOps" option-value="id" :label="`${'ศาสนา'}`" use-input hide-bottom-space
input-debounce="0" @filter="(inputValue: any, :class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
:outlined="edit"
dense
lazy-rules
v-model="informaData.religionId"
emit-value
map-options
option-label="name"
:options="Ops.religionOps"
option-value="id"
:label="`${'ศาสนา'}`"
use-input
input-debounce="0"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'religionOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'religionOps'
)" /> )"
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<selector :hide-dropdown-icon="!edit" hide-bottom-space :class="getClass(edit)" :readonly="!edit" <selector
:borderless="!edit" :outlined="edit" dense lazy-rules v-model="informaData.bloodId" emit-value map-options :hide-dropdown-icon="!edit"
option-label="name" :options="Ops.bloodOps" option-value="id" :label="`${'หมู่เลือด'}`" use-input hide-bottom-space
input-debounce="0" @filter="(inputValue: any, :class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
:outlined="edit"
dense
lazy-rules
v-model="informaData.bloodId"
emit-value
map-options
option-label="name"
:options="Ops.bloodOps"
option-value="id"
:label="`${'หมู่เลือด'}`"
use-input
input-debounce="0"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'bloodOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'bloodOps'
)" clearable /> )"
clearable
/>
</div> </div>
<div class="col-xs-6 col-sm-2 col-md-2"> <div class="col-xs-6 col-sm-2 col-md-2">
<q-input hide-bottom-space :outlined="edit" dense lazy-rules type="tel" :class="getClass(edit)" <q-input
:readonly="!edit" :borderless="!edit" v-model="informaData.tel" :label="`${'เบอร์โทร'}`" :rules="[ hide-bottom-space
:outlined="edit"
dense
lazy-rules
type="tel"
:class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
v-model="informaData.tel"
:label="`${'เบอร์โทร'}`"
:rules="[
(val: string) => !!val || `${'กรุณากรอก เบอร์โทร'}`, (val: string) => !!val || `${'กรุณากรอก เบอร์โทร'}`,
(val: string) => (val: string) =>
val.length >= 10 || val.length >= 10 ||
`${'กรุณากรอกเบอร์โทรให้ครบ'}`, `${'กรุณากรอกเบอร์โทรให้ครบ'}`,
]" mask="##########" /> ]"
mask="##########"
/>
</div> </div>
<div class="col-xs-6 col-sm-3 col-md-3" v-if="informaData.profileType == 'employee'"> <div
<selector :hide-dropdown-icon="!edit" hide-bottom-space :class="getClass(edit)" :readonly="!edit" class="col-xs-6 col-sm-3 col-md-3"
:borderless="!edit" :rules="[(val: string) => !!val || `${'กรุณาเลือก ประเภทการจ้าง'}`]" :outlined="edit" dense v-if="informaData.profileType == 'employee'"
lazy-rules v-model="informaData.employeeType" emit-value map-options option-label="name" >
:options="Ops.employeeTypeOps" option-value="id" :label="`${'ประเภทการจ้าง'}`" use-input input-debounce="0" <selector
:hide-dropdown-icon="!edit"
hide-bottom-space
:class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
:rules="[(val: string) => !!val || `${'กรุณาเลือก ประเภทการจ้าง'}`]"
:outlined="edit"
dense
lazy-rules
v-model="informaData.employeeType"
emit-value
map-options
option-label="name"
:options="Ops.employeeTypeOps"
option-value="id"
:label="`${'ประเภทการจ้าง'}`"
use-input
input-debounce="0"
@filter="(inputValue: any, @filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'employeeTypeOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'employeeTypeOps'
)" /> )"
/>
</div> </div>
<div class="col-xs-6 col-sm-3 col-md-3" v-if="informaData.profileType == 'employee'"> <div
<selector :hide-dropdown-icon="!edit" hide-bottom-space :class="getClass(edit)" :readonly="!edit" class="col-xs-6 col-sm-3 col-md-3"
:borderless="!edit" :rules="[(val: string) => !!val || `${'กรุณาเลือก ประเภทลูกจ้าง'}`]" :outlined="edit" dense v-if="informaData.profileType == 'employee'"
lazy-rules v-model="informaData.employeeClass" emit-value map-options option-label="name" >
:options="Ops.employeeClassOps" option-value="id" :label="`${'ประเภทลูกจ้าง'}`" use-input input-debounce="0" <selector
:hide-dropdown-icon="!edit"
hide-bottom-space
:class="getClass(edit)"
:readonly="!edit"
:borderless="!edit"
:rules="[(val: string) => !!val || `${'กรุณาเลือก ประเภทลูกจ้าง'}`]"
:outlined="edit"
dense
lazy-rules
v-model="informaData.employeeClass"
emit-value
map-options
option-label="name"
:options="Ops.employeeClassOps"
option-value="id"
:label="`${'ประเภทลูกจ้าง'}`"
use-input
input-debounce="0"
@filter="(inputValue: any, @filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'employeeClassOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'employeeClassOps'
)" /> )"
/>
</div> </div>
<div class="col-12 q-pt-md q-pb-sm"><q-separator /></div> <div class="col-12 q-pt-md q-pb-sm"><q-separator /></div>
<div class="col-xs-12 q-col-gutter-x-sm items-center flex q-my-sm"> <div class="col-xs-12 q-col-gutter-x-sm items-center flex q-my-sm">
<label class="text-weight-bold"> เปลยนช-นามสก</label> <label class="text-weight-bold"> เปลยนช-นามสก</label>
<q-radio v-model="same" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="1" label="มี" dense <q-radio
:disable="!edit" /> v-model="same"
<q-radio v-model="same" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="0" label="ไม่มี" checked-icon="task_alt"
color="grey-9" dense :disable="!edit" /> unchecked-icon="panorama_fish_eye"
val="1"
label="มี"
dense
:disable="!edit"
/>
<q-radio
v-model="same"
checked-icon="task_alt"
unchecked-icon="panorama_fish_eye"
val="0"
label="ไม่มี"
color="grey-9"
dense
:disable="!edit"
/>
</div> </div>
<div class="row col-12"> <div class="row col-12">
<OldName v-if="same == '1'" v-model:statusEdit="edit" :fetchDataInformation="fetchDataComponent" <OldName
:perfixId="informaData.prefixId == null ? '' : informaData.prefixId" :firstname="informaData.firstname == null ? '' : informaData.firstname v-if="same == '1'"
" :lastname="informaData.lastname == null ? '' : informaData.lastname" /> v-model:statusEdit="edit"
:fetchDataInformation="fetchDataComponent"
:perfixId="informaData.prefixId == null ? '' : informaData.prefixId"
:firstname="
informaData.firstname == null ? '' : informaData.firstname
"
:lastname="informaData.lastname == null ? '' : informaData.lastname"
/>
</div> </div>
</div> </div>
</q-form> </q-form>
</q-card> </q-card>
<HistoryTable :rows="rowsHistory" :columns="columnsHistory" :filter="filterHistory" <HistoryTable
:visible-columns="visibleColumnsHistory" v-model:modal="modalHistory" v-model:inputfilter="filterHistory" :rows="rowsHistory"
v-model:inputvisible="visibleColumnsHistory" v-model:tittle="tittleHistory"> :columns="columnsHistory"
:filter="filterHistory"
:visible-columns="visibleColumnsHistory"
v-model:modal="modalHistory"
v-model:inputfilter="filterHistory"
v-model:inputvisible="visibleColumnsHistory"
v-model:tittle="tittleHistory"
>
<template #columns="props"> <template #columns="props">
<q-tr :props="props"> <q-tr :props="props">
<q-td v-for="col in props.cols" :key="col.name" :props="props"> <q-td v-for="col in props.cols" :key="col.name" :props="props">
<div v-if="col.name == 'birthDate' || col.name == 'createdAt'" class="table_ellipsis"> <div
v-if="col.name == 'birthDate' || col.name == 'createdAt'"
class="table_ellipsis"
>
{{ date2Thai(col.value) }} {{ date2Thai(col.value) }}
</div> </div>
<div v-else class="table_ellipsis"> <div v-else class="table_ellipsis">
@ -502,7 +756,7 @@ const onCancel = async () => {
* get รายการ อมลเกยวกบบคคล * get รายการ อมลเกยวกบบคคล
*/ */
const fetchPerson = async () => { const fetchPerson = async () => {
showLoader(); // showLoader();
await http await http
.get(config.API.person) .get(config.API.person)
.then((res) => { .then((res) => {
@ -557,9 +811,10 @@ const fetchPerson = async () => {
Ops.value.religionOps = optionreligions; Ops.value.religionOps = optionreligions;
OpsFilter.value.religionOps = optionreligions; OpsFilter.value.religionOps = optionreligions;
}) })
.catch((e: any) => { }) .catch((e: any) => {})
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
profileStore.isLoad++;
}); });
}; };
@ -643,14 +898,14 @@ const clickHistory = async () => {
e.employeeType == "gov" e.employeeType == "gov"
? "งบประมาณเงินอุดหนุนรัฐบาล" ? "งบประมาณเงินอุดหนุนรัฐบาล"
: e.employeeType == "bkk" : e.employeeType == "bkk"
? "งบประมาณกรุงเทพมหานคร" ? "งบประมาณกรุงเทพมหานคร"
: "-", : "-",
employeeClass: employeeClass:
e.employeeClass == "perm" e.employeeClass == "perm"
? "ลูกจ้างประจำ" ? "ลูกจ้างประจำ"
: e.employeeClass == "temp" : e.employeeClass == "temp"
? "ลูกจ้างชั่วคราว" ? "ลูกจ้างชั่วคราว"
: "-", : "-",
createdFullName: e.createdFullName, createdFullName: e.createdFullName,
createdAt: new Date(e.createdAt), createdAt: new Date(e.createdAt),
}); });
@ -759,7 +1014,6 @@ const calRetire = async (birth: Date) => {
const fetchData = async () => { const fetchData = async () => {
if (route.params.id) { if (route.params.id) {
showLoader();
await http await http
.get(config.API.profileInforId(route.params.id.toString())) .get(config.API.profileInforId(route.params.id.toString()))
.then(async (res: any) => { .then(async (res: any) => {
@ -829,7 +1083,10 @@ const editData = async () => {
nationality: informaData.value.nationality, nationality: informaData.value.nationality,
race: informaData.value.ethnicity, race: informaData.value.ethnicity,
religionId: informaData.value.religionId, religionId: informaData.value.religionId,
birthDate: informaData.value.birthDate != null ? dateToISO(informaData.value.birthDate) : dateToISO(new Date()), birthDate:
informaData.value.birthDate != null
? dateToISO(informaData.value.birthDate)
: dateToISO(new Date()),
bloodGroupId: informaData.value.bloodId, bloodGroupId: informaData.value.bloodId,
relationshipId: informaData.value.statusId, relationshipId: informaData.value.statusId,
telephoneNumber: informaData.value.tel, telephoneNumber: informaData.value.tel,

View file

@ -66,9 +66,7 @@
<DialogHeader tittle="เครื่องราชอิสริยาภรณ์" :close="clickClose" /> <DialogHeader tittle="เครื่องราชอิสริยาภรณ์" :close="clickClose" />
<q-separator /> <q-separator />
<q-card-section class="q-p-sm"> <q-card-section class="q-p-sm">
<div <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"
>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
@ -938,7 +936,7 @@ const fetchInsignia = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++;
}); });
}; };
@ -977,7 +975,8 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
store.isLoad++;
}); });
} }
}; };

View file

@ -748,7 +748,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -40,9 +40,8 @@
icon="mdi-history" icon="mdi-history"
@click="clickHistory(props.row)" @click="clickHistory(props.row)"
> >
<q-tooltip>ประวแกไขอนๆ <q-tooltip>ประวแกไขอนๆ </q-tooltip>
</q-tooltip> </q-btn>
</q-btn>
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
@ -56,9 +55,7 @@
<DialogHeader tittle="อื่นๆ" :close="clickClose" /> <DialogHeader tittle="อื่นๆ" :close="clickClose" />
<q-separator /> <q-separator />
<q-card-section class="q-p-sm"> <q-card-section class="q-p-sm">
<div <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"
>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
@ -327,7 +324,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++;
}); });
} }
}; };

View file

@ -153,7 +153,7 @@
</div> </div>
</div> </div>
<q-space /> <q-space />
<q-btn <q-btn
v-if=" v-if="
profileType == 'officer' || profileType == 'officer' ||
@ -211,11 +211,7 @@
<q-item-section>ปรบระดบชนงาน - าย</q-item-section> <q-item-section>ปรบระดบชนงาน - าย</q-item-section>
</q-item> </q-item>
<q-separator /> <q-separator />
<q-item <q-item clickable v-close-popup @click="clickPassaway">
clickable
v-close-popup
@click="clickPassaway"
>
<q-item-section style="min-width: 0px" avatar class="q-py-sm"> <q-item-section style="min-width: 0px" avatar class="q-py-sm">
</q-item-section> </q-item-section>
<q-item-section>งแกกรรม</q-item-section> <q-item-section>งแกกรรม</q-item-section>
@ -290,8 +286,14 @@
<q-menu> <q-menu>
<q-list style="min-width: 100px"> <q-list style="min-width: 100px">
<q-item clickable v-close-popup @click="clickKp7()"> <q-item clickable v-close-popup @click="clickKp7()">
<q-item-section v-if="profileType == 'officer'" class="text-blue">ก.พ.7/ก.ก.1</q-item-section> <q-item-section
<q-item-section v-else class="text-blue">ทะเบยนประว</q-item-section> v-if="profileType == 'officer'"
class="text-blue"
>..7/..1</q-item-section
>
<q-item-section v-else class="text-blue"
>ทะเบยนประว</q-item-section
>
</q-item> </q-item>
<q-item clickable v-close-popup @click="clickKp7Short()"> <q-item clickable v-close-popup @click="clickKp7Short()">
<q-item-section class="text-primary" <q-item-section class="text-primary"
@ -747,7 +749,7 @@
<full-loader :visibility="loader"></full-loader> <full-loader :visibility="loader"></full-loader>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from "vue"; import { ref, onMounted, onUnmounted, watch } from "vue";
import { useDataStore } from "@/stores/data"; import { useDataStore } from "@/stores/data";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
@ -778,9 +780,11 @@ import OldName from "@/modules/04_registry/components/Information/OldName.vue";
import type { DataOption } from "@/modules/04_registry/interface/index/Main"; import type { DataOption } from "@/modules/04_registry/interface/index/Main";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useProfileDataStore } from "@/modules/04_registry/store";
const $q = useQuasar(); const $q = useQuasar();
const store = useDataStore(); const store = useDataStore();
const profileStore = useProfileDataStore();
const { changeTab } = store; const { changeTab } = store;
const reasonDeath = ref(""); const reasonDeath = ref("");
const deathCertificateNo = ref(""); const deathCertificateNo = ref("");
@ -899,7 +903,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); profileStore.isLoad++;
}); });
}; };
@ -1091,7 +1095,7 @@ const helpPost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/help-government') router.push("/help-government");
}); });
}); });
}; };
@ -1111,7 +1115,7 @@ const repatriationPost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/repatriate') router.push("/repatriate");
}); });
}); });
}; };
@ -1131,7 +1135,7 @@ const appointPost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/appoint-promote') router.push("/appoint-promote");
}); });
}); });
}; };
@ -1152,7 +1156,7 @@ const appointEmployeePost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/appoint-employee') router.push("/appoint-employee");
}); });
}); });
}; };
@ -1180,7 +1184,7 @@ const outPost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/dismiss-order') router.push("/dismiss-order");
}); });
}); });
}; };
@ -1200,7 +1204,7 @@ const dischargePost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/discharged') router.push("/discharged");
}); });
}); });
}; };
@ -1220,7 +1224,7 @@ const expulsionPost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/expulsion') router.push("/expulsion");
}); });
}); });
}; };
@ -1240,7 +1244,7 @@ const otherPost = async () => {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
router.push('/other') router.push("/other");
}); });
}); });
}; };
@ -1495,6 +1499,14 @@ const clickSaveDeceased = async () => {
.onCancel(() => {}) .onCancel(() => {})
.onDismiss(() => {}); .onDismiss(() => {});
}; };
watch(
() => profileStore.isLoad,
() => {
profileStore.isLoad >= 33 && hideLoader();
}
);
onUnmounted(() => (profileStore.isLoad = 0));
</script> </script>
<style> <style>
.image-size-default { .image-size-default {

View file

@ -507,7 +507,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -383,7 +383,7 @@
hide-bottom-space hide-bottom-space
/> --> /> -->
<CurrencyInput <CurrencyInput
lazy-rules lazy-rules
v-model="amount" v-model="amount"
:edit="edit" :edit="edit"
:options="{ :options="{
@ -396,7 +396,7 @@
</div> </div>
<div class="col-xs-4 col-sm-4 col-md-4"> <div class="col-xs-4 col-sm-4 col-md-4">
<CurrencyInput <CurrencyInput
lazy-rules lazy-rules
v-model="positionSalaryAmount" v-model="positionSalaryAmount"
:edit="edit" :edit="edit"
:options="{ :options="{
@ -434,7 +434,7 @@
hide-bottom-space hide-bottom-space
/> --> /> -->
<CurrencyInput <CurrencyInput
lazy-rules lazy-rules
v-model="mouthSalaryAmount" v-model="mouthSalaryAmount"
:edit="edit" :edit="edit"
:options="{ :options="{
@ -1483,7 +1483,7 @@ const nodeTree = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++;
}); });
}; };
@ -1568,7 +1568,8 @@ const fetchPosition = async () => {
}) })
.catch((e: any) => {}) .catch((e: any) => {})
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
store.isLoad++;
}); });
}; };
@ -1578,7 +1579,7 @@ const fetchData = async () => {
await http await http
.get(config.API.profileSalaryId(profileId.value)) .get(config.API.profileSalaryId(profileId.value))
.then((res) => { .then((res) => {
let data = res.data.result; let data = res.data.result;
rows.value = []; rows.value = [];
data.map((e: ResponseObject) => { data.map((e: ResponseObject) => {
rows.value.push({ rows.value.push({
@ -1624,7 +1625,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++;
}); });
} }
}; };

View file

@ -1300,14 +1300,14 @@ onMounted(async () => {
}); });
const fetchDataSelector = async () => { const fetchDataSelector = async () => {
showLoader(); // showLoader();
await fetchEmployeePosition(); await fetchEmployeePosition();
await fetchEmployeePositionSide(); await fetchEmployeePositionSide();
await fetchEmployeeLevel(); await fetchEmployeeLevel();
await fetchEmployeeGroup(); await fetchEmployeeGroup();
await fetchAgency(); await fetchAgency();
await nodeTree(); await nodeTree();
hideLoader(); // hideLoader();
}; };
// //
const fetchEmployeePosition = async () => { const fetchEmployeePosition = async () => {
@ -1416,7 +1416,7 @@ const nodeTree = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
}; };
@ -1548,7 +1548,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -1329,14 +1329,14 @@ onMounted(async () => {
}); });
const fetchDataSelector = async () => { const fetchDataSelector = async () => {
showLoader(); // showLoader();
await fetchEmployeePosition(); await fetchEmployeePosition();
await fetchEmployeePositionSide(); await fetchEmployeePositionSide();
await fetchEmployeeLevel(); await fetchEmployeeLevel();
await fetchEmployeeGroup(); await fetchEmployeeGroup();
await fetchAgency(); await fetchAgency();
await nodeTree(); await nodeTree();
hideLoader(); // hideLoader();
}; };
// //
const fetchEmployeePosition = async () => { const fetchEmployeePosition = async () => {
@ -1445,7 +1445,7 @@ const nodeTree = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
}; };
@ -1575,7 +1575,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -380,7 +380,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -50,8 +50,8 @@
icon="mdi-history" icon="mdi-history"
@click="clickHistory(props.row)" @click="clickHistory(props.row)"
> >
<q-tooltip>ประวแกไขการฝกอบรม/งาน</q-tooltip> <q-tooltip>ประวแกไขการฝกอบรม/งาน</q-tooltip>
</q-btn> </q-btn>
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
@ -65,9 +65,7 @@
<DialogHeader tittle="การฝึกอบรม/ดูงาน" :close="clickClose" /> <DialogHeader tittle="การฝึกอบรม/ดูงาน" :close="clickClose" />
<q-separator /> <q-separator />
<q-card-section class="q-p-sm"> <q-card-section class="q-p-sm">
<div <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"
>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-input <q-input
:class="getClass(edit)" :class="getClass(edit)"
@ -784,7 +782,8 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); // hideLoader();
store.isLoad++;
}); });
} }
}; };

View file

@ -583,7 +583,7 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); store.isLoad++
}); });
} }
}; };

View file

@ -2,7 +2,7 @@ import { ref, computed } from "vue";
import { defineStore } from "pinia"; import { defineStore } from "pinia";
export const useProfileDataStore = defineStore("profile", () => { export const useProfileDataStore = defineStore("profile", () => {
const emplployeeClass = ref<string | null>('') const emplployeeClass = ref<string | null>("");
interface profile { interface profile {
main: { columns: String[] }; main: { columns: String[] };
education: { columns: String[] }; education: { columns: String[] };
@ -73,7 +73,10 @@ export const useProfileDataStore = defineStore("profile", () => {
profileData.value = JSON.parse(localStorage.getItem("profile") || "{}"); profileData.value = JSON.parse(localStorage.getItem("profile") || "{}");
} }
const isLoad = ref<number>(0);
return { return {
isLoad,
profileData, profileData,
changeProfileColumns, changeProfileColumns,
birthDate, birthDate,

View file

@ -1,6 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, watch } from "vue"; import { ref, onMounted, watch } from "vue";
import type { DataOption1 } from "@/modules/05_placement/interface/index/Main";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import type { QForm } from "quasar"; import type { QForm } from "quasar";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
@ -10,7 +9,7 @@ import config from "@/app.config";
import type { treeTab } from "@/modules/05_placement/interface/index/Main"; import type { treeTab } from "@/modules/05_placement/interface/index/Main";
import type { ResponseOrganiz } from "@/modules/05_placement/interface/response/Order"; import type { ResponseOrganiz } from "@/modules/05_placement/interface/response/Order";
import type { QTableProps } from "quasar"; import type { QTableProps } from "quasar";
import type { OrederResult } from "@/modules/10_order/interface/index/Main"; import type { DataOption1, OrederResult } from "@/modules/10_order/interface/index/Main";
import DialogHeader from "@/modules/04_registry/components/DialogHeader.vue"; import DialogHeader from "@/modules/04_registry/components/DialogHeader.vue";
import { useOrderPlacementDataStore } from "@/modules/10_order/store"; import { useOrderPlacementDataStore } from "@/modules/10_order/store";
@ -121,6 +120,13 @@ const faultLevel = ref<string>("");
const caseFault = ref<string>(""); const caseFault = ref<string>("");
const result = ref<string>(""); const result = ref<string>("");
const refRaw = ref<string>(""); const refRaw = ref<string>("");
const complaintId = ref<string>("");
const complaintOption = ref<DataOption1[]>([
{
id: "00000000-0000-0000-0000-000000000000",
name: "ทุจริตต่อหน้าที่",
},
]);
const typeOrderFilter = ref<any>({ const typeOrderFilter = ref<any>({
typeOrderOption: [], typeOrderOption: [],
@ -277,11 +283,12 @@ const fetchdetailOrder = async () => {
conclusionTranferNo.value = data.conclusionTranferNo; conclusionTranferNo.value = data.conclusionTranferNo;
conclusionTranferDate.value = data.conclusionTranferDate; conclusionTranferDate.value = data.conclusionTranferDate;
// 25-32 // 19, 20 25-32
faultLevel.value = data.faultLevel; faultLevel.value = data.faultLevel;
caseFault.value = data.caseFault; caseFault.value = data.caseFault;
result.value = data.result; result.value = data.result;
refRaw.value = data.refRaw; refRaw.value = data.refRaw;
complaintId.value = data.complaintId;
fecthExamRoundOption(data.orderTypeCode); fecthExamRoundOption(data.orderTypeCode);
}) })
@ -293,6 +300,7 @@ const fetchdetailOrder = async () => {
hideLoader(); hideLoader();
}); });
}; };
const fecthCommand = async () => { const fecthCommand = async () => {
await http await http
.get(config.API.organizationsOrder()) .get(config.API.organizationsOrder())
@ -303,6 +311,7 @@ const fecthCommand = async () => {
messageError($q, e); messageError($q, e);
}); });
}; };
const selectCMP = (selectOrder: OrederResult) => { const selectCMP = (selectOrder: OrederResult) => {
if (selectOrder != null) { if (selectOrder != null) {
fecthExamRoundOption(selectOrder.commandCode); fecthExamRoundOption(selectOrder.commandCode);
@ -361,12 +370,15 @@ const selectCMP = (selectOrder: OrederResult) => {
// 24 // 24
conclusionTranferNo.value = ""; conclusionTranferNo.value = "";
conclusionTranferDate.value = new Date(); conclusionTranferDate.value = new Date();
// 25-32 // 19, 20 & 25-32
faultLevel.value = ""; faultLevel.value = "";
caseFault.value = ""; caseFault.value = "";
result.value = ""; result.value = "";
refRaw.value = ""; refRaw.value = "";
complaintId.value = "";
}; };
// //
const fecthExamRoundOption = async (commandCode: string) => { const fecthExamRoundOption = async (commandCode: string) => {
await http await http
@ -378,6 +390,7 @@ const fecthExamRoundOption = async (commandCode: string) => {
messageError($q, e); messageError($q, e);
}); });
}; };
// //
const submit = async () => { const submit = async () => {
let signBy = null; let signBy = null;
@ -481,11 +494,7 @@ const submit = async () => {
govAidCommandNo: orderNumber.value, govAidCommandNo: orderNumber.value,
govAidCommandDate: orderNumberDate.value, govAidCommandDate: orderNumberDate.value,
}); });
} else if ( } else if (typeOrder.value.commandCode == "C-PM-18") {
typeOrder.value.commandCode == "C-PM-18" ||
typeOrder.value.commandCode == "C-PM-19" ||
typeOrder.value.commandCode == "C-PM-20"
) {
Object.assign(formdata, { Object.assign(formdata, {
fault: fault.value, fault: fault.value,
guiltyBasis: guiltyBasis.value, guiltyBasis: guiltyBasis.value,
@ -493,6 +502,22 @@ const submit = async () => {
conclusionFireDate: conclusionFireDate.value, conclusionFireDate: conclusionFireDate.value,
conclusionFireResolution: conclusionFireResolution.value, conclusionFireResolution: conclusionFireResolution.value,
}); });
} else if (
typeOrder.value.commandCode == "C-PM-19" ||
typeOrder.value.commandCode == "C-PM-20"
) {
Object.assign(formdata, {
complaintId: complaintId.value,
fault: "-",
guiltyBasis: "-",
conclusionFireNo: conclusionFireNo.value,
conclusionFireDate: conclusionFireDate.value,
conclusionFireResolution: conclusionFireResolution.value,
faultLevel: faultLevel.value,
caseFault: caseFault.value,
result: result.value,
refRaw: refRaw.value,
});
} else if (typeOrder.value.commandCode == "C-PM-24") { } else if (typeOrder.value.commandCode == "C-PM-24") {
Object.assign(formdata, { Object.assign(formdata, {
conclusionTranferNo: conclusionTranferNo.value, conclusionTranferNo: conclusionTranferNo.value,
@ -509,6 +534,7 @@ const submit = async () => {
typeOrder.value.commandCode == "C-PM-32" typeOrder.value.commandCode == "C-PM-32"
) { ) {
Object.assign(formdata, { Object.assign(formdata, {
complaintId: complaintId.value,
faultLevel: faultLevel.value, faultLevel: faultLevel.value,
caseFault: caseFault.value, caseFault: caseFault.value,
result: result.value, result: result.value,
@ -1781,12 +1807,7 @@ const getClass = (val: boolean) => {
<!-- C-PM-18-20 --> <!-- C-PM-18-20 -->
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if=" v-if="typeOrder != null && typeOrder.commandCode === 'C-PM-18'"
typeOrder != null &&
(typeOrder.commandCode === 'C-PM-18' ||
typeOrder.commandCode === 'C-PM-19' ||
typeOrder.commandCode === 'C-PM-20')
"
> >
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
@ -1892,6 +1913,163 @@ const getClass = (val: boolean) => {
</div> </div>
</div> </div>
<!-- C-PM-18-19 -->
<div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if="
typeOrder != null &&
(typeOrder.commandCode === 'C-PM-19' ||
typeOrder.commandCode === 'C-PM-20')
"
>
<div class="row col-12">
<div class="col-xs-12 col-md-6">
<selector
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="complaintId"
:rules="[(val: string) => !!val || `${'กรุณาเลือกเรื่องร้องเรียน'}`]"
emit-value
hide-bottom-space
:label="`${'เรื่องร้องเรียน'}`"
map-options
option-label="name"
:options="complaintOption"
option-value="id"
use-input
input-debounce="0"
/>
</div>
</div>
<div class="col-xs-12 col-md-4">
<q-input
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="conclusionFireNo"
:rules="[
(val) =>
!!val || `${'กรุณากรอกครั้งที่ (เรื่องการดำเนินการทางวินัย)'}`,
]"
:label="`${'ครั้งที่ (เรื่องการดำเนินการทางวินัย)'}`"
hide-bottom-space
/>
</div>
<div class="col-xs-12 col-md-4">
<datepicker
menu-class-name="modalfix"
v-model="conclusionFireDate"
:locale="'th'"
autoApply
borderless
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
outlined
dense
class="full-width datepicker"
:model-value="
conclusionFireDate != null
? date2Thai(conclusionFireDate)
: null
"
:label="`${'ลงวันที่ (เรื่องการดำเนินการทางวินัย) '}`"
:rules="[
(val) =>
!!val ||
`${'กรุณาเลือกลงวันที่ (เรื่องการดำเนินการทางวินัย)'}`,
]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-12 col-md-4">
<q-input
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="conclusionFireResolution"
:rules="[
(val) =>
!!val ||
`${'กรุณากรอก มติที่ประชุม(เรื่องการดำเนินการทางวินัย)'}`,
]"
:label="`${'มติที่ประชุม (เรื่องการดำเนินการทางวินัย)'}`"
hide-bottom-space
/>
</div>
<div class="col-xs-12 col-md-6">
<q-input
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="faultLevel"
:rules="[(val) => !!val || `${'กรุณากรอกระดับความผิด'}`]"
:label="`${'ระดับความผิด'}`"
hide-bottom-space
/>
</div>
<div class="col-xs-12 col-md-6">
<q-input
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="caseFault"
:rules="[(val) => !!val || `${'กรุณากรอกกรณีความผิด'}`]"
:label="`${'กรณีความผิด'}`"
hide-bottom-space
/>
</div>
<div class="col-xs-12 col-md-6">
<q-input
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="result"
:rules="[(val) => !!val || `${'กรุณากรอกผลดำเนินการพิจารณา'}`]"
:label="`${'ผลดำเนินการพิจารณา'}`"
hide-bottom-space
/>
</div>
<div class="col-xs-12 col-md-6">
<q-input
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="refRaw"
:rules="[(val) => !!val || `${'กรุณากรอกอ้างอิงมาตราตามกฎหมาย'}`]"
:label="`${'อ้างอิงมาตราตามกฎหมาย'}`"
hide-bottom-space
/>
</div>
</div>
<!-- C-PM-24 --> <!-- C-PM-24 -->
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
@ -1968,6 +2146,28 @@ const getClass = (val: boolean) => {
typeOrder.commandCode === 'C-PM-32') typeOrder.commandCode === 'C-PM-32')
" "
> >
<div class="row col-12">
<div class="col-xs-12 col-md-6">
<selector
:class="getClass(true)"
outlined
dense
lazy-rules
v-model="complaintId"
:rules="[(val: string) => !!val || `${'กรุณาเลือกเรื่องร้องเรียน'}`]"
emit-value
hide-bottom-space
:label="`${'เรื่องร้องเรียน'}`"
map-options
option-label="name"
:options="complaintOption"
option-value="id"
use-input
input-debounce="0"
/>
</div>
</div>
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
:class="getClass(true)" :class="getClass(true)"

View file

@ -40,6 +40,8 @@ const {
const route = useRoute(); const route = useRoute();
const $q = useQuasar(); const $q = useQuasar();
const routeName = ref<string>(route.name ? route.name.toString() : "");
const modalData = ref<any>({ const modalData = ref<any>({
salaryAmount: null, salaryAmount: null,
positionSalaryAmount: null, positionSalaryAmount: null,
@ -715,7 +717,9 @@ const pagination = ref({
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
:filter="filter" :filter="filter"
row-key="name" row-key="name"
selection="multiple" :selection="
routeName === 'disciplineOrderDatail' ? 'single' : 'multiple'
"
v-model:selected="selected" v-model:selected="selected"
> >
<template v-slot:header="props"> <template v-slot:header="props">

View file

@ -50,11 +50,9 @@ const dataGen = ref<any>();
const orderId = ref<string>(orderId_params.toString()); const orderId = ref<string>(orderId_params.toString());
onMounted(async () => { onMounted(async () => {
if (orderId.value) { if (orderId.value) {
showLoader();
await fetchAttachment(orderId.value); await fetchAttachment(orderId.value);
await fecthstatusOrder(); await fecthstatusOrder();
await getCommandDetail(); await getCommandDetail();
hideLoader();
} }
}); });
@ -99,6 +97,7 @@ const genReportStatus = computed(() => {
// //
const getCommandDetail = async () => { const getCommandDetail = async () => {
showLoader();
await http await http
.get(config.API.detailOrder(orderId.value)) .get(config.API.detailOrder(orderId.value))
.then(async (res) => { .then(async (res) => {

View file

@ -1,86 +1,91 @@
interface DataOption { interface DataOption {
id: string; id: string;
name: string; name: string;
} }
interface DataOptionYear { interface DataOptionYear {
id: number; id: number;
name: string; name: string;
} }
interface DataOptioGroup { interface DataOptioGroup {
id: string; id: string;
name: string; name: string;
disable: Boolean; disable: Boolean;
} }
interface DataNumberOption { interface OptionStatus {
id: number; val: string;
name: string; label: string;
} }
interface InvestigatefactsDataRowType { interface DataNumberOption {
id: string; id: number;
title: string; name: string;
respondentType: string; }
offenseDetails: string;
investigationDetail: string; interface InvestigatefactsDataRowType {
dateInvestigate: string; id: string;
investigationStatusResult: string; title: string;
status: string; respondentType: string;
} offenseDetails: string;
investigationDetail: string;
interface investigateDisDataRowType { dateInvestigate: string;
id: string; //id รายการ investigationStatusResult: string;
title: string; //เรื่องร้องเรียน status: string;
interrogated: string; //ผู้ถูกสอบสวน }
descMistake: string; //ลักษณะความผิด
mistakeLevel: string; //ระดับโทษความผิด interface investigateDisDataRowType {
mistakeCase: string; //กรณีความผิด id: string; //id รายการ
investigationDate: Date | null; //วันที่สอบสวน title: string; //เรื่องร้องเรียน
status: string | null; //สถานะ interrogated: string; //ผู้ถูกสอบสวน
isResultConfirmed: Boolean; //ยืนยันผลเเล้ว/ยังไม่ได้ยืนยันผล descMistake: string; //ลักษณะความผิด
} mistakeLevel: string; //ระดับโทษความผิด
mistakeCase: string; //กรณีความผิด
interface directorType { investigationDate: Date | null; //วันที่สอบสวน
id: string; status: string | null; //สถานะ
directorId?: string; isResultConfirmed: Boolean; //ยืนยันผลเเล้ว/ยังไม่ได้ยืนยันผล
prefix: string; }
firstName: string;
lastName: string; interface directorType {
position: string; id: string;
email: string; directorId?: string;
phone: string; prefix: string;
total?: number; firstName: string;
duty?: string; lastName: string;
} position: string;
interface responseType { email: string;
id: string; phone: string;
directorId?: string; total?: number;
prefix: string; duty?: string;
firstName: string; }
lastName: string; interface responseType {
position: string; id: string;
email: string; directorId?: string;
phone: string; prefix: string;
total?: number; firstName: string;
duty?: string; lastName: string;
position: string;
} email: string;
phone: string;
interface FileLists { total?: number;
id: string; //id เอกสาร duty?: string;
fileName: string; //ชื่่อเอกสาร }
pathName: string; //link file
} interface FileLists {
id: string; //id เอกสาร
export type { fileName: string; //ชื่่อเอกสาร
DataOption, pathName: string; //link file
InvestigatefactsDataRowType, }
investigateDisDataRowType,
directorType, export type {
DataNumberOption, DataOption,
responseType, InvestigatefactsDataRowType,
FileLists, investigateDisDataRowType,
DataOptioGroup, directorType,
DataOptionYear, DataNumberOption,
}; responseType,
FileLists,
DataOptioGroup,
DataOptionYear,
OptionStatus,
};

View file

@ -1,10 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, ref, watch } from "vue"; import { onMounted, ref, watch, computed } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import type { OptionStatus } from "@/modules/12_evaluatePersonal/interface/index/Main";
/** importStore*/ /** importStore*/
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useEvalutuonStore } from "@/modules/12_evaluatePersonal/store/Evaluate"; import { useEvalutuonStore } from "@/modules/12_evaluatePersonal/store/Evaluate";
@ -90,11 +92,15 @@ function resetFilter() {
/** function เรียกรายการคำขอประเมิน*/ /** function เรียกรายการคำขอประเมิน*/
async function fetchEvaluteList() { async function fetchEvaluteList() {
const body = {
page: currentPage.value,
pageSize: pageSize.value,
keyword: filter.value,
status: selectedStatus.value,
};
showLoader(); showLoader();
await http await http
.get( .put(config.API.evaluationMain(), body)
config.API.evaluationMain(currentPage.value, pageSize.value, filter.value)
)
.then(async (res) => { .then(async (res) => {
const data = res.data.result.data; const data = res.data.result.data;
total.value = res.data.result.total; total.value = res.data.result.total;
@ -103,7 +109,7 @@ async function fetchEvaluteList() {
store.fetchData(data); store.fetchData(data);
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); // messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
@ -118,6 +124,56 @@ function Detailpage(id: string) {
router.push(`/evaluate/detail/${id}`); router.push(`/evaluate/detail/${id}`);
} }
const selectedStatus = ref<string[]>([
"CHECK_SPEC",
"PREPARE_DOC_V1",
"CHECK_DOC_V1",
"WAIT_CHECK_DOC_V1",
"ANNOUNCE_WEB",
"PREPARE_DOC_V2",
"WAIT_CHECK_DOC_V2",
"CHECK_DOC_V2",
]);
const options = ref<OptionStatus[]>([]);
const optionsMain = ref<OptionStatus[]>([
{ val: "CHECK_SPEC", label: "ตรวจสอบคุณสมบัติด้วยตนเอง" },
{ val: "PREPARE_DOC_V1", label: "จัดเตรียมเอกสารเล่ม 1" },
{ val: "CHECK_DOC_V1", label: "ตรวจสอบความถูกต้องของเอกสารเล่ม 1" },
{ val: "WAIT_CHECK_DOC_V1", label: "รอตรวจสอบคุณสมบัติ" },
{ val: "ANNOUNCE_WEB", label: "ประกาศบนเว็บไซต์" },
{ val: "PREPARE_DOC_V2", label: "จัดเตรียมเอกสารเล่ม 2" },
{ val: "WAIT_CHECK_DOC_V2", label: "รอพิจารณาผลการประเมิน" },
{ val: "CHECK_DOC_V2", label: "ตรวจสอบความถูกต้องของเอกสารเล่ม" },
{ val: "DONE", label: "เสร็จสิ้น" },
]);
/** ชื่อค่าที่ค้นหาสภานะ*/
const label = computed(() => {
const filterOption = optionsMain.value.filter((option) =>
selectedStatus.value.includes(option.val)
);
const labelval = filterOption.map((e) => e.label);
if (labelval.length !== 0) {
return labelval.length <= 2
? `${labelval.slice(0, 2).join(", ")}`
: `${labelval.slice(0, 2).join(", ")}, อื่นๆ (${labelval.length - 2})`;
} else return "";
});
/**
* function นหาขอมลของ Option
* @param val าทองการฟลเตอร
* @param update พเดทค
* @param refData ดาตาทองการฟลเตอร
*/
function filterOption(val: any, update: Function) {
update(() => {
options.value = optionsMain.value.filter(
(v: any) => v.label.indexOf(val) > -1
);
});
}
/** HookLifecycle */ /** HookLifecycle */
onMounted(async () => { onMounted(async () => {
await fetchEvaluteList(); // await fetchEvaluteList(); //
@ -130,6 +186,33 @@ onMounted(async () => {
</div> </div>
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm q-pa-md"> <q-card flat bordered class="col-12 q-mt-sm q-pt-sm q-pa-md">
<div class="row col-12 q-col-gutter-sm q-mb-sm"> <div class="row col-12 q-col-gutter-sm q-mb-sm">
<q-select
dense
outlined
multiple
v-model="selectedStatus"
emit-value
map-options
:options="options"
option-value="val"
label="ค้นหาสถานะ"
style="width: 35vw"
@update:model-value="fetchEvaluteList"
use-input
@filter="(inputValue:any,doneFn:Function) => filterOption(inputValue, doneFn) "
>
<template v-slot:selected>
<div>
{{ label }}
</div>
</template>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey"> ไมอม </q-item-section>
</q-item>
</template>
</q-select>
<q-space /> <q-space />
<q-input <q-input
class="col-xs-12 col-sm-3 col-md-2" class="col-xs-12 col-sm-3 col-md-2"

View file

@ -5,8 +5,11 @@ const Dashboard = () => import("@/views/Dashboard.vue");
const Error404NotFound = () => import("@/views/Error404NotFound.vue"); const Error404NotFound = () => import("@/views/Error404NotFound.vue");
import ModuleMetadata from "@/modules/01_metadata/router"; import ModuleMetadata from "@/modules/01_metadata/router";
import ModuleMetadataNew from "@/modules/01_metadataNew/router";
import ModuleOrganizational from "@/modules/02_organizational/router"; import ModuleOrganizational from "@/modules/02_organizational/router";
import ModuleOrganizationalNew from "@/modules/02_organizationalNew/router";
import ModuleRecruiting from "@/modules/03_recruiting/router"; import ModuleRecruiting from "@/modules/03_recruiting/router";
import ModuleRecruitingNew from "@/modules/03_recruitingNew/router";
import ModuleRegistry from "@/modules/04_registry/router"; import ModuleRegistry from "@/modules/04_registry/router";
import ModulePlacement from "@/modules/05_placement/router"; import ModulePlacement from "@/modules/05_placement/router";
import ModuleRetirement from "@/modules/06_retirement/router"; import ModuleRetirement from "@/modules/06_retirement/router";
@ -39,8 +42,11 @@ const router = createRouter({
}, },
}, },
...ModuleMetadata, ...ModuleMetadata,
...ModuleMetadataNew,
...ModuleOrganizational, ...ModuleOrganizational,
...ModuleOrganizationalNew,
...ModuleRecruiting, ...ModuleRecruiting,
...ModuleRecruitingNew,
...ModuleRegistry, ...ModuleRegistry,
...ModulePlacement, ...ModulePlacement,
...ModuleRetirement, ...ModuleRetirement,