updated kpi list & detail

This commit is contained in:
Warunee Tamkoo 2024-05-17 11:10:23 +07:00
parent 8c829c03bd
commit bd0835b0f1
32 changed files with 5970 additions and 2034 deletions

View file

@ -0,0 +1,258 @@
<script setup lang="ts">
import DialogHeader from "@/components/DialogHeader.vue";
import { ref, reactive, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useRoute } from "vue-router";
const props = defineProps({
getAll: Function,
});
const route = useRoute();
const idKpi = ref<string>(route.params.id.toLocaleString());
const $q = useQuasar();
const mixin = useCounterMixin();
const {
showLoader,
hideLoader,
dialogConfirm,
messageError,
success,
dialogMessageNotify,
} = mixin;
const modal = defineModel<boolean>("modal", { required: true });
const id = defineModel<string>("id", { required: true });
const formData = reactive({
name: "",
group: [],
target: "",
isDevelopment70: false,
isDevelopment20: false,
isDevelopment10: false,
achievement10: "มีผลการพัฒนาและมีการดำเนินการตามเป้าหมายการนำไปพัฒนางาน",
achievement5: "มีผลการพัฒนาแต่ยังไม่ได้ดำเนินการตามเป้าหมายการนำไปพัฒนางาน",
achievement0: "ไม่ได้ดำเนินการพัฒนา",
});
function close() {
modal.value = false;
id.value = "";
formData.name = "";
formData.group = [];
formData.target = "";
formData.isDevelopment70 = false;
formData.isDevelopment20 = false;
formData.isDevelopment10 = false;
formData.achievement10 =
"มีผลการพัฒนาและมีการดำเนินการตามเป้าหมายการนำไปพัฒนางาน";
formData.achievement5 =
"มีผลการพัฒนาแต่ยังไม่ได้ดำเนินการตามเป้าหมายการนำไปพัฒนางาน";
formData.achievement0 = "ไม่ได้ดำเนินการพัฒนา";
props.getAll?.();
}
function onSubmit() {
if (
formData.isDevelopment70 == false &&
formData.isDevelopment20 == false &&
formData.isDevelopment10 == false
) {
dialogMessageNotify($q, "กรุณาเลือกวิธีการพัฒนา อย่างน้อย 1 ตัวเลือก");
} else {
dialogConfirm($q, () => {
const url = id.value
? config.API.kpiAchievementDevelop + `/${id.value}`
: config.API.kpiAchievementDevelop;
const body = {
name: formData.name,
target: formData.target,
achievement10: formData.achievement10,
achievement5: formData.achievement5,
achievement0: formData.achievement0,
isDevelopment70: formData.isDevelopment70,
isDevelopment20: formData.isDevelopment20,
isDevelopment10: formData.isDevelopment10,
kpiUserEvaluationId: idKpi.value,
};
showLoader();
http[id.value ? "put" : "post"](url, body)
.then((res) => {
success($q, "บันทึกข้อมูลสำเร็จ");
close();
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
});
}
}
watch(
() => id.value,
(i) => {
if (i) {
showLoader();
http
.get(config.API.kpiAchievementDevelop + `/${id.value}`)
.then((res) => {
const data = res.data.result;
formData.name = data.name;
formData.group = data.group;
formData.target = data.target;
formData.isDevelopment70 = data.isDevelopment70;
formData.isDevelopment20 = data.isDevelopment20;
formData.isDevelopment10 = data.isDevelopment10;
formData.achievement10 = data.achievement10;
formData.achievement5 = data.achievement5;
formData.achievement0 = data.achievement0;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
}
);
</script>
<template>
<q-dialog persistent v-model="modal">
<q-card style="width: 80%">
<q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader
:tittle="`${id ? 'แก้ไข' : 'เพิ่ม'}การพัฒนาตนเอง`"
:close="close"
/>
<q-separator />
<q-card-section>
<div class="row q-col-gutter-sm">
<div class="col-12">
<q-input
v-model="formData.name"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกชื่อเรื่อง / เนื้อเรื่อง / หัวข้อการพัฒนา'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="ชื่อเรื่อง / เนื้อเรื่อง / หัวข้อการพัฒนา"
>
</q-input>
</div>
<div class="col-12">
<span class="text-weight-medium">การพฒนา</span>
</div>
<div class="column">
<q-checkbox
v-model="formData.isDevelopment70"
label="70 การลงมือปฏิบัติ (โดยผู้บังคับบัญชามอบหมาย)"
/>
<q-checkbox
v-model="formData.isDevelopment20"
label="20 การเรียนรู้จากผู้อื่น (Coach/Mentor/Consulting)"
/>
<q-checkbox
v-model="formData.isDevelopment10"
label="10 การฝึกอบรมอื่นๆ"
/>
</div>
<div class="col-12">
<q-input
label="เป้าหมายการนำไปพัฒนางาน"
v-model="formData.target"
outlined
type="textarea"
dense
class="inputgreen"
:rules="[(val:string) => !!val || `${'กรุณากรอกเป้าหมายการนำไปพัฒนางาน'}`,]"
lazy-rules
hide-bottom-space
></q-input>
</div>
<div class="col-12">
<q-card bordered>
<div class="bg-grey-2 row q-py-sm text-weight-bold col-12">
<div class="col-4 text-center">
<span>ระดบคะแนน</span>
</div>
<div class="col-8 text-start">
<span>เกณฑการประเม</span>
</div>
</div>
<div class="row q-pa-sm">
<div class="col-4 text-center self-start text-body1">
<span>10</span>
</div>
<div class="col-8">
<q-input
class="inputgreen"
v-model="formData.achievement10"
outlined
dense
label="เกณฑ์การประเมิน"
:rules="[(val:string) => !!val || `${'กรุณากรอกเกณฑ์การประเมิน'}`,]"
lazy-rules
hide-bottom-space
></q-input>
</div>
</div>
<q-separator />
<div class="row q-pa-sm bg-grey-2">
<div class="col-4 text-center self-start text-body1">
<span>5</span>
</div>
<div class="col-8">
<q-input
class="inputgreen"
v-model="formData.achievement5"
outlined
dense
label="เกณฑ์การประเมิน"
:rules="[(val:string) => !!val || `${'กรุณากรอกเกณฑ์การประเมิน'}`,]"
lazy-rules
hide-bottom-space
></q-input>
</div>
</div>
<q-separator />
<div class="row q-pa-sm">
<div class="col-4 text-center self-start text-body1">
<span>0</span>
</div>
<div class="col-8">
<q-input
class="inputgreen"
v-model="formData.achievement0"
outlined
dense
label="เกณฑ์การประเมิน"
:rules="[(val:string) => !!val || `${'กรุณากรอกเกณฑ์การประเมิน'}`,]"
lazy-rules
hide-bottom-space
></q-input>
</div>
</div>
</q-card>
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white text-teal">
<q-btn label="บันทึก" color="secondary" type="submit"
><q-tooltip>นทกขอม</q-tooltip></q-btn
>
</q-card-actions>
</q-form>
</q-card>
</q-dialog>
</template>