hrms-mgt/src/modules/11_discipline/store/InvestigateDisStore.ts
2024-01-10 18:01:19 +07:00

355 lines
11 KiB
TypeScript

import { defineStore } from "pinia";
import { ref } from "vue";
import type { QTableProps } from "quasar";
import type {
investigateDisDataRowType,
DataOption,
directorType,
responseType,
DataOptioGroup,
DataNumberOption,
} from "@/modules/11_discipline/interface/index/Main";
import type {
Persons
} from "@/modules/11_discipline/interface/request/disciplinary";
import { useCounterMixin } from "@/stores/mixin";
const mixin = useCounterMixin();
const { date2Thai } = mixin;
export const useInvestigateDisStore = defineStore(
"DisciplineInvestigateDis",
() => {
const tabMenu = ref<string>("disciplinary");
const rows = ref<investigateDisDataRowType[]>([]);
const rowSent = ref<Persons[]>([]);
const rows2 = ref<directorType[]>([]);
const selected = ref<directorType[]>([]);
const daysExtendOps = ref<DataNumberOption[]>([
{ id: 15, name: "15 วัน" },
{ id: 30, name: "30 วัน" },
{ id: 45, name: "45 วัน" },
{ id: 60, name: "60 วัน" },
]);
const offenseDetailsOps = ref<DataOption[]>([
{ id: "NOT_SPECIFIED", name: "ยังไม่ระบุ" },
{ id: "HAVE_CAUSE", name: "มีมูล" },
{ id: "NO_CAUSE", name: "ไม่มีมูล" },
]);
const optionsfaultLevel = ref<DataOptioGroup[]>([
{ id: "0", name: "ไม่ร้ายแรง", disable: true },
{ id: "ภาคทัณฑ์", name: "ภาคทัณฑ์", disable: false },
{
id: "ตัดเงินเดือน",
name: "ตัดเงินเดือน",
disable: false,
},
{
id: "ลดขั้นเงินเดือน",
name: "ลดขั้นเงินเดือน",
disable: false,
},
{ id: "4", name: "ร้ายแรง", disable: true },
{ id: "ปลดออก", name: "ปลดออก", disable: false },
{ id: "ไล่ออก", name: "ไล่ออก", disable: false },
{ id: "อื่นๆ", name: "อื่นๆ", disable: false },
]);
const statusOps = ref<DataOption[]>([
{ id: "NEW", name: "กำลังสอบสวน" },
{ id: "STOP", name: "ยุติเรื่อง" },
{ id: "DONE", name: "ส่งไปสรุปผลการพิจารณาแล้ว" },
]);
const causeTextOptions = ref<DataOption[]>([
{ id: "ร้ายแรง", name: "ร้ายแรง" },
{ id: "ไม่ร้ายแรง", name: "ไม่ร้ายแรง" },
]);
const statusOptions = ref<DataOption[]>([
{ id: "ALL", name: "ทั้งหมด" },
{ id: "NEW", name: "กำลังสอบสวน" },
{ id: "STOP", name: "ยุติเรื่อง" },
{ id: "DONE", name: "ส่งไปสรุปผลการพิจารณาแล้ว" },
]);
const visibleColumns = ref<String[]>([
"no",
"title",
"respondentType",
"offenseDetails",
"disciplinaryFaultLevel",
"disciplinaryCaseFault",
"disciplinaryDate",
"createdAt",
"status",
]);
const columns = ref<QTableProps["columns"]>([
{
name: "no",
align: "center",
label: "ลำดับ",
sortable: false,
field: "no",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "title",
align: "left",
label: "เรื่องร้องเรียน",
sortable: true,
field: "title",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "respondentType",
align: "left",
label: "ผู้ถูกสอบสวน",
sortable: true,
field: "respondentType",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "offenseDetails",
align: "left",
label: "ลักษณะความผิด",
sortable: true,
field: "offenseDetails",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "disciplinaryFaultLevel",
align: "left",
label: "ระดับโทษความผิด",
sortable: true,
field: "disciplinaryFaultLevel",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "disciplinaryCaseFault",
align: "left",
label: "กรณีความผิด",
sortable: true,
field: "disciplinaryCaseFault",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "disciplinaryDate",
align: "left",
label: "วันที่สอบสวน",
sortable: true,
field: "disciplinaryDate",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "createdAt",
align: "left",
label: "วันที่รับเรื่อง",
sortable: true,
field: "createdAt",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "status",
align: "left",
label: "สถานะ",
sortable: true,
field: "status",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
const visibleColumnsDirector = ref<String[]>([
"no",
"name",
"position",
"duty",
"commandNo",
"email",
"phone",
"total",
]);
const columnsDirector = ref<QTableProps["columns"]>([
{
name: "no",
align: "left",
label: "ลำดับ",
sortable: false,
field: "no",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "name",
align: "left",
label: "ชื่อ - นามสกุล",
sortable: true,
field: "name",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "position",
align: "left",
label: "ตำแหน่ง",
sortable: true,
field: "position",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "duty",
align: "left",
label: "หน้าที่",
sortable: true,
field: "duty",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "commandNo",
align: "left",
label: "มติ/คำสั่ง",
sortable: true,
field: "commandNo",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "email",
align: "left",
label: "อีเมล",
sortable: true,
field: "email",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "phone",
align: "left",
label: "เบอร์โทรศัพท์",
sortable: true,
field: "phone",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
}
]);
function convertStatus(val: string) {
const result = statusOps.value.find((x: any) => x.id == val)?.name;
return result ? result : "-";
}
async function fetchList(data: investigateDisDataRowType[]) {
let datalist: any[] = data.map((e: any) => ({
id: e.id,
title: e.title ? e.title : '-',
respondentType: e.respondentType ? convertRespondentType(e.respondentType) : '-',
offenseDetails: e.offenseDetails ? convertFault(e.offenseDetails) : '-',
disciplinaryFaultLevel: e.disciplinaryFaultLevel ?? "-",
disciplinaryCaseFault: e.disciplinaryCaseFault ?? "-",
disciplinaryDate: e.disciplinaryDateStart && e.disciplinaryDateEnd ? `${date2Thai(e.disciplinaryDateStart)} - ${date2Thai(e.disciplinaryDateEnd)}` : '-',
status: convertStatus(e.status) ?? "-",
createdAt: e.createdAt ? date2Thai(e.createdAt) : "-",
}));
rows.value = datalist;
}
async function fecthDirector(data: directorType[]) {
let datalistDirector: responseType[] = data.map((e: directorType) => ({
id: e.id,
name: `${e.prefix}${e.firstName} ${e.lastName}`,
prefix: e.prefix,
firstName: e.firstName,
lastName: e.lastName,
position: e.position,
email: e.email,
phone: e.phone,
}));
rows2.value = datalistDirector;
selected.value = rows2.value;
// console.log(rows2.value);
}
function convertRespondentType(val: string) {
switch (val) {
case "PERSON":
return "บุคคล";
case "ORGANIZATION":
return "หน่วยงาน";
case "BANGKOK":
return "กรุงเทพมหานคร";
}
}
function convertFault(val: string) {
switch (val) {
case "NOT_SPECIFIED":
return "ความผิดวินัยยังไม่ระบุ";
case "NOT_DEADLY":
return "ความผิดวินัยไม่ร้ายแรง";
case "DEADLY":
return "ความผิดวินัยร้ายแรง";
default:
return "-";
}
}
function filterFnOptionsType(
val: string | number,
update: any,
type: string
) {
update(() => {
if (type === "offenseDetailsOps") {
offenseDetailsOps.value = offenseDetailsOps.value.filter(
(v: any) => v.name.toLowerCase().indexOf(val) > -1
);
}
});
}
return {
tabMenu,
fetchList,
rows,
rows2,
rowSent,
offenseDetailsOps,
optionsfaultLevel,
fecthDirector,
visibleColumns,
columns,
visibleColumnsDirector,
columnsDirector,
daysExtendOps,
filterFnOptionsType,
causeTextOptions,
convertRespondentType,
convertFault,
statusOptions
};
}
);