เพิ่ม Function เพิ่มรายการประวัติตำแหน่ง/เงินเดือน

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2025-07-17 14:51:19 +07:00
parent 9c5e958715
commit 524523976f
4 changed files with 171 additions and 34 deletions

View file

@ -2,6 +2,7 @@
import { ref, reactive, onMounted, nextTick, watch } from "vue";
import { useQuasar } from "quasar";
import { useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { useEditPosDataStore } from "@/modules/04_registryPerson/stores/Edit";
import http from "@/plugins/http";
@ -22,6 +23,7 @@ import DialogHeader from "@/components/DialogHeader.vue";
import FormPosition from "@/modules/04_registryPerson/views/edit/components/FormPosition.vue";
const $q = useQuasar();
const route = useRoute();
const {
dialogConfirm,
showLoader,
@ -32,10 +34,13 @@ const {
} = useCounterMixin();
const store = useEditPosDataStore();
const profileId = ref<string>(route.params.id.toString());
const modal = defineModel<boolean>("modal", { required: true });
const empType = defineModel<string>("empType", { required: true });
const rowData = defineModel<DataPosition[]>("rowData", { required: true });
const rowIndex = defineModel<number>("rowIndex", { required: true });
const isAddPosition = defineModel<boolean>("isAddPosition", { required: true });
const props = defineProps({
fetchData: { type: Function, required: true },
@ -56,6 +61,7 @@ const formData = reactive<FormDataSalary>({
positionLine: "", //
positionPathSide: "", ///
positionExecutive: "", //
positionExecutiveField: "", //
amount: null, //
amountSpecial: null, //
positionSalaryAmount: null, //
@ -84,6 +90,7 @@ const formReadonly = reactive<FormDataSalary>({
positionLine: "", //
positionPathSide: "", ///
positionExecutive: "", //
positionExecutiveField: "", //
amount: null, //
amountSpecial: null, //
positionSalaryAmount: null, //
@ -249,14 +256,10 @@ async function fetchDataOptionExecutive() {
* @param status แกไข , เพ
*/
async function updateSelectType(val: string, status: boolean = false) {
console.log(val);
console.log(dataLevel.value);
const listLevel = val
? dataLevel.value.find((e: DataPosType) => e.posTypeName === val)
: null;
console.log("เช็คประเภทตำแหน่งงาน", listLevel);
//
if (listLevel) {
store.posLevelData = listLevel.posLevels.map((e: DataPosLevel) => ({
@ -308,6 +311,7 @@ async function onDefineData(index: number) {
formData.positionLine = salaryNew.positionLine;
formData.positionPathSide = salaryNew.positionPathSide;
formData.positionExecutive = salaryNew.positionExecutive;
formData.positionExecutiveField = salaryNew.positionExecutiveField;
formData.amount = salaryNew.amount;
formData.amountSpecial = salaryNew.amountSpecial;
formData.positionSalaryAmount = salaryNew.positionSalaryAmount;
@ -335,6 +339,7 @@ async function onDefineData(index: number) {
formReadonly.positionLine = salaryOld.positionLine;
formReadonly.positionPathSide = salaryOld.positionPathSide;
formReadonly.positionExecutive = salaryOld.positionExecutive;
formReadonly.positionExecutiveField = salaryOld.positionExecutiveField;
formReadonly.amount = salaryOld.amount;
formReadonly.positionSalaryAmount = salaryOld.positionSalaryAmount;
formReadonly.mouthSalaryAmount = salaryOld.mouthSalaryAmount;
@ -357,31 +362,95 @@ async function onNavigateRow(action: string) {
function onClickCloseDialog() {
modal.value = false;
formData.commandCode = "";
formData.commandNo = "";
formData.commandYear = null;
formData.commandDateAffect = null;
formData.commandDateSign = null;
formData.posNoAbb = "";
formData.posNo = "";
formData.positionName = "";
formData.positionType = "";
formData.positionLevel = "";
formData.positionCee = "";
formData.positionLine = "";
formData.positionPathSide = "";
formData.positionExecutive = "";
formData.positionExecutiveField = "";
formData.amount = null;
formData.amountSpecial = null;
formData.positionSalaryAmount = null;
formData.mouthSalaryAmount = null;
formData.orgRoot = "";
formData.orgChild1 = "";
formData.orgChild2 = "";
formData.orgChild3 = "";
formData.orgChild4 = "";
formData.remark = "";
formData.posNumCodeSit = "";
formData.posNumCodeSitAbb = "";
formReadonly.commandCode = "";
formReadonly.commandNo = "";
formReadonly.commandYear = null;
formReadonly.commandDateAffect = null;
formReadonly.commandDateSign = null;
formReadonly.posNoAbb = "";
formReadonly.posNo = "";
formReadonly.positionName = "";
formReadonly.positionType = "";
formReadonly.positionLevel = "";
formReadonly.positionCee = "";
formReadonly.positionLine = "";
formReadonly.positionPathSide = "";
formReadonly.positionExecutive = "";
formReadonly.positionExecutiveField = "";
formReadonly.amount = null;
formReadonly.positionSalaryAmount = null;
formReadonly.mouthSalaryAmount = null;
formReadonly.orgRoot = "";
formReadonly.orgChild1 = "";
formReadonly.orgChild2 = "";
formReadonly.orgChild3 = "";
formReadonly.orgChild4 = "";
formReadonly.remark = "";
formReadonly.posNumCodeSit = "";
formReadonly.posNumCodeSitAbb = "";
}
function onSubmit() {
console.log(formData);
dialogConfirm($q, async () => {
showLoader();
await http
.patch(config.API.salaryTemp + `/${salaryId.value}`, {
...formData,
type: empType.value?.toLocaleUpperCase(),
commandDateAffect: convertDateToAPI(formData.commandDateAffect),
commandDateSign: convertDateToAPI(formData.commandDateSign),
amount: formData.amount
? Number(String(formData.amount)?.replace(/,/g, ""))
: null,
amountSpecial: formData.amountSpecial
? Number(String(formData.amountSpecial)?.replace(/,/g, ""))
: null,
positionSalaryAmount: formData.positionSalaryAmount
? Number(String(formData.positionSalaryAmount)?.replace(/,/g, ""))
: null,
mouthSalaryAmount: formData.mouthSalaryAmount
? Number(String(formData.mouthSalaryAmount)?.replace(/,/g, ""))
: null,
})
const path = isAddPosition.value
? config.API.salaryTemp
: config.API.salaryTemp + `/${salaryId.value}`;
const method = isAddPosition.value ? "post" : "patch";
await http[method](path, {
...formData,
profileId:
isAddPosition.value && empType.value === "officer"
? profileId.value
: undefined,
profileEmployeeId:
isAddPosition.value && empType.value !== "officer"
? profileId.value
: undefined,
type: empType.value?.toLocaleUpperCase(),
commandDateAffect: convertDateToAPI(formData.commandDateAffect),
commandDateSign: convertDateToAPI(formData.commandDateSign),
amount: formData.amount
? Number(String(formData.amount)?.replace(/,/g, ""))
: null,
amountSpecial: formData.amountSpecial
? Number(String(formData.amountSpecial)?.replace(/,/g, ""))
: null,
positionSalaryAmount: formData.positionSalaryAmount
? Number(String(formData.positionSalaryAmount)?.replace(/,/g, ""))
: null,
mouthSalaryAmount: formData.mouthSalaryAmount
? Number(String(formData.mouthSalaryAmount)?.replace(/,/g, ""))
: null,
})
.then(async () => {
await props.fetchData?.();
success($q, "บันทึกข้อมูลสำเร็จ");
@ -415,7 +484,7 @@ watch(modal, async (val) => {
posLineOptions.value = store.posLineData;
posPathSideOptions.value = store.posPathSideData;
posExecutiveOptions.value = store.posExecutiveData;
await onDefineData(rowIndex.value);
!isAddPosition.value && (await onDefineData(rowIndex.value));
hideLoader();
}
});
@ -426,17 +495,19 @@ onMounted(async () => {
</script>
<template>
<q-dialog v-model="modal" persistent full-width>
<q-card>
<q-dialog v-model="modal" persistent :full-width="!isAddPosition">
<q-card style="min-width: 50%">
<q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader
:tittle="'แก้ไขตำแหน่ง/เงินเดือน'"
:tittle="`${
isAddPosition ? 'เพิ่มตำแหน่ง/เงินเดือน' : 'แก้ไขตำแหน่ง/เงินเดือน'
}`"
:close="onClickCloseDialog"
/>
<q-separator />
<q-card-section style="padding: 0px">
<div class="col-12 row">
<div class="col-12 row" v-if="!isAddPosition">
<div class="col-xs-12 col-md-6 row no-wrap">
<div class="col-12 q-pa-md">
<q-card
@ -504,12 +575,29 @@ onMounted(async () => {
</div>
</div>
</div>
<div class="col-12 q-pa-md" v-else>
<FormPosition
:is-readonly="false"
v-model:form-data="formData"
v-model:command-code-options="commandCodeOptions"
v-model:pos-type-options="posTypeOptions"
v-model:pos-level-options="posLevelOptions"
v-model:pos-line-options="posLineOptions"
v-model:pos-path-side-options="posPathSideOptions"
v-model:pos-executive-options="posExecutiveOptions"
:emp-type="empType"
:update-select-type="updateSelectType"
:is-add-position="isAddPosition"
/>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right">
<q-btn
v-if="!isAddPosition"
flat
round
:disable="rowIndex === 0"
@ -521,6 +609,7 @@ onMounted(async () => {
</q-btn>
<q-btn
v-if="!isAddPosition"
flat
round
:disable="rowIndex + 1 === rowData.length"