ข้อมูลเงินเดือน/ค่าจ้าง
This commit is contained in:
parent
5972e8f6f5
commit
d88964a57b
2 changed files with 304 additions and 59 deletions
|
|
@ -90,6 +90,9 @@ function redirecToRegistry() {
|
||||||
modal.value = false;
|
modal.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const thumbStyle = ref<any>({
|
||||||
|
zIndex: "1",
|
||||||
|
});
|
||||||
watch(
|
watch(
|
||||||
() => modal.value,
|
() => modal.value,
|
||||||
async () => {
|
async () => {
|
||||||
|
|
@ -184,7 +187,10 @@ watch(
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
|
||||||
<q-scroll-area style="height: 55vh; max-width: 100%">
|
<q-scroll-area
|
||||||
|
:thumb-style="thumbStyle"
|
||||||
|
style="height: 55vh; max-width: 100%"
|
||||||
|
>
|
||||||
<InfoSalary
|
<InfoSalary
|
||||||
v-if="type === 'posSalary'"
|
v-if="type === 'posSalary'"
|
||||||
v-model:profileId="profileId"
|
v-model:profileId="profileId"
|
||||||
|
|
@ -222,4 +228,5 @@ watch(
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped>
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -3,21 +3,31 @@ import { ref, onMounted, computed } from "vue";
|
||||||
import http from "@/plugins/http";
|
import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
import { useQuasar } from "quasar";
|
import { useQuasar } from "quasar";
|
||||||
|
import type { QTableColumn } from "quasar";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* importType
|
* importType
|
||||||
*/
|
*/
|
||||||
import type { QTableProps } from "quasar";
|
import type { QTableProps } from "quasar";
|
||||||
import type { DataPosSalary } from "@/modules/13_salary/interface/response/Main";
|
import type { DataPosSalary } from "@/modules/13_salary/interface/response/Main";
|
||||||
|
import type { ResListSalary } from "@/modules/04_registryPerson/interface/response/Salary";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* importStore
|
* importStore
|
||||||
*/
|
*/
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
|
import DialogPreviewCommand from "@/modules/18_command/components/DialogPreviewCommand.vue";
|
||||||
|
|
||||||
const $q = useQuasar();
|
const $q = useQuasar();
|
||||||
const { date2Thai, showLoader, hideLoader, messageError, onSearchDataTable } =
|
const {
|
||||||
useCounterMixin();
|
date2Thai,
|
||||||
|
showLoader,
|
||||||
|
hideLoader,
|
||||||
|
messageError,
|
||||||
|
onSearchDataTable,
|
||||||
|
findOrgName,
|
||||||
|
findOrgNameHtml,
|
||||||
|
} = useCounterMixin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* props
|
* props
|
||||||
|
|
@ -29,19 +39,182 @@ const employeeClass = defineModel<string>("employeeClass", { required: true });
|
||||||
/**
|
/**
|
||||||
* Table
|
* Table
|
||||||
*/
|
*/
|
||||||
|
const modalCommand = ref<boolean>(false);
|
||||||
|
const command = ref<string>("");
|
||||||
|
const commandId = ref<string>("");
|
||||||
|
|
||||||
const keyword = ref<string>("");
|
const keyword = ref<string>("");
|
||||||
const rows = ref<DataPosSalary[]>([]);
|
const rows = ref<DataPosSalary[]>([]);
|
||||||
const rowsData = ref<DataPosSalary[]>([]);
|
const rowsData = ref<DataPosSalary[]>([]);
|
||||||
const baseColumns = ref<QTableProps["columns"]>([
|
const baseColumns = ref<QTableColumn[]>([
|
||||||
{
|
{
|
||||||
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),
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "commandDateSign",
|
||||||
|
align: "left",
|
||||||
|
label: "วันที่ลงนาม",
|
||||||
|
sortable: true,
|
||||||
|
field: "commandDateSign",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
format: (v) => date2Thai(v),
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "posNumCodeSit",
|
||||||
|
align: "left",
|
||||||
|
label: "หน่วยงานที่ออกคำสั่ง",
|
||||||
|
sortable: false,
|
||||||
|
field: "posNumCodeSit",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
format(val, row) {
|
||||||
|
return row.posNumCodeSitAbb && row.posNumCodeSit
|
||||||
|
? `${row.posNumCodeSit} (${row.posNumCodeSitAbb})`
|
||||||
|
: row.posNumCodeSit
|
||||||
|
? row.posNumCodeSit
|
||||||
|
: "-";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "posNo",
|
||||||
|
align: "left",
|
||||||
|
label:
|
||||||
|
employeeClass.value === "-employee" ? "ตำแหน่งเลขที่" : "เลขที่ตำแหน่ง",
|
||||||
|
sortable: true,
|
||||||
|
field: "posNo",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
format(val, row) {
|
||||||
|
return row.posNoAbb && row.posNo
|
||||||
|
? `${row.posNoAbb}${row.posNo}`
|
||||||
|
: row.posNo
|
||||||
|
? row.posNo
|
||||||
|
: "-";
|
||||||
|
},
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "positionName",
|
||||||
|
align: "left",
|
||||||
|
label: employeeClass.value === "-employee" ? "ตำแหน่ง" : "ตำแหน่งในสายงาน",
|
||||||
|
sortable: true,
|
||||||
|
field: "positionName",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "positionType",
|
||||||
|
align: "left",
|
||||||
|
label: employeeClass.value === "-employee" ? "กลุ่มงาน" : "ตำแหน่งประเภท",
|
||||||
|
sortable: true,
|
||||||
|
field: "positionType",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "positionLevel",
|
||||||
|
align: "left",
|
||||||
|
label: employeeClass.value === "-employee" ? "ระดับชั้นงาน" : "ระดับ",
|
||||||
|
sortable: true,
|
||||||
|
field: "positionLevel",
|
||||||
|
format(val, row) {
|
||||||
|
return `${
|
||||||
|
row.positionLevel
|
||||||
|
? row.positionLevel
|
||||||
|
: row.positionCee
|
||||||
|
? row.positionCee
|
||||||
|
: "-"
|
||||||
|
}`;
|
||||||
|
},
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "positionExecutive",
|
||||||
|
align: "left",
|
||||||
|
label: "ตำแหน่งทางการบริหาร",
|
||||||
|
sortable: true,
|
||||||
|
field: "positionExecutive",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "commandNo",
|
||||||
|
align: "left",
|
||||||
|
label: "เลขที่คำสั่ง",
|
||||||
|
sortable: true,
|
||||||
|
field: "commandNo",
|
||||||
|
format(val, row) {
|
||||||
|
return row.commandNo && row.commandYear
|
||||||
|
? `${row.commandNo}/${Number(row.commandYear) + 543}`
|
||||||
|
: "";
|
||||||
|
},
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "commandCode",
|
||||||
|
align: "left",
|
||||||
|
label: "ประเภทคำสั่ง",
|
||||||
|
sortable: true,
|
||||||
|
field: "commandCode",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "organization",
|
||||||
|
align: "left",
|
||||||
|
label: "สังกัด",
|
||||||
|
sortable: true,
|
||||||
|
field: "organization",
|
||||||
|
headerStyle: "font-size: 14px;min-width:280px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
format(val, row) {
|
||||||
|
return findOrgName({
|
||||||
|
root: row.orgRoot,
|
||||||
|
child1: row.orgChild1,
|
||||||
|
child2: row.orgChild2,
|
||||||
|
child3: row.orgChild3,
|
||||||
|
child4: row.orgChild4,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "amount",
|
name: "amount",
|
||||||
|
|
@ -51,17 +224,19 @@ const baseColumns = ref<QTableProps["columns"]>([
|
||||||
field: "amount",
|
field: "amount",
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
format: (v) => Number(v).toLocaleString(),
|
format(v, row) {
|
||||||
},
|
return row.amount
|
||||||
{
|
? `${row.amount.toLocaleString()}${
|
||||||
name: "positionSalaryAmount",
|
row.amountSpecial !== 0 && row.amountSpecial
|
||||||
align: "left",
|
? ` (${row.amountSpecial.toLocaleString()})`
|
||||||
label: "เงินประจำตำแหน่ง",
|
: ""
|
||||||
sortable: true,
|
}`
|
||||||
field: "positionSalaryAmount",
|
: "-";
|
||||||
headerStyle: "font-size: 14px",
|
},
|
||||||
style: "font-size: 14px",
|
sort: (a: string, b: string) =>
|
||||||
format: (v) => Number(v).toLocaleString(),
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "mouthSalaryAmount",
|
name: "mouthSalaryAmount",
|
||||||
|
|
@ -72,58 +247,68 @@ const baseColumns = ref<QTableProps["columns"]>([
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
format: (v) => Number(v).toLocaleString(),
|
format: (v) => Number(v).toLocaleString(),
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "positionSalaryAmount",
|
||||||
|
align: "left",
|
||||||
|
label: "เงินประจำตำแหน่ง",
|
||||||
|
sortable: true,
|
||||||
|
field: "positionSalaryAmount",
|
||||||
|
headerStyle: "font-size: 14px",
|
||||||
|
style: "font-size: 14px",
|
||||||
|
format: (v) => Number(v).toLocaleString(),
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name: "posNo",
|
name: "remark",
|
||||||
align: "left",
|
align: "left",
|
||||||
label:
|
label: "หมายเหตุ",
|
||||||
employeeClass.value === "-employee" ? "ตำแหน่งเลขที่" : "เลขที่ตำแหน่ง",
|
|
||||||
sortable: true,
|
sortable: true,
|
||||||
field: "posNo",
|
field: "remark",
|
||||||
headerStyle: "font-size: 14px",
|
|
||||||
style: "font-size: 14px",
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: "positionType",
|
|
||||||
align: "left",
|
|
||||||
label: employeeClass.value === "-employee" ? "กลุ่มงาน" : "ตำแหน่งประเภท",
|
|
||||||
sortable: true,
|
|
||||||
field: "positionType",
|
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "positionLevel",
|
name: "lastUpdateFullName",
|
||||||
align: "left",
|
align: "left",
|
||||||
label: employeeClass.value === "-employee" ? "ระดับชั้นงาน" : "ระดับ",
|
label: "ผู้ดำเนินการ",
|
||||||
sortable: true,
|
sortable: true,
|
||||||
field: "positionLevel",
|
field: "lastUpdateFullName",
|
||||||
headerStyle: "font-size: 14px",
|
|
||||||
style: "font-size: 14px",
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: "templateDoc",
|
|
||||||
align: "left",
|
|
||||||
label: "เอกสารอ้างอิง",
|
|
||||||
sortable: true,
|
|
||||||
field: "templateDoc",
|
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "refCommandNo",
|
name: "lastUpdatedAt",
|
||||||
align: "left",
|
align: "left",
|
||||||
label: "เลขที่คำสั่ง",
|
label: "วันที่แก้ไข",
|
||||||
sortable: true,
|
sortable: true,
|
||||||
field: "refCommandNo",
|
field: "lastUpdatedAt",
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
|
format: (v) => date2Thai(v, false, true),
|
||||||
|
sort: (a: string, b: string) =>
|
||||||
|
a
|
||||||
|
.toString()
|
||||||
|
.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
const columns = computed(() => {
|
const columns = computed<QTableColumn[]>(() => {
|
||||||
if (employeeClass.value === "-employee") {
|
if (employeeClass.value === "-employee") {
|
||||||
if (baseColumns.value) {
|
if (baseColumns.value) {
|
||||||
return baseColumns.value.filter(
|
return baseColumns.value.filter(
|
||||||
|
|
@ -133,18 +318,29 @@ const columns = computed(() => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return baseColumns.value;
|
return baseColumns.value.filter(
|
||||||
|
(e: QTableColumn) =>
|
||||||
|
e.name !== "lastUpdateFullName" && e.name !== "lastUpdatedAd"
|
||||||
|
);
|
||||||
});
|
});
|
||||||
const visibleColumns = ref<string[]>([
|
const visibleColumns = ref<string[]>([
|
||||||
"date",
|
"commandDateAffect",
|
||||||
|
"posNumCodeSit",
|
||||||
|
"posNo",
|
||||||
|
"positionName",
|
||||||
|
"positionType",
|
||||||
|
"positionLevel",
|
||||||
|
"positionExecutive",
|
||||||
"amount",
|
"amount",
|
||||||
"positionSalaryAmount",
|
"positionSalaryAmount",
|
||||||
"mouthSalaryAmount",
|
"mouthSalaryAmount",
|
||||||
"posNo",
|
"commandNo",
|
||||||
"positionType",
|
"commandCode",
|
||||||
"positionLevel",
|
"commandDateSign",
|
||||||
"templateDoc",
|
"organization",
|
||||||
"refCommandNo",
|
"remark",
|
||||||
|
"lastUpdateFullName",
|
||||||
|
"lastUpdatedAt",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -174,6 +370,12 @@ function onSearch() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onRefCommand(data: ResListSalary) {
|
||||||
|
modalCommand.value = true;
|
||||||
|
command.value = data.refCommandNo;
|
||||||
|
commandId.value = data.commandId;
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
fetchListSalary();
|
fetchListSalary();
|
||||||
});
|
});
|
||||||
|
|
@ -232,8 +434,38 @@ onMounted(() => {
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:body="props">
|
<template v-slot:body="props">
|
||||||
<q-tr :props="props">
|
<q-tr :props="props">
|
||||||
<q-td v-for="col in props.cols" :key="col.id">
|
<q-td
|
||||||
<div class="table_ellipsis">
|
v-for="col in props.cols"
|
||||||
|
:key="col.id"
|
||||||
|
:class="props.row.isEntry ? 'text-red' : ''"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-if="col.name == 'commandNo' && props.row.commandId"
|
||||||
|
@click="col.value ? onRefCommand(props.row) : null"
|
||||||
|
:class="
|
||||||
|
col.value
|
||||||
|
? 'table_ellipsis text-blue cursor-pointer'
|
||||||
|
: 'table_ellipsis'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{ col.value ? col.value : "-" }}
|
||||||
|
<q-tooltip v-if="col.value">ดูคำสั่ง</q-tooltip>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-else-if="col.name == 'organization'" class="text-html">
|
||||||
|
{{
|
||||||
|
props.row
|
||||||
|
? findOrgNameHtml({
|
||||||
|
root: props.row.orgRoot,
|
||||||
|
child1: props.row.orgChild1,
|
||||||
|
child2: props.row.orgChild2,
|
||||||
|
child3: props.row.orgChild3,
|
||||||
|
child4: props.row.orgChild4,
|
||||||
|
})
|
||||||
|
: "-"
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
{{ col.value ? col.value : "-" }}
|
{{ col.value ? col.value : "-" }}
|
||||||
</div>
|
</div>
|
||||||
</q-td>
|
</q-td>
|
||||||
|
|
@ -242,6 +474,12 @@ onMounted(() => {
|
||||||
</d-table>
|
</d-table>
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
|
||||||
|
<DialogPreviewCommand
|
||||||
|
v-model:modal="modalCommand"
|
||||||
|
v-model:command="command"
|
||||||
|
v-model:commandId="commandId"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue