ทะเบียนประวัติ

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2025-02-24 13:11:42 +07:00
parent c05701c8ea
commit 1c645bc42e
8 changed files with 1694 additions and 18 deletions

View file

@ -44,8 +44,7 @@ export default {
profileNewInsignByProfileId: (profileId: string, type: string) => profileNewInsignByProfileId: (profileId: string, type: string) =>
`${registryNew}${type}/insignia/${profileId}`, `${registryNew}${type}/insignia/${profileId}`,
orgInsigniaActive: () => orgInsigniaActive: () => `${org}/insignia/insignia-type/active`,
`${org}/insignia/insignia-type/active`,
profileNewInsignById: (dataId: string, type: string) => profileNewInsignById: (dataId: string, type: string) =>
`${registryNew}${type}/insignia/${dataId}`, `${registryNew}${type}/insignia/${dataId}`,
@ -169,6 +168,17 @@ export default {
leaveListCard: (id: string, type: string) => leaveListCard: (id: string, type: string) =>
`${registryNew}${type}/leave/admin/${id}`, //noPermission `${registryNew}${type}/leave/admin/${id}`, //noPermission
/** ตำแหน่ง*/
profileSalaryPositionNew: (type: string) => `${registryNew}${type}/salary/position`,
profileListSalaryPositionNew: (id: string, type: string) =>
`${registryNew}${type}/salary/position/${id}`,
profileListSalaryPositionHistoryNew: (profileId: string, type: string) =>
`${registryNew}${type}/salary/position/admin/history/${profileId}`,
profileSalaryPositionSwapNew: (type: string, id: string, type2: string) =>
`${registryNew}${type2}/salary/position/swap/${type}/${id}`,
salaryListCardPosition: (id: string, type: string) =>
`${registryNew}${type}/salary/position/admin/${id}`, //noPermission
/** ตำแหน่งเงินเดือน*/ /** ตำแหน่งเงินเดือน*/
profileSalaryNew: (type: string) => `${registryNew}${type}/salary`, profileSalaryNew: (type: string) => `${registryNew}${type}/salary`,
profileListSalaryNew: (id: string, type: string) => profileListSalaryNew: (id: string, type: string) =>

View file

@ -102,7 +102,7 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
format(val, row) { format(val, row) {
return row.status ? "Active" : "-"; return row.status ? "ใช้งาน" : "-";
}, },
}, },
]); ]);
@ -444,7 +444,7 @@ onMounted(() => {
<div class="col-3" v-else>-</div> <div class="col-3" v-else>-</div>
<div class="col-3 text-grey-6 text-weight-medium">สถานะ</div> <div class="col-3 text-grey-6 text-weight-medium">สถานะ</div>
<div class="col-3"> <div class="col-3">
{{ props.row.status ? "Active" : "-" }} {{ props.row.status ? "ใช้งาน" : "-" }}
</div> </div>
</div> </div>
<q-separator /> <q-separator />
@ -572,7 +572,7 @@ onMounted(() => {
<q-checkbox <q-checkbox
disable disable
v-model="formData.status" v-model="formData.status"
label="Active" label="ใช้งาน"
keep-color="primary" keep-color="primary"
/> />
</div> </div>

View file

@ -76,7 +76,7 @@ const columns = ref<QTableProps["columns"]>([
sortable: true, sortable: true,
field: "status", field: "status",
format(val, row) { format(val, row) {
return row.status ? "Active" : "-"; return row.status ? "ใช้งาน" : "-";
}, },
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",

View file

@ -0,0 +1,387 @@
<script setup lang="ts">
import { ref, watch, computed } from "vue";
import { useQuasar } from "quasar";
import { useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import http from "@/plugins/http";
import config from "@/app.config";
import type { QTableProps } from "quasar";
import type { ResListSalary } from "@/modules/04_registryPerson/interface/response/Salary";
import DialogHeader from "@/components/DialogHeader.vue";
const $q = useQuasar();
const route = useRoute();
const {
date2Thai,
showLoader,
hideLoader,
messageError,
pathRegistryEmp,
onSearchDataTable,
} = useCounterMixin();
/** props*/
const modal = defineModel<boolean>("modal", { required: true });
const salaryId = defineModel<string>("salaryId", { required: true });
const empType = ref<string>(pathRegistryEmp(route.name?.toString() ?? ""));
const rows = ref<ResListSalary[]>([]); //
const rowsMain = ref<ResListSalary[]>([]); //
const keyword = ref<string>(""); //
const baseColumns = ref<QTableProps["columns"]>([
{
name: "commandDateAffect",
align: "left",
label: "วัน เดือน ปี",
sortable: true,
field: "commandDateAffect",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format: (v) => date2Thai(v),
},
{
name: "amount",
align: "left",
label: empType.value === "-employee" ? "ค่าตอบแทนรายเดือน" : "เงินเดือน",
sortable: true,
field: "amount",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format: (v) => Number(v).toLocaleString(),
},
{
name: "positionSalaryAmount",
align: "left",
label: "เงินประจำตำแหน่ง",
sortable: true,
field: "positionSalaryAmount",
headerStyle: "font-size: 14px",
format: (v) => Number(v).toLocaleString(),
style: "font-size: 14px",
},
{
name: "mouthSalaryAmount",
align: "left",
label: "เงินค่าตอบแทนรายเดือน",
sortable: true,
field: "mouthSalaryAmount",
headerStyle: "font-size: 14px",
format: (v) => Number(v).toLocaleString(),
style: "font-size: 14px",
},
{
name: "oc",
align: "left",
label: "สังกัด",
sortable: true,
field: "oc",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "positionName",
align: "left",
label: "ตำแหน่ง",
sortable: true,
field: "positionName",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "posNo",
align: "left",
label: "ตำแหน่งเลขที่",
sortable: true,
field: "posNo",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "positionLine",
align: "left",
label: "สายงาน",
sortable: true,
field: "positionLine",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "positionPathSide",
align: "left",
label: "ด้าน/สาขา",
sortable: true,
field: "positionPathSide",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "positionType",
align: "left",
label: "ตำแหน่งประเภท",
sortable: true,
field: "positionType",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "positionLevel",
align: "left",
label: "ระดับ",
sortable: true,
field: "positionLevel",
format(val, row) {
return `${
row.positionLevel
? row.positionLevel
: row.positionCee
? row.positionCee
: "-"
}`;
},
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "positionExecutive",
align: "left",
label: "ตำแหน่งทางการบริหาร",
sortable: true,
field: "positionExecutive",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "positionExecutiveSide",
align: "left",
label: "ด้านทางการบริหาร",
sortable: true,
field: "positionExecutiveSide",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "salaryClass",
align: "left",
label: "ตำแหน่ง (รายละเอียด)",
sortable: true,
field: "salaryClass",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "commandName",
align: "left",
label: "เอกสารอ้างอิง",
sortable: true,
field: "commandName",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "refCommandNo",
align: "left",
label: "เลขที่คำสั่ง",
sortable: true,
field: "refCommandNo",
format(val, row) {
return row.commandNo && row.commandYear
? `${row.commandNo}/${row.commandYear}`
: "";
},
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "remark",
align: "left",
label: "หมายเหตุ",
sortable: true,
field: "remark",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "lastUpdateFullName",
align: "left",
label: "ผู้ดำเนินการ",
sortable: true,
field: "lastUpdateFullName",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "lastUpdatedAt",
align: "left",
label: "วันที่แก้ไข",
sortable: true,
field: "lastUpdatedAt",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format: (v) => date2Thai(v, false, true),
},
]);
const visibleColumns = ref<string[]>([
"commandDateAffect",
"amount",
"positionSalaryAmount",
"mouthSalaryAmount",
"oc",
"positionName",
"posNo",
"positionLine",
"positionPathSide",
"positionType",
"positionLevel",
"positionExecutive",
"positionExecutiveSide",
"salaryClass",
"commandName",
"refCommandNo",
"remark",
"lastUpdateFullName",
"lastUpdatedAt",
]);
const columns = computed(() => {
if (empType.value === "-employee") {
if (baseColumns.value) {
return baseColumns.value.filter(
(column) =>
column.name !== "positionSalaryAmount" &&
column.name !== "mouthSalaryAmount"
);
}
}
return baseColumns.value;
});
const pagination = ref({
page: 1,
rowsPerPage: 10,
});
/** function fetch ข้อมูลประวัติการแก้ไข*/
function fetchListHistory() {
showLoader();
http
.get(
config.API.profileListSalaryPositionHistoryNew(
salaryId.value,
empType.value
)
)
.then((res) => {
rows.value = res.data.result;
rowsMain.value = res.data.result;
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
/** ฟังก์ชันปิด Popup*/
function closeDialog() {
modal.value = false;
keyword.value = "";
rows.value = [];
}
/** ฟังก์ค้นหาข้อมูลรายการวินัย */
function serchDataTable() {
rows.value = onSearchDataTable(
keyword.value,
rowsMain.value,
columns.value ? columns.value : []
);
}
/**
* การเปลยนแปลงของ modal
* modal เป true เรยก getHistory เพอดงขอมลประวการแกไข
*/
watch(
() => modal.value,
() => {
modal.value && fetchListHistory();
}
);
</script>
<template>
<q-dialog v-model="modal" persistent>
<q-card style="min-width: 80%">
<DialogHeader
:tittle="'ประวัติแก้ไขตำแหน่ง/เงินเดือน'"
:close="closeDialog"
/>
<q-separator color="grey-4" />
<q-card-section style="max-height: 60vh" class="scroll">
<div class="row q-gutter-sm q-mb-sm">
<q-space />
<q-input
dense
outlined
v-model="keyword"
label="ค้นหา"
class="q-mr-sm"
@keydown.enter.pervent="serchDataTable"
>
<template v-slot:append>
<q-icon name="search" />
</template>
</q-input>
<q-select
v-model="visibleColumns"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="columns"
option-value="name"
style="min-width: 140px"
/>
</div>
<d-table
ref="table"
row-key="id"
flat
bordered
dense
:columns="columns"
:rows="rows"
:paging="true"
v-model:pagination="pagination"
:rows-per-page-options="[10, 20, 50, 100]"
: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">
<q-td v-for="col in props.cols">
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</q-card-section>
</q-card>
</q-dialog>
</template>
<style scoped></style>

View file

@ -35,10 +35,10 @@ const storeRegistry = useRegistryNewDataStore();
> >
<q-tab name="1" label="ข้อมูลราชการ" /> <q-tab name="1" label="ข้อมูลราชการ" />
<q-tab name="7" label="ตำแหน่ง" /> <q-tab name="7" label="ตำแหน่ง" />
<q-tab name="5" label="รักษาการในตำแหน่ง" />
<q-tab name="2" label="วินัย" /> <q-tab name="2" label="วินัย" />
<q-tab name="3" label="การลา" /> <q-tab name="3" label="การลา" />
<q-tab name="4" label="ปฏิบัติราชการพิเศษ" /> <q-tab name="4" label="ปฏิบัติราชการพิเศษ" />
<q-tab name="5" label="รักษาการในตำแหน่ง" />
<q-tab name="6" label="ช่วยราชการ" /> <q-tab name="6" label="ช่วยราชการ" />
</q-tabs> </q-tabs>
<q-separator /> <q-separator />

View file

@ -34,11 +34,11 @@ const rowsMain = ref<ResListSalary[]>([]); //รายการข้อมู
const keyword = ref<string>(""); // const keyword = ref<string>(""); //
const baseColumns = ref<QTableProps["columns"]>([ const baseColumns = ref<QTableProps["columns"]>([
{ {
name: "date", name: "commandDateAffect",
align: "left", align: "left",
label: "วัน เดือน ปี", label: "วัน เดือน ปี",
sortable: true, sortable: true,
field: "date", field: "commandDateAffect",
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
format: (v) => date2Thai(v), format: (v) => date2Thai(v),
@ -83,11 +83,11 @@ const baseColumns = ref<QTableProps["columns"]>([
style: "font-size: 14px", style: "font-size: 14px",
}, },
{ {
name: "position", name: "positionName",
align: "left", align: "left",
label: "ตำแหน่ง", label: "ตำแหน่ง",
sortable: true, sortable: true,
field: "position", field: "positionName",
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -133,6 +133,15 @@ const baseColumns = ref<QTableProps["columns"]>([
label: "ระดับ", label: "ระดับ",
sortable: true, sortable: true,
field: "positionLevel", field: "positionLevel",
format(val, row) {
return `${
row.positionLevel
? row.positionLevel
: row.positionCee
? row.positionCee
: "-"
}`;
},
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -164,11 +173,11 @@ const baseColumns = ref<QTableProps["columns"]>([
style: "font-size: 14px", style: "font-size: 14px",
}, },
{ {
name: "templateDoc", name: "commandName",
align: "left", align: "left",
label: "เอกสารอ้างอิง", label: "เอกสารอ้างอิง",
sortable: true, sortable: true,
field: "templateDoc", field: "commandName",
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -178,6 +187,20 @@ const baseColumns = ref<QTableProps["columns"]>([
label: "เลขที่คำสั่ง", label: "เลขที่คำสั่ง",
sortable: true, sortable: true,
field: "refCommandNo", field: "refCommandNo",
format(val, row) {
return row.commandNo && row.commandYear
? `${row.commandNo}/${row.commandYear}`
: "";
},
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "remark",
align: "left",
label: "หมายเหตุ",
sortable: true,
field: "remark",
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -202,12 +225,12 @@ const baseColumns = ref<QTableProps["columns"]>([
}, },
]); ]);
const visibleColumns = ref<string[]>([ const visibleColumns = ref<string[]>([
"date", "commandDateAffect",
"amount", "amount",
"positionSalaryAmount", "positionSalaryAmount",
"mouthSalaryAmount", "mouthSalaryAmount",
"oc", "oc",
"position", "positionName",
"posNo", "posNo",
"positionLine", "positionLine",
"positionPathSide", "positionPathSide",
@ -216,8 +239,9 @@ const visibleColumns = ref<string[]>([
"positionExecutive", "positionExecutive",
"positionExecutiveSide", "positionExecutiveSide",
"salaryClass", "salaryClass",
"templateDoc", "commandName",
"refCommandNo", "refCommandNo",
"remark",
"lastUpdateFullName", "lastUpdateFullName",
"lastUpdatedAt", "lastUpdatedAt",
]); ]);

View file

@ -779,6 +779,11 @@ onMounted(async () => {
</q-list> </q-list>
</q-btn-dropdown> </q-btn-dropdown>
</div> </div>
<div class="row justify-center">
<a href="/report/registry" class="text-white" target="_blank">
Advanced search
</a>
</div>
</div> </div>
</div> </div>
</q-card-section> </q-card-section>