Merge branch 'develop' into devTee

This commit is contained in:
setthawutttty 2024-10-30 15:04:25 +07:00
commit 072d6087f7
6 changed files with 136 additions and 266 deletions

View file

@ -260,28 +260,8 @@ onMounted(async () => {
<div class="col-12 text-weight-medium bg-grey-1 q-py-sm q-px-md">
เลอกตำแหนงเลขท
</div>
<div class="col-12"><q-separator /></div>
<div class="col-12">
<q-checkbox
keep-color
v-model="isBlank"
label="แสดงเฉพาะตำแหน่งว่าง"
color="primary"
>
<q-tooltip>แสดงเฉพาะตำแหนงวาง </q-tooltip>
</q-checkbox>
<q-checkbox
keep-color
v-model="isAll"
label="แสดงตำแหน่งทั้งหมด"
color="primary"
>
<q-tooltip
>แสดงตำแหนงทงหมดภายใตหนวยงาน/วนราชการทเลอก</q-tooltip
>
</q-checkbox>
</div>
<div class="col-12">
<!-- <div class="col-12">
<div class="row q-gutter-sm no-wrap">
<div>
<q-radio
@ -342,9 +322,29 @@ onMounted(async () => {
</q-select>
</div>
</div>
</div>
<div class="col-12 q-pa-md">
</div> -->
<div class="col-12 q-pa-sm">
<q-toolbar style="padding: 0px">
<div>
<q-checkbox
keep-color
v-model="isBlank"
label="แสดงเฉพาะตำแหน่งว่าง"
color="primary"
>
<q-tooltip>แสดงเฉพาะตำแหนงวาง </q-tooltip>
</q-checkbox>
<q-checkbox
keep-color
v-model="isAll"
label="แสดงตำแหน่งทั้งหมด"
color="primary"
>
<q-tooltip
>แสดงตำแหนงทงหมดภายใตหนวยงาน/วนราชการทเลอก</q-tooltip
>
</q-checkbox>
</div>
<q-space />
<div class="row q-gutter-md">

View file

@ -7,17 +7,13 @@ import { useQuasar, QForm } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import genReport from "@/plugins/genreport";
import { tokenParsed } from "@/plugins/auth";
import { useCounterMixin } from "@/stores/mixin";
import DialogFooter from "@/modules/05_placement/components/PersonalList/DialogFooter.vue";
import DialogHeader from "@/components/DialogHeader.vue";
import type {
TypeFile,
rowFile,
FileList,
CheckBoxType,
} from "@/modules/06_retirement/interface/response/Main";
import type { QTableProps } from "quasar";
import type { DataProfile } from "@/modules/05_placement/interface/index/Main";
@ -527,22 +523,6 @@ onMounted(async () => {
await Promise.all([fetchData(id.value), fetchFile()]).finally(() => {
hideLoader();
});
// const user = await tokenParsed();
// if (user) {
// const commander = await user.role.includes("commander");
// const oligarch = await user.role.includes("oligarch");
// const officer = await user.role.includes("officer");
// if (commander) {
// roleUser.value = "commander";
// } else if (oligarch) {
// roleUser.value = "oligarch";
// } else if (officer) {
// roleUser.value = "officer";
// } else {
// roleUser.value = "admin";
// }
// }
});
</script>
@ -976,7 +956,13 @@ onMounted(async () => {
ผลการพจารณาของผงคบบญชา
</div>
<q-space />
<div class="q-gutter-x-sm" v-if="workflowRef?.permission.isUpdate && dataDetail.commanderReject === null">
<div
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.commanderReject === null
"
>
<q-btn
outline
color="primary"
@ -1042,7 +1028,13 @@ onMounted(async () => {
ผลการพจารณาของผอำนาจ
</div>
<q-space />
<div class="q-gutter-x-sm" v-if="workflowRef?.permission.isUpdate && dataDetail.oligarchReject === null">
<div
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.oligarchReject === null
"
>
<q-btn
outline
color="primary"

View file

@ -40,15 +40,12 @@ const {
} = mixin;
/** ตัวแปร */
const modalPersonal = ref<boolean>(false);
const personId = ref<string>("");
const roleUser = ref<string>("");
const dataProfile = ref<DataProfile>();
const id = ref<string>(route.params.id.toString());
const myForm = ref<QForm | null>(null);
const edit = ref<boolean>(false);
const conditions = ref<boolean>(false);
const dataDetail = ref<any>({
datetext: "",
activeDate: new Date(),
@ -133,7 +130,7 @@ function diffDate() {
async function fetchData(id: string) {
showLoader();
await http
.get(config.API.resingByid(id))
.get(config.API.listResign() + `/cancel/${id}`)
.then(async (res) => {
const data = await res.data.result;
dataProfile.value = data as DataProfile;
@ -173,68 +170,26 @@ function popUp(action: "pass" | "passNot", type: string) {
//pop up
function onSubmit() {
if (actionPass.value) {
confirmpopUp();
} else {
rejectpopUp();
}
}
//pop up
async function confirmpopUp() {
dialogConfirm(
$q,
async () => {
showLoader();
const body = {
reason: reasonReign.value,
};
await http
.put(config.API.resignConfirm(roleUser.value, id.value), body)
.then(async () => {
await fetchData(id.value);
closeModal();
success($q, "การอนุญาตสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
},
"ยืนยันการอนุญาต",
"ต้องการยืนยันการอนุญาตการลานี้หรือไม่ ?"
);
}
//pop up
async function rejectpopUp() {
dialogConfirm(
$q,
async () => {
showLoader();
const body = {
reason: reasonReign.value,
date: dateBreak.value,
};
await http
.put(config.API.resignReject(roleUser.value, id.value), body)
.then(async () => {
await fetchData(id.value);
closeModal();
success($q, "การยับยั้งสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
},
"ยืนยันการยับยั้ง",
"ต้องการยืนยันการยับยั้งนี้หรือไม่ ?"
);
dialogConfirm($q, async () => {
showLoader();
const body = {
reason: reasonReign.value,
reject: !actionPass.value,
};
await http
.put(config.API.resignReject(`${roleUser.value}-cancel`, id.value), body)
.then(async () => {
await fetchData(id.value);
closeModal();
success($q, "บันทึกข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
});
}
/**
@ -245,37 +200,6 @@ async function clickCancel() {
edit.value = false;
myForm.value?.resetValidation();
}
/**
* กดยกเล
*/
async function clickCancelConditions() {
await fetchData(id.value);
conditions.value = false;
}
/** Function บันทึก รายการตรวจสอบเงื่อนไขต่าง ๆ*/
function onSubmitConditions() {
dialogConfirm($q, () => {
showLoader();
http
.put(config.API.resignConditions(id.value), {
isNoDebt: isNoDebt.value,
isNoBurden: isNoBurden.value,
isDiscipline: isDiscipline.value,
})
.then(async () => {
await fetchData(id.value);
success($q, "บันทึกเงื่อนไขต่าง ๆ สำเร็จ");
conditions.value = false;
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
});
}
/** Function บันทึก ,แก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย*/
function onSubmitAttached() {
@ -296,7 +220,7 @@ function onSubmitAttached() {
formData.append("remarkHorizontal", remarkHorizontal.value);
showLoader();
http
.put(config.API.resingByid(id.value), formData)
.put(config.API.listResign() + `/update-cancel/${id.value}`, formData)
.then(async () => {
await fetchData(id.value);
success($q, "บันทึกข้อมูลสำเร็จ");
@ -332,10 +256,6 @@ function statusOrder(val: boolean) {
}
}
function updatemodalPersonal(modal: boolean) {
modalPersonal.value = modal;
}
/** Hook */
onMounted(async () => {
await fetchData(id.value);
@ -513,7 +433,7 @@ onMounted(async () => {
<div class="col-12 text-detail">
{{
dataDetail.commanderReject
? dataDetail.commanderRejectReason
? dataDetail.commanderApproveReason
: dataDetail.commanderApproveReason
}}
</div>
@ -529,6 +449,7 @@ onMounted(async () => {
ผลการพจารณาของผอำนาจ
</div>
<q-space />
<div
class="q-gutter-x-sm"
v-if="
@ -584,7 +505,7 @@ onMounted(async () => {
<div class="col-12 text-detail">
{{
dataDetail.oligarchReject
? dataDetail.oligarchRejectReason
? dataDetail.oligarchApproveReason
: dataDetail.oligarchApproveReason
}}
</div>
@ -606,7 +527,6 @@ onMounted(async () => {
แกไขขอมลเพอลงบญชแนบทาย
</div>
<q-space />
<div v-if="!checkRoutePermisson && workflowRef?.permission.isUpdate">
<div class="q-gutter-sm" v-if="!edit">
<q-btn
@ -836,7 +756,7 @@ onMounted(async () => {
ref="workflowRef"
v-model:is-check-data="isCheckData"
:id="id"
sys-name="SYS_RETIREMENT"
sys-name="RETIREMENT_CANCEL"
/>
</div>
@ -844,7 +764,9 @@ onMounted(async () => {
<q-card style="width: 800px">
<q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader
:tittle="`${actionPass ? 'อนุญาตการลาออก' : 'ยับยั้งการลาออก'}`"
:tittle="`${
actionPass ? 'อนุญาตยกเลิกการลาออก' : 'ยับยั้งยกเลิกการลาออก'
}`"
:close="closeModal"
/>
<q-separator />
@ -862,48 +784,6 @@ onMounted(async () => {
class="inputgreen"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12" v-if="!actionPass">
<datepicker
menu-class-name="modalfix"
v-model="dateBreak"
:locale="'th'"
autoApply
: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="inputgreen"
:model-value="
dateBreak !== null ? date2Thai(dateBreak) : null
"
hide-bottom-space
:label="`${' วันสุดท้ายที่ยับยั้ง'}`"
:rules="[(val:string) => !!val || 'กรุณาเลือกวันที่']"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
:style="
edit
? 'color: var(--q-primary)'
: 'color: var(--q-grey)'
"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white text-teal">
@ -915,12 +795,6 @@ onMounted(async () => {
</q-form>
</q-card>
</q-dialog>
<PopupPersonal
:modal="modalPersonal"
:id="personId"
@update:modal="updatemodalPersonal"
/>
</template>
<style lang="scss" scope>

View file

@ -125,13 +125,10 @@ const visibleColumns = ref<string[]>([
"datetext",
"status",
]);
const filters = ref<ResponseItems[]>([]);
const rowsSendToCommand = ref<ResponseItems[]>([]);
const modal = ref<boolean>(false);
const filterKeyword2 = ref<string>("");
const filterKeyword = ref<string>("");
const openModal = () => (modal.value = true);
const status = ref<string>("");
const optionStatus = ref<any[]>([]);
@ -144,66 +141,57 @@ const pagination = ref({
rowsPerPage: 10,
});
//
/** ฟังก์ชันปิด Popup*/
function closeModal() {
modal.value = false;
filterKeyword2.value = "";
}
// Modal
/** */
async function openModalOrder() {
const row = await filters.value.filter(
(r: ResponseItems) =>
(r.status == "REJECT" || r.status == "APPROVE") &&
r.organizationPositionOld &&
r.positionTypeOld &&
r.positionLevelOld &&
r.positionNumberOld &&
r.salary &&
r.location &&
r.sendDate
);
rowsSendToCommand.value = row;
openModal();
}
// API
async function fecthlist() {
const pathAPI =
stroeResign.mainTabs === "1"
? `${config.API.listResign()}?type=APPROVE`
: `${config.API.listResign()}/cancel?type=APPROVE`;
showLoader();
await http
.get(config.API.listResign())
.get(pathAPI)
.then(async (res) => {
const data = await res.data.result;
// let list: ResponseItems[] = [];
// data.map((r: ResponseItems) => {
// list.push({
// datetext:
// r.createdAt == null ? "-" : date2Thai(new Date(r.createdAt)),
// activeDate: new Date(),
// createdAt: new Date(r.createdAt),
// citizenId: r.citizenId,
// firstName: r.firstName ?? "",
// id: r.id ?? "",
// isActive: r.isActive ? r.isActive : false,
// lastName: r.lastName ?? "",
// location: r.location ?? "",
// organizationPositionOld: r.organizationPositionOld ?? "",
// positionLevelOld: r.positionLevelOld ?? "",
// positionNumberOld: r.positionNumberOld ?? "",
// positionTypeOld: r.positionTypeOld ?? "",
// prefix: r.prefix ?? "",
// profileId: r.profileId ?? "",
// reason: r.reason ?? "",
// salary: r.salary ? r.salary : 0,
// sendDate: r.sendDate,
// status: r.status ?? "",
// statustext: statusText(r.status ?? ""),
// fullname: `${r.prefix ?? ""}${r.firstName ?? ""} ${r.lastName ?? ""}`,
// });
// });
const row = await data.filter(
(r: ResponseItems) =>
(r.status == "REJECT" || r.status == "APPROVE") &&
r.organizationPositionOld &&
r.positionTypeOld &&
r.positionLevelOld &&
r.positionNumberOld &&
r.salary &&
r.location &&
r.sendDate
);
rowsSendToCommand.value = row;
modal.value = true;
})
.catch((e: any) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
/** รายการลาออก*/
async function fecthlist() {
const pathAPI =
stroeResign.mainTabs === "1"
? `${config.API.listResign()}?type=${status.value}`
: `${config.API.listResign()}/cancel?type=${status.value}`;
showLoader();
await http
.get(pathAPI)
.then(async (res) => {
const data = await res.data.result;
rows.value = data;
filters.value = data;
})
.catch((e: any) => {
messageError($q, e);
@ -258,7 +246,9 @@ onMounted(async () => {
hide-bottom-space
outlined
use-input
@update:model-value="stroeResign.formQurey.status = status"
@update:model-value="
(stroeResign.formQurey.status = status), fecthlist()
"
@filter="(inputValue:string,doneFn:Function) => filterOption(inputValue, doneFn) "
>
<template v-slot:no-option>

View file

@ -9,6 +9,11 @@ export const useDataStore = defineStore("resign", () => {
value: "WAITTING",
group: "1",
},
{
name: "รอออกคำสั่ง",
value: "APPROVE",
group: "1",
},
{
name: "ส่งรายชื่อไปออกคำสั่ง",
value: "REPORT",
@ -19,24 +24,30 @@ export const useDataStore = defineStore("resign", () => {
value: "DONE",
group: "1",
},
{
name: "ยกเลิกการลาออก",
name: "ยกเลิกลาออก",
value: "CANCEL",
group: "2",
group: "1",
},
{
name: "รอดำเนินการ",
value: "DONECANCEL",
value: "WAITTING",
group: "2",
},
{
name: "ส่งรายชื่อไปออกคำสั่ง",
value: "CANCEL",
name: "รอออกคำสั่ง",
value: "APPROVE",
group: "2",
},
{
name: "ออกคำสั่งยกเลิกลาออกเสร็จแล้ว",
value: "DONEREJECT",
name: "ส่งไปออกคำสั่ง",
value: "REPORT",
group: "2",
},
{
name: "ออกคำสั่งสำเร็จ",
value: "DONE",
group: "2",
},
]);
@ -53,7 +64,7 @@ export const useDataStore = defineStore("resign", () => {
});
watch(mainTabs, (val) => {
formQurey.status = val === "1" ? "WAITTING" : "DONECANCEL";
formQurey.status = "WAITTING";
});
return { mainTabs, formQurey, optionStatus };

View file

@ -236,15 +236,18 @@ onMounted(() => {
color="secondary"
icon="mdi-dots-horizontal-circle-outline"
v-if="
store.tabsMain === 'DRAFT' ||
store.tabsMain === 'PENDING' ||
store.tabsMain === 'CANCEL'
store.tabsMain === 'DRAFT' || store.tabsMain === 'PENDING'
? checkPermission($route)?.attrIsGet ||
checkPermission($route)?.attrIsCreate ||
checkPermission($route)?.attrIsDelete
checkPermission($route)?.attrIsDelete ||
checkPermission($route)?.attrIsUpdate
: store.tabsMain === 'WAITING' || store.tabsMain === 'REPORTED'
? checkPermission($route)?.attrIsGet ||
checkPermission($route)?.attrIsCreate
: store.tabsMain === 'CANCEL'
? checkPermission($route)?.attrIsGet ||
checkPermission($route)?.attrIsCreate ||
checkPermission($route)?.attrIsDelete
: ''
"
>
@ -257,7 +260,7 @@ onMounted(() => {
store.tabsMain !== 'CANCEL' &&
store.tabsMain !== 'REPORTED' &&
checkPermission($route)?.attrIsGet &&
checkPermission($route)?.attrIsCreate
checkPermission($route)?.attrIsUpdate
"
clickable
v-close-popup