hrms-mgt/src/components/Workflow/DialogApprove.vue

170 lines
4.8 KiB
Vue
Raw Normal View History

2024-10-15 16:16:59 +07:00
<script setup lang="ts">
2024-10-16 18:11:38 +07:00
import { ref, watch } from "vue";
import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
2024-10-16 18:11:38 +07:00
import http from "@/plugins/http";
import config from "@/app.config";
2024-10-15 16:16:59 +07:00
import DialogHeader from "@/components/DialogHeader.vue";
const $q = useQuasar();
2024-10-16 18:11:38 +07:00
const { dialogConfirm, showLoader, hideLoader, messageError } =
useCounterMixin();
2024-10-15 16:16:59 +07:00
const modal = defineModel<boolean>("modal", { required: true });
2024-10-16 18:11:38 +07:00
const { stateId } = defineProps({
stateId: { type: String, require: true },
});
2024-10-15 16:16:59 +07:00
2024-10-16 18:11:38 +07:00
const isAcceptSetting = ref<boolean>(false);
const isApproveSetting = ref<boolean>(false);
const isReasonSetting = ref<boolean>(false);
2024-10-15 16:16:59 +07:00
2024-10-16 18:11:38 +07:00
const isAccept = ref<boolean>(false);
const isApprove = ref<string>("");
const reason = ref<string>("");
async function fetchData() {
showLoader();
await http
.post(config.API.workflow + `comment-state-user`, { stateId: stateId })
.then(async (res) => {
const data = res.data.result;
isAcceptSetting.value = data.isAcceptSetting;
isApproveSetting.value = data.isApproveSetting;
isReasonSetting.value = data.isReasonSetting;
isAccept.value = data.isAccept;
isApprove.value = data.isApprove ? "approve" : "";
reason.value = data.reason;
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
function onSubmit() {
2024-10-16 18:11:38 +07:00
dialogConfirm($q, async () => {
showLoader();
await http
.post(config.API.workflow + `comment`, {
stateId: stateId,
isAccept: isAcceptSetting.value ? isAccept.value : undefined,
isApprove: isApproveSetting.value
? isApprove.value === "approve"
? true
: false
: undefined,
reason: isReasonSetting.value ? reason.value : undefined,
})
.then(async () => {
onCloseModal();
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
});
}
2024-10-15 16:16:59 +07:00
function onCloseModal() {
modal.value = false;
2024-10-16 18:11:38 +07:00
isAccept.value = false;
isApprove.value = "";
reason.value = "";
2024-10-15 16:16:59 +07:00
}
2024-10-16 18:11:38 +07:00
watch(modal, (val) => {
if (val) {
fetchData();
}
});
2024-10-15 16:16:59 +07:00
</script>
2024-10-15 12:37:38 +07:00
<template>
2024-10-15 16:16:59 +07:00
<q-dialog v-model="modal" persistent>
<q-card style="min-width: 700px">
<q-form q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader
:tittle="`รับทราบ/พิจารณา/แสดงความเห็น`"
:close="onCloseModal"
/>
<q-separator />
<q-card-section>
<div class="q-gutter-xs">
2024-10-16 18:11:38 +07:00
<div v-if="isAcceptSetting">
2024-10-15 16:16:59 +07:00
<q-checkbox
keep-color
color="primary"
dense
2024-10-16 18:11:38 +07:00
v-model="isAccept"
label="รับทราบ"
2024-10-15 16:16:59 +07:00
/>
</div>
2024-10-16 18:11:38 +07:00
<div v-if="!isAcceptSetting && isApproveSetting">
<div class="text-weight-bold">จารณา (อน/ไมอน)</div>
<div class="q-pa-sm q-gutter-sm">
<q-radio
dense
keep-color
color="primary"
2024-10-16 18:11:38 +07:00
v-model="isApprove"
label="อนุมัติ"
val="approve"
/>
<q-radio
dense
keep-color
color="primary"
2024-10-16 18:11:38 +07:00
v-model="isApprove"
label="ไม่อนุมัติ"
val="reject"
/>
</div>
2024-10-15 16:16:59 +07:00
</div>
2024-10-16 18:11:38 +07:00
<div v-if="!isAcceptSetting && isReasonSetting">
<div class="text-weight-bold">แสดงความเหนในเอกสาร</div>
<div class="q-pa-sm q-gutter-sm">
<div class="col-12">
<q-input
dense
outlined
label="ความเห็น"
2024-10-16 18:11:38 +07:00
v-model="reason"
type="textarea"
lazy-rules
:rules="[
(val:string) => !!val || `${'กรุณากรอกความเห็น'}`,
]"
hide-bottom-space
/>
</div>
</div>
2024-10-15 16:16:59 +07:00
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right">
<q-btn
label="บันทึก"
2024-10-15 16:16:59 +07:00
color="public"
type="submit"
2024-10-16 18:11:38 +07:00
:disable="!isAcceptSetting && !isApproveSetting && !isReasonSetting"
2024-10-15 16:16:59 +07:00
>
</q-btn>
</q-card-actions>
</q-form>
</q-card>
</q-dialog>
2024-10-15 12:37:38 +07:00
</template>