hrms-mgt/src/modules/18_command/components/Step/Dialog2_Salary.vue

267 lines
8.3 KiB
Vue
Raw Normal View History

2024-09-10 18:03:01 +07:00
<script setup lang="ts">
import { ref, reactive, watch, computed } from "vue";
2024-09-10 18:03:01 +07:00
import { useQuasar } from "quasar";
2024-09-25 17:49:50 +07:00
import http from "@/plugins/http";
import config from "@/app.config";
2024-09-10 18:03:01 +07:00
import { useCounterMixin } from "@/stores/mixin";
2024-10-15 18:14:38 +07:00
import { useCommandMainStore } from "@/modules/18_command/store/Main";
import { useCommandDetail } from "@/modules/18_command/store/DetailStore";
2024-09-10 18:03:01 +07:00
import DialogHeader from "@/components/DialogHeader.vue";
const $q = useQuasar();
2024-10-11 13:04:13 +07:00
const { showLoader, hideLoader, dialogConfirm, messageError, success } =
useCounterMixin();
2024-10-15 18:14:38 +07:00
const store = useCommandMainStore();
const storeDetail = useCommandDetail();
2024-09-10 18:03:01 +07:00
2024-09-25 17:49:50 +07:00
const props = defineProps({
getData: Function,
selectPersonData: Object,
2024-10-15 18:14:38 +07:00
type: {
type: String,
required: true,
},
commandCode: { type: String, required: true },
commandSysId: { type: String, required: true },
2024-09-25 17:49:50 +07:00
});
2024-09-10 18:03:01 +07:00
const modal = defineModel<boolean>("modal", { required: true });
const titleName = defineModel<string>("titleName", { required: true });
2024-09-25 17:49:50 +07:00
const commandEditRecive = defineModel<string>("commandEditRecive", {
required: true,
});
2024-09-10 18:03:01 +07:00
2024-10-11 13:04:13 +07:00
const formData = reactive<any>({
amount: null,
positionSalaryAmount: null,
mouthSalaryAmount: null,
2024-09-10 18:03:01 +07:00
remarkVertical: null,
remarkHorizontal: null,
amountSpecial: null,
2024-09-10 18:03:01 +07:00
});
const readonly = ref<boolean>(false);
function checkCommandSysId() {
if (props.commandSysId === "SALARY") {
readonly.value = true;
}
}
const chechCommandCode = computed(() => {
const listCommandCode = [
"C-PM-01",
"C-PM-02",
"C-PM-03",
"C-PM-04",
2024-11-05 09:48:04 +07:00
"C-PM-05",
"C-PM-07",
"C-PM-08",
"C-PM-09",
"C-PM-21",
"C-PM-22",
"C-PM-24",
"C-PM-29",
2024-11-05 09:48:04 +07:00
"C-PM-38",
"C-PM-39",
];
if (listCommandCode.includes(props.commandCode)) {
return true;
} else {
return false;
}
});
2024-09-10 18:03:01 +07:00
function onSubmit() {
dialogConfirm($q, () => {
2024-10-11 13:04:13 +07:00
showLoader();
2024-09-25 17:49:50 +07:00
http
.put(config.API.commandEditRecive("tab2", commandEditRecive.value), {
2024-10-11 13:04:13 +07:00
mouthSalaryAmount:
typeof formData.monthSalaryAmount === "string"
? Number(formData.monthSalaryAmount?.replace(/,/g, ""))
: formData.monthSalaryAmount, //เงินเดือน
positionSalaryAmount:
typeof formData.positionSalaryAmount === "string"
? Number(formData.positionSalaryAmount?.replace(/,/g, ""))
: formData.positionSalaryAmount, //เงินประจำตำแหน่ง
amount:
typeof formData.amount === "string"
? Number(formData.amount?.replace(/,/g, ""))
: formData.amount, //เงินค่าตอบแทนรายเดือน
2024-09-26 11:21:26 +07:00
remarkVertical: formData.remarkVertical, //หมายเหตุแนวตั้ง
remarkHorizontal: formData.remarkHorizontal, //หมายเหตุแนวนอน
2024-09-25 17:49:50 +07:00
})
2024-10-11 13:04:13 +07:00
.then(async () => {
await props.getData?.();
2024-09-25 17:49:50 +07:00
success($q, "บันทึกข้อมูลสำเร็จ");
onClose();
})
.catch((e) => {
messageError($q, e);
})
2024-10-11 13:04:13 +07:00
.finally(() => {
hideLoader();
});
2024-09-10 18:03:01 +07:00
});
}
function onClose() {
modal.value = false;
2024-10-11 13:04:13 +07:00
formData.amount = null;
formData.positionSalaryAmount = null;
formData.monthSalaryAmount = null;
2024-09-10 18:03:01 +07:00
formData.remarkVertical = null;
formData.remarkHorizontal = null;
}
2024-09-25 17:49:50 +07:00
/**
* class ดรปแบบแสดงระหวางขอมลทแกไขหรอแสดงเฉยๆ
* @param val อม input สำหรบแกไขหรอไม
*/
const getClass = (val: boolean) => {
return {
"full-width inputgreen cursor-pointer": val,
"full-width cursor-pointer": !val,
};
};
2024-09-25 17:49:50 +07:00
watch(
() => modal.value,
() => {
if (modal.value) {
if (props.selectPersonData) {
checkCommandSysId();
2024-09-25 17:49:50 +07:00
const list = props.selectPersonData;
2024-10-11 13:04:13 +07:00
formData.amount = list.amount;
2024-09-25 17:49:50 +07:00
formData.positionSalaryAmount = list.positionSalaryAmount;
2024-10-11 13:04:13 +07:00
formData.monthSalaryAmount = list.mouthSalaryAmount;
2024-09-25 17:49:50 +07:00
formData.remarkVertical = list.remarkVertical;
formData.remarkHorizontal = list.remarkHorizontal;
}
}
}
);
2024-09-10 18:03:01 +07:00
</script>
<template>
<q-dialog v-model="modal" persistent>
2024-10-11 13:04:13 +07:00
<q-card style="min-width: 40vw">
2024-09-10 18:03:01 +07:00
<q-form q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader :tittle="titleName" :close="onClose" />
<q-separator />
<q-card-section>
<div class="row col-12 q-col-gutter-sm">
2024-10-15 18:14:38 +07:00
<div
class="row col-12 q-col-gutter-sm"
v-if="chechCommandCode || readonly"
2024-10-15 18:14:38 +07:00
>
<div
v-if="store.isShowSalary(type)"
class="col-xs-6 col-sm-6 col-md-6"
>
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="formData.amount"
:class="getClass(!readonly)"
mask="###,###,###,###,###,###"
reverse-fill-mask
:readonly="!storeDetail.isSalary"
:label="`${'เงินเดือน'}`"
:rules="[(val: any) => !!val || `${'กรุณากรอกเงินเดือน'}`]"
/>
</div>
<div
v-if="store.isShowSalary(type)"
class="col-xs-6 col-sm-6 col-md-6"
>
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="formData.amountSpecial"
:class="getClass(!readonly)"
:readonly="!storeDetail.isSalary"
mask="###,###,###,###,###,###"
reverse-fill-mask
:label="`${'เงินค่าตอบแทนพิเศษ'}`"
/>
</div>
<div
v-if="store.isShowSalary(type)"
class="col-xs-6 col-sm-6 col-md-6"
>
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="formData.positionSalaryAmount"
:class="getClass(!readonly)"
:readonly="!storeDetail.isSalary"
mask="###,###,###,###,###,###"
reverse-fill-mask
:label="`${'เงินประจำตำแหน่ง'}`"
/>
</div>
2024-09-10 18:03:01 +07:00
<div
v-if="store.isShowSalary(type)"
class="col-xs-6 col-sm-6 col-md-6"
>
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="formData.monthSalaryAmount"
:class="getClass(!readonly)"
:readonly="!storeDetail.isSalary"
mask="###,###,###,###,###,###"
reverse-fill-mask
:label="`${'เงินค่าตอบแทนรายเดือน'}`"
/>
</div>
2024-09-10 18:03:01 +07:00
</div>
2024-09-10 18:03:01 +07:00
<div class="col-xs-6 col-sm-6 col-md-12">
<q-input
dense
outlined
v-model="formData.remarkVertical"
label="หมายเหตุแนวตั้ง"
type="textarea"
2024-10-11 13:04:13 +07:00
rows="5"
2024-09-10 18:03:01 +07:00
class="inputgreen"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-12">
<q-input
dense
outlined
v-model="formData.remarkHorizontal"
type="textarea"
label="หมายเหตุแนวนอน"
2024-10-11 13:04:13 +07:00
rows="5"
2024-09-10 18:03:01 +07:00
class="inputgreen"
/>
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right">
<q-btn label="บันทึก" color="public" type="submit">
<q-tooltip>นท</q-tooltip>
</q-btn>
</q-card-actions>
</q-form>
</q-card>
</q-dialog>
</template>
<style scoped></style>