เลื่อนเงินเดือน

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-03-26 18:02:29 +07:00
parent 5dacf1c73a
commit ce38c8a410
7 changed files with 879 additions and 85 deletions

View file

@ -22,7 +22,7 @@ export default {
salaryReportByid: (id: string) => `${salary}/report/${id}`, salaryReportByid: (id: string) => `${salary}/report/${id}`,
salaryReportemployeeByid: (id: string) => `${salary}/report/employee/${id}`, salaryReportemployeeByid: (id: string) => `${salary}/report/employee/${id}`,
salaryPeriod: () => `${salary}/period`, salaryPeriod: () => `${salary}/period`,
salaryPeriodActive: () => `${salary}/period/active`, salaryPeriodActive: (year: string) => `${salary}/period/active/${year}`,
/** รายการเงินเดือน*/ /** รายการเงินเดือน*/
keycloakPositionByid: (id: string) => keycloakPositionByid: (id: string) =>

View file

@ -1,4 +1,357 @@
<template> <script setup lang="ts">
<q-card class="q-pa-sm"> แสดง dashboard สำหร สกจ. </q-card> import { ref, onMounted, reactive, computed } from "vue";
import type { QTableProps } from "quasar";
import { useSalaryEmployeeListSDataStore } from "@/modules/13_salary/store/SalaryEmployeeListsStore";
const store = useSalaryEmployeeListSDataStore();
/** itemsCard*/
const itemsCardAPR = ref([
{
lable: "จำนวนคนทั้งหมด",
name: "group1",
color: "secondary",
total: 0,
},
{
lable: "15% ของจำนวนคน",
name: "group2",
color: "light-blue-4",
total: 0,
},
{
lable: "เลือกไปแล้ว",
name: "group2",
color: "primary",
total: 0,
},
{
lable: "คงเหลือโควตา",
name: "group2",
color: "indigo-6",
total: 0,
},
{
lable: "สำรอง",
name: "group2",
color: "red-6",
total: 0,
},
]);
const itemsCardOCT = ref([
{
lable: "จำนวนเงินคนครองปัจจุบัน",
name: "group1",
color: "secondary",
total: 0,
},
{
lable: "วงเงิน 6%",
name: "group2",
color: "light-blue-4",
total: 0,
},
{
lable: "ยอดเงินที่ใช้ไป",
name: "group2",
color: "primary",
total: 0,
},
{
lable: "วงเงิน 6%-ยอดเงินที่ใช้ไป",
name: "group2",
color: "indigo-6",
total: 0,
},
{
lable: "ใช้ไปเท่าไหร่",
name: "group2",
color: "blue-6",
total: 0,
},
{
lable: "เหลือเท่าไหร่",
name: "group2",
color: "green-6",
total: 0,
},
{
lable: "สำรอง",
name: "group2",
color: "red-6",
total: 0,
},
]);
const itemsCard = computed(() => {
const items =
store.roundMainCode === "APR"
? itemsCardAPR.value
: store.roundMainCode === "OCT"
? itemsCardOCT.value
: [];
return items;
});
const rows = ref<any>([]);
const columnsAPR = ref<QTableProps["columns"]>([
{
name: "org",
align: "left",
label: "หน่วยงาน",
sortable: true,
field: "org",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "total",
align: "left",
label: "จำนวนคนทั้งหมด",
sortable: true,
field: "total",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "fifteenPercent",
align: "left",
label: "15% ของจำนวนคน",
sortable: true,
field: "fifteenPercent",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "chosen",
align: "left",
label: "เลือกไปแล้ว",
sortable: true,
field: "chosen",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "remaining",
align: "left",
label: "คงเหลือโควตา",
sortable: true,
field: "remaining",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "totalBackup",
align: "left",
label: "สำรอง",
sortable: true,
field: "totalBackup",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
const columnsOCT = ref<QTableProps["columns"]>([
{
name: "org",
align: "left",
label: "หน่วยงาน",
sortable: true,
field: "org",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "currentAmount",
align: "left",
label: "จำนวนเงินคนครองปัจจุบัน",
sortable: true,
field: "currentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "sixPercentAmount",
align: "left",
label: "วงเงิน 6%",
sortable: true,
field: "sixPercentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "spentAmount",
align: "left",
label: "ยอดเงินที่ใช้ไป",
sortable: true,
field: "spentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "sixPercentSpentAmount",
align: "left",
label: "วงเงิน 6%-ยอดเงินที่ใช้ไป",
sortable: true,
field: "sixPercentSpentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "useAmount",
align: "left",
label: "ใช้ไปเท่าไหร่",
sortable: true,
field: "useAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "remainingAmount",
align: "left",
label: "เหลือเท่าไหร่",
sortable: true,
field: "remainingAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "totalBackup",
align: "left",
label: "สำรอง",
sortable: true,
field: "totalBackup",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
const columns = computed(() => {
const columnsss =
store.roundMainCode === "APR"
? columnsAPR.value
: store.roundMainCode === "OCT"
? columnsOCT.value
: [];
return columnsss;
});
const visibleColumns = ref<string[]>(
store.roundMainCode === "APR"
? ["org", "total", "fifteenPercent", "chosen", "remaining", "totalBackup"]
: store.roundMainCode === "OCT"
? [
"org",
"currentAmount",
"sixPercentAmount",
"spentAmount",
"sixPercentSpentAmount",
"useAmount",
"remainingAmount",
"totalBackup",
]
: []
);
const gruup = ref<string>("กลุ่ม 1");
const options = ref(["ทั้งหมด", "กลุ่ม 1", "กลุ่ม 2"]);
</script>
<template>
<!-- Card โควต -->
<q-toolbar class="q-pa-md">
<q-select
dense
outlined
v-model="gruup"
:options="options"
label="กลุ่ม"
style="width: 150px"
/>
</q-toolbar>
<div class="row col-12 q-pa-md bg-grey-2">
<div class="row col-12 q-col-gutter-sm">
<div
v-for="(item, index) in itemsCard"
:key="index"
:class="
store.roundMainCode === 'APR'
? 'col-6 col-sm-4 col-md-3 col-lg-2'
: 'col-3'
"
>
<q-card>
<q-card-section>
<div class="row items-center no-wrap">
<div class="col">
<div class="">{{ item.lable }}</div>
</div>
<div :class="`text-${item.color} text-bold`">
{{ item.total ? item.total.toLocaleString() : 0 }}
</div>
</div>
</q-card-section>
</q-card>
</div>
<!-- <div class="row col justify-end self-center">
<q-btn-dropdown color="blue-5" label="ดาวน์โหลด">
<q-list>
<q-item
v-for="(item, index) in store.roundMainCode === 'APR'
? store.itemDownloadApr
: store.roundMainCode === 'OCT'
? store.itemDownloadOct
: []"
:key="index"
clickable
v-close-popup
@click="onClickDownload(item)"
>
<q-item-section>
<q-item-label>{{ item.name }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</div> -->
</div>
</div>
<q-separator />
<div class="col-12 q-pa-md">
<d-table
for="table"
ref="table"
:columns="columns"
:rows="rows"
row-key="subject"
flat
bordered
dense
class="custom-header-table"
:visible-columns="visibleColumns"
>
<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 class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</div>
</template> </template>
<style scoped></style>

View file

@ -400,7 +400,7 @@ const updateIsShowRetire = async () => {
:name="item.name" :name="item.name"
> >
<!-- Card โควต --> <!-- Card โควต -->
<div class="row col-12 q-pa-md"> <div class="row col-12 q-pa-md" v-if="store.roundMainCode !== 'SPECIAL'">
<div <div
:class="`row col-12 ${ :class="`row col-12 ${
store.roundMainCode === 'APR' ? `q-col-gutter-md` : `q-gutter-md` store.roundMainCode === 'APR' ? `q-col-gutter-md` : `q-gutter-md`
@ -433,7 +433,10 @@ const updateIsShowRetire = async () => {
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>
<div class="row col justify-end self-center"> <div
class="row col justify-end self-center"
v-if="store.roundMainCode !== 'SPECIAL'"
>
<q-btn-dropdown color="blue-5" label="ดาวน์โหลด"> <q-btn-dropdown color="blue-5" label="ดาวน์โหลด">
<q-list> <q-list>
<q-item <q-item
@ -469,7 +472,7 @@ const updateIsShowRetire = async () => {
@update:model-value="updateIsShowRetire" @update:model-value="updateIsShowRetire"
class="q-pr-md" class="q-pr-md"
> >
เฉพาะผเกษยณอายราชการ แสดงเฉพาะผเกษยณอายราชการ
</q-toggle> </q-toggle>
</div> </div>

View file

@ -1,4 +1,357 @@
<template> <script setup lang="ts">
<q-card class="q-pa-sm"> แสดง dashboard สำหร สกจ. </q-card> import { ref, onMounted, reactive, computed } from "vue";
import type { QTableProps } from "quasar";
import { useSalaryListSDataStore } from "@/modules/13_salary/store/SalaryListsStore";
const store = useSalaryListSDataStore();
/** itemsCard*/
const itemsCardAPR = ref([
{
lable: "จำนวนคนทั้งหมด",
name: "group1",
color: "secondary",
total: 0,
},
{
lable: "15% ของจำนวนคน",
name: "group2",
color: "light-blue-4",
total: 0,
},
{
lable: "เลือกไปแล้ว",
name: "group2",
color: "primary",
total: 0,
},
{
lable: "คงเหลือโควตา",
name: "group2",
color: "indigo-6",
total: 0,
},
{
lable: "สำรอง",
name: "group2",
color: "red-6",
total: 0,
},
]);
const itemsCardOCT = ref([
{
lable: "จำนวนเงินคนครองปัจจุบัน",
name: "group1",
color: "secondary",
total: 0,
},
{
lable: "วงเงิน 6%",
name: "group2",
color: "light-blue-4",
total: 0,
},
{
lable: "ยอดเงินที่ใช้ไป",
name: "group2",
color: "primary",
total: 0,
},
{
lable: "วงเงิน 6%-ยอดเงินที่ใช้ไป",
name: "group2",
color: "indigo-6",
total: 0,
},
{
lable: "ใช้ไปเท่าไหร่",
name: "group2",
color: "blue-6",
total: 0,
},
{
lable: "เหลือเท่าไหร่",
name: "group2",
color: "green-6",
total: 0,
},
{
lable: "สำรอง",
name: "group2",
color: "red-6",
total: 0,
},
]);
const itemsCard = computed(() => {
const items =
store.roundMainCode === "APR"
? itemsCardAPR.value
: store.roundMainCode === "OCT"
? itemsCardOCT.value
: [];
return items;
});
const rows = ref<any>([]);
const columnsAPR = ref<QTableProps["columns"]>([
{
name: "org",
align: "left",
label: "หน่วยงาน",
sortable: true,
field: "org",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "total",
align: "left",
label: "จำนวนคนทั้งหมด",
sortable: true,
field: "total",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "fifteenPercent",
align: "left",
label: "15% ของจำนวนคน",
sortable: true,
field: "fifteenPercent",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "chosen",
align: "left",
label: "เลือกไปแล้ว",
sortable: true,
field: "chosen",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "remaining",
align: "left",
label: "คงเหลือโควตา",
sortable: true,
field: "remaining",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "totalBackup",
align: "left",
label: "สำรอง",
sortable: true,
field: "totalBackup",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
const columnsOCT = ref<QTableProps["columns"]>([
{
name: "org",
align: "left",
label: "หน่วยงาน",
sortable: true,
field: "org",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "currentAmount",
align: "left",
label: "จำนวนเงินคนครองปัจจุบัน",
sortable: true,
field: "currentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "sixPercentAmount",
align: "left",
label: "วงเงิน 6%",
sortable: true,
field: "sixPercentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "spentAmount",
align: "left",
label: "ยอดเงินที่ใช้ไป",
sortable: true,
field: "spentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "sixPercentSpentAmount",
align: "left",
label: "วงเงิน 6%-ยอดเงินที่ใช้ไป",
sortable: true,
field: "sixPercentSpentAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "useAmount",
align: "left",
label: "ใช้ไปเท่าไหร่",
sortable: true,
field: "useAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "remainingAmount",
align: "left",
label: "เหลือเท่าไหร่",
sortable: true,
field: "remainingAmount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "totalBackup",
align: "left",
label: "สำรอง",
sortable: true,
field: "totalBackup",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
const columns = computed(() => {
const columnsss =
store.roundMainCode === "APR"
? columnsAPR.value
: store.roundMainCode === "OCT"
? columnsOCT.value
: [];
return columnsss;
});
const visibleColumns = ref<string[]>(
store.roundMainCode === "APR"
? ["org", "total", "fifteenPercent", "chosen", "remaining", "totalBackup"]
: store.roundMainCode === "OCT"
? [
"org",
"currentAmount",
"sixPercentAmount",
"spentAmount",
"sixPercentSpentAmount",
"useAmount",
"remainingAmount",
"totalBackup",
]
: []
);
const gruup = ref<string>("กลุ่ม 1");
const options = ref(["ทั้งหมด", "กลุ่ม 1", "กลุ่ม 2"]);
</script>
<template>
<!-- Card โควต -->
<q-toolbar class="q-pa-md">
<q-select
dense
outlined
v-model="gruup"
:options="options"
label="กลุ่ม"
style="width: 150px"
/>
</q-toolbar>
<div class="row col-12 q-pa-md bg-grey-2">
<div class="row col-12 q-col-gutter-sm">
<div
v-for="(item, index) in itemsCard"
:key="index"
:class="
store.roundMainCode === 'APR'
? 'col-6 col-sm-4 col-md-3 col-lg-2'
: 'col-3'
"
>
<q-card>
<q-card-section>
<div class="row items-center no-wrap">
<div class="col">
<div class="">{{ item.lable }}</div>
</div>
<div :class="`text-${item.color} text-bold`">
{{ item.total ? item.total.toLocaleString() : 0 }}
</div>
</div>
</q-card-section>
</q-card>
</div>
<!-- <div class="row col justify-end self-center">
<q-btn-dropdown color="blue-5" label="ดาวน์โหลด">
<q-list>
<q-item
v-for="(item, index) in store.roundMainCode === 'APR'
? store.itemDownloadApr
: store.roundMainCode === 'OCT'
? store.itemDownloadOct
: []"
:key="index"
clickable
v-close-popup
@click="onClickDownload(item)"
>
<q-item-section>
<q-item-label>{{ item.name }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</div> -->
</div>
</div>
<q-separator />
<div class="col-12 q-pa-md">
<d-table
for="table"
ref="table"
:columns="columns"
:rows="rows"
row-key="subject"
flat
bordered
dense
class="custom-header-table"
:visible-columns="visibleColumns"
>
<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 class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</div>
</template> </template>
<style scoped></style>

View file

@ -21,7 +21,6 @@ import TableTabType2 from "@/modules/13_salary/components/SalaryLists/TableTypeO
/** importStore*/ /** importStore*/
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useSalaryListSDataStore } from "@/modules/13_salary/store/SalaryListsStore"; import { useSalaryListSDataStore } from "@/modules/13_salary/store/SalaryListsStore";
import { log } from "console";
/** use*/ /** use*/
const $q = useQuasar(); const $q = useQuasar();
@ -390,7 +389,8 @@ const updateIsShowRetire = async () => {
:key="index" :key="index"
@click="changeTabGroup" @click="changeTabGroup"
> >
<q-tab :name="item.name" :label="item.lable"> <q-tab :name="item.name">
<div>{{ item.lable }} <q-icon name="info" size="18px" /></div>
<q-tooltip> <q-tooltip>
<q-list dense v-if="item.name === 'group1'" class="tootip-txt-normal"> <q-list dense v-if="item.name === 'group1'" class="tootip-txt-normal">
<q-item> <q-item>
@ -479,7 +479,7 @@ const updateIsShowRetire = async () => {
:name="item.name" :name="item.name"
> >
<!-- Card โควต --> <!-- Card โควต -->
<div class="row col-12 q-pa-md"> <div class="row col-12 q-pa-md" v-if="store.roundMainCode !== 'SPECIAL'">
<div <div
:class="`row col-12 ${ :class="`row col-12 ${
store.roundMainCode === 'APR' ? `q-col-gutter-md` : `q-gutter-md` store.roundMainCode === 'APR' ? `q-col-gutter-md` : `q-gutter-md`
@ -512,7 +512,11 @@ const updateIsShowRetire = async () => {
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>
<div class="row col justify-end self-center">
<div
class="row col justify-end self-center"
v-if="store.roundMainCode !== 'SPECIAL'"
>
<q-btn-dropdown color="blue-5" label="ดาวน์โหลด"> <q-btn-dropdown color="blue-5" label="ดาวน์โหลด">
<q-list> <q-list>
<q-item <q-item
@ -548,7 +552,7 @@ const updateIsShowRetire = async () => {
@update:model-value="updateIsShowRetire" @update:model-value="updateIsShowRetire"
class="q-pr-md" class="q-pr-md"
> >
เฉพาะผเกษยณอายราชการ แสดงเฉพาะผเกษยณอายราชการ
</q-toggle> </q-toggle>
</div> </div>

View file

@ -30,6 +30,7 @@ const $q = useQuasar();
const { messageError, showLoader, hideLoader } = useCounterMixin(); const { messageError, showLoader, hideLoader } = useCounterMixin();
/** ตัวแปร*/ /** ตัวแปร*/
const year = ref<number>(new Date().getFullYear());
const roundFilter = ref<any>(); const roundFilter = ref<any>();
const roundOptions = ref<DataOptionShort[]>([]); const roundOptions = ref<DataOptionShort[]>([]);
const agencyFilter = ref<string>(""); const agencyFilter = ref<string>("");
@ -49,42 +50,48 @@ const nextPage = ref<number>(1);
/**function เรียกข้อมูลรอบการขึ้นเงินเดือน*/ /**function เรียกข้อมูลรอบการขึ้นเงินเดือน*/
function getRound() { function getRound() {
roundOptions.value = [];
showLoader(); showLoader();
http http
.get( .get(
config.API.salaryPeriodActive() + config.API.salaryPeriodActive(year.value.toString()) +
`?page=${page.value}&pageSize=${pageSize.value}&keyword=&year=0` `?page=${page.value}&pageSize=${pageSize.value}&keyword=&year=0`
) )
.then(async (res) => { .then(async (res) => {
const data = res.data.result.data; const data = res.data.result.data;
lastPage.value = Math.ceil(res.data.result.total / pageSize.value); if (data.length !== 0) {
lastPage.value = Math.ceil(res.data.result.total / pageSize.value);
const optionMain = await data.map((x: DataRound) => ({
id: x.id,
revisionId: x.revisionId,
shortCode: x.period,
isClose: x.isClose,
year: x.year,
name:
x.period === "OCT"
? "รอบตุลาคม "
: x.period === "SPECIAL"
? "รอบพิเศษ "
: "รอบเมษายน ",
}));
roundOptions.value.push(...optionMain);
const optionMain = await data.map((x: DataRound) => ({ roundFilter.value = await (roundOptions.value
id: x.id, ? roundOptions.value[0]
revisionId: x.revisionId, : "");
shortCode: x.period,
isClose: x.isClose,
year: x.year,
name:
(x.period === "OCT"
? "รอบตุลาคม "
: x.period === "SPECIAL"
? "รอบพิเศษ "
: "รอบเมษายน ") +
(Number(x.year) + 543),
}));
roundOptions.value.push(...optionMain);
roundFilter.value = await (roundOptions.value store.roundMainCode = roundFilter.value.shortCode;
? roundOptions.value[0] store.isClosedRound = roundFilter.value.isClose;
: "");
store.roundMainCode = roundFilter.value.shortCode; await getSnap(roundFilter.value.shortCode);
store.isClosedRound = roundFilter.value.isClose; await getAgency(roundFilter.value.revisionId);
await getAgencyPosition(roundFilter.value.revisionId);
await getSnap(roundFilter.value.shortCode); } else {
await getAgency(roundFilter.value.revisionId); isLoad.value = false;
await getAgencyPosition(roundFilter.value.revisionId); roundFilter.value = "ไม่มีข้อมูล";
snapFilter.value = "ไม่มีข้อมูล";
agencyFilter.value = "ไม่มีข้อมูล";
}
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
@ -307,8 +314,43 @@ onMounted(() => {
รายการเลอนคาจางลกจางประจำ รายการเลอนคาจางลกจางประจำ
</div> </div>
<q-space /> <q-space />
<datepicker
menu-class-name="modalfix"
v-model="year"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
style="width: 150px"
@update:model-value="getRound"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
lazy-rules
outlined
:model-value="Number(year) + 543"
:label="`${'ปีงบประมาณ'}`"
bg-color="white"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
<q-select <q-select
class="q-ml-xs"
v-model="roundFilter" v-model="roundFilter"
label="รอบการขึ้นเงินเดือน" label="รอบการขึ้นเงินเดือน"
dense dense
@ -323,6 +365,7 @@ onMounted(() => {
@update:model-value="onChangeRound" @update:model-value="onChangeRound"
:loading="loading" :loading="loading"
@virtual-scroll="onScroll" @virtual-scroll="onScroll"
:disable="!isLoad"
> >
<template v-slot:option="scope"> <template v-slot:option="scope">
<q-item v-bind="scope.itemProps"> <q-item v-bind="scope.itemProps">
@ -348,6 +391,7 @@ onMounted(() => {
hide-bottom-space hide-bottom-space
bg-color="white" bg-color="white"
@update:model-value="onChangeSnap" @update:model-value="onChangeSnap"
:disable="!isLoad"
/> />
<q-select <q-select
class="q-ml-xs" class="q-ml-xs"
@ -364,6 +408,7 @@ onMounted(() => {
hide-bottom-space hide-bottom-space
bg-color="white" bg-color="white"
@update:model-value="onChangeAgency" @update:model-value="onChangeAgency"
:disable="!isLoad"
/> />
</div> </div>

View file

@ -29,6 +29,7 @@ const $q = useQuasar();
const { messageError, showLoader, hideLoader } = useCounterMixin(); const { messageError, showLoader, hideLoader } = useCounterMixin();
/** ตัวแปร*/ /** ตัวแปร*/
const year = ref<number>(new Date().getFullYear());
const roundFilter = ref<any>(); const roundFilter = ref<any>();
const roundOptions = ref<DataOptionShort[]>([]); const roundOptions = ref<DataOptionShort[]>([]);
const agencyFilter = ref<string>(""); const agencyFilter = ref<string>("");
@ -48,51 +49,49 @@ const nextPage = ref<number>(1);
/**function เรียกข้อมูลรอบการขึ้นเงินเดือน*/ /**function เรียกข้อมูลรอบการขึ้นเงินเดือน*/
function getRound() { function getRound() {
roundOptions.value = [];
showLoader(); showLoader();
http http
.get( .get(
config.API.salaryPeriodActive() + config.API.salaryPeriodActive(year.value.toString()) +
`?page=${page.value}&pageSize=${pageSize.value}&keyword=&year=0` `?page=${page.value}&pageSize=${pageSize.value}&keyword=&year=0`
) )
.then(async (res) => { .then(async (res) => {
const data = res.data.result.data; const data = res.data.result.data;
lastPage.value = Math.ceil(res.data.result.total / pageSize.value); if (data.length !== 0) {
lastPage.value = Math.ceil(res.data.result.total / pageSize.value);
const optionMain = await data.map((x: DataRound) => ({
id: x.id,
revisionId: x.revisionId,
shortCode: x.period,
isClose: x.isClose,
year: x.year,
name:
x.period === "OCT"
? "รอบตุลาคม "
: x.period === "SPECIAL"
? "รอบพิเศษ "
: "รอบเมษายน ",
}));
roundOptions.value.push(...optionMain);
const optionMain = await data.map((x: DataRound) => ({ roundFilter.value = await (roundOptions.value
id: x.id, ? roundOptions.value[0]
revisionId: x.revisionId, : "");
shortCode: x.period,
isClose: x.isClose,
year: x.year,
name:
(x.period === "OCT"
? "รอบตุลาคม "
: x.period === "SPECIAL"
? "รอบพิเศษ "
: "รอบเมษายน ") +
(Number(x.year) + 543),
}));
roundOptions.value.push(...optionMain);
roundFilter.value = await (roundOptions.value store.roundMainCode = roundFilter.value.shortCode;
? roundOptions.value[0] store.roundYear = roundFilter.value.year;
: ""); store.isClosedRound = roundFilter.value.isClose;
store.roundMainCode = roundFilter.value.shortCode; await getSnap(roundFilter.value.shortCode);
store.roundYear = roundFilter.value.year; await getAgency(roundFilter.value.revisionId);
store.isClosedRound = roundFilter.value.isClose; await getAgencyPosition(roundFilter.value.revisionId);
} else {
await getSnap(roundFilter.value.shortCode); isLoad.value = false;
await getAgency(roundFilter.value.revisionId); roundFilter.value = "ไม่มีข้อมูล";
await getAgencyPosition(roundFilter.value.revisionId); snapFilter.value = "ไม่มีข้อมูล";
agencyFilter.value = "ไม่มีข้อมูล";
// if (agencyFilter.value && roundFilter.value.id && snapFilter.value) { }
// await fetchSalalyPeriod(
// agencyFilter.value,
// roundFilter.value.id,
// snapFilter.value
// );
// }
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
@ -320,17 +319,16 @@ function onScroll({ to, ref }: { to: number; ref: any }) {
function getQuota() { function getQuota() {
http http
.get(config.API.salaryListPeriodQuota(store.groupId)) .get(config.API.salaryListPeriodQuota(store.groupId))
.then((res)=>{ .then((res) => {
console.log("q",res) console.log("q", res);
const data = res.data.result const data = res.data.result;
store.statusQuota = data.status store.statusQuota = data.status;
})
}).catch((e)=>{ .catch((e) => {
messageError($q,e) messageError($q, e);
}).finally(()=>{ })
.finally(() => {});
})
} }
onMounted(async () => { onMounted(async () => {
await getRound(); await getRound();
@ -343,7 +341,42 @@ onMounted(async () => {
รายการเลอนเงนเดอนขาราชการฯ รายการเลอนเงนเดอนขาราชการฯ
</div> </div>
<q-space /> <q-space />
<datepicker
menu-class-name="modalfix"
v-model="year"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
style="width: 150px"
@update:model-value="getRound"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
lazy-rules
outlined
:model-value="Number(year) + 543"
:label="`${'ปีงบประมาณ'}`"
bg-color="white"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
<q-select <q-select
class="q-ml-xs"
v-model="roundFilter" v-model="roundFilter"
label="รอบการขึ้นเงินเดือน" label="รอบการขึ้นเงินเดือน"
dense dense
@ -358,6 +391,7 @@ onMounted(async () => {
@update:model-value="onChangeRound" @update:model-value="onChangeRound"
:loading="loading" :loading="loading"
@virtual-scroll="onScroll" @virtual-scroll="onScroll"
:disable="!isLoad"
> >
<template v-slot:option="scope"> <template v-slot:option="scope">
<q-item v-bind="scope.itemProps"> <q-item v-bind="scope.itemProps">
@ -383,6 +417,7 @@ onMounted(async () => {
hide-bottom-space hide-bottom-space
bg-color="white" bg-color="white"
@update:model-value="onChangeSnap" @update:model-value="onChangeSnap"
:disable="!isLoad"
/> />
<q-select <q-select
class="q-ml-xs" class="q-ml-xs"
@ -399,6 +434,7 @@ onMounted(async () => {
hide-bottom-space hide-bottom-space
bg-color="white" bg-color="white"
@update:model-value="onChangeAgency" @update:model-value="onChangeAgency"
:disable="!isLoad"
/> />
</div> </div>