kpi updated

This commit is contained in:
Warunee Tamkoo 2024-05-14 23:48:29 +07:00
parent 56a38622e5
commit 6c532a0202
8 changed files with 266 additions and 182 deletions

View file

@ -29,18 +29,16 @@ const {
success,
} = useCounterMixin();
const isReadonly = <boolean>(route.name === "KPIEditEvaluator" ? true : false);
const title = defineModel<string>("title", { required: true });
const rows = defineModel<any>("data", { required: true });
const numpage = defineModel<number>("page", { required: true });
const evaluationTotal = defineModel<number>("total", { required: true });
const props = defineProps({
fetchList: { type: Function, required: true },
});
const visibleColumns = ref<string[]>(
store.tabOpen === 3
store.tabOpen === 3 && store.tabMain === "3"
? [
"includingName",
"target",
@ -143,7 +141,7 @@ function onClickView(id: string) {
modalViewInfo.value = true;
}
function onEvaluate() {
async function onEvaluate() {
modalEvaluate.value = true;
}
@ -198,6 +196,28 @@ watch(
}
);
const isEditStep1 = computed(() => {
return (
(store.dataEvaluation.evaluationStatus === "NEW" &&
store.rolePerson === "USER" &&
store.tabMain === "1") ||
(store.dataEvaluation.evaluationStatus === "NEW_EVALUATOR" &&
store.rolePerson === "EVALUATOR" &&
store.tabMain === "1")
);
});
const isEditStep3 = computed(() => {
return (
(store.dataEvaluation.evaluationStatus === "EVALUATING" &&
store.rolePerson === "USER" &&
store.tabMain === "3") ||
(store.dataEvaluation.evaluationStatus === "EVALUATING_EVALUATOR" &&
store.rolePerson === "EVALUATOR" &&
store.tabMain === "3")
);
});
// watch(
// () => modalAssigned.value,
// () => {
@ -216,6 +236,7 @@ watch(
// }
// );
</script>
<template>
<q-card bordered style="border-radius: 5px" class="no-shadow">
<q-card-section class="bg-grey-2 q-py-sm">
@ -223,10 +244,7 @@ watch(
<div class="col">
<span class="text-weight-medium">{{ title }}</span>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
v-if="isEditStep1"
class="q-ml-xs"
flat
round
@ -241,10 +259,7 @@ watch(
</div>
<div class="col-auto">
<q-btn
v-if="
store.rolePerson === 'USER' &&
store.dataEvaluation.evaluationStatus === 'EVALUATING'
"
v-if="isEditStep3"
flat
round
icon="mdi-clipboard-check-outline"
@ -388,13 +403,7 @@ watch(
</q-btn>
</div>
<div
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER' &&
store.tabMain === '1'
"
>
<div v-if="isEditStep1">
<q-btn
flat
round
@ -408,10 +417,6 @@ watch(
</q-btn>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
flat
round
icon="delete"
@ -448,6 +453,7 @@ watch(
v-model:modal="modalEvaluate"
:data="rows"
:numpage="numpage"
:fetchList="fetchList"
/>
<DialogViewInfo

View file

@ -2,6 +2,8 @@
import { onMounted, ref, computed, watch } from "vue";
import Dialog from "@/modules/08_KPI/components/Tab/Dialog/04_FormCompetency.vue";
import DialogEvaluate from "@/modules/08_KPI/components/Tab/DialogEvaluate/02_Competenct.vue";
import DialogProgress from "@/modules/08_KPI/components/Tab/Dialog/DialogCommentProgress.vue";
import DialogProblem from "@/modules/08_KPI/components/Tab/Dialog/DialogCommentProblem.vue";
import { useQuasar, type QTableProps } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
@ -104,7 +106,7 @@ const columns = ref<QTableProps["columns"]>([
]);
const visibleColumns = ref<string[]>(
store.tabOpen === 3
store.tabOpen === 3 && store.tabMain === "3"
? ["name", "level", "point", "weight", "summary"]
: ["name", "level", "weight"]
);
@ -159,11 +161,18 @@ function getData(type: string) {
if (total > 0) {
let weightAvg = weight / total;
let resultAvg = result / total;
let sum =
weightAvg != 0
? (resultAvg / weightAvg) * store.dataEvaluation.capacityPoint
: 0;
// resultEvaluation.value = sum.toFixed(2);
if (store.dataProfile.posExecutiveName != null) {
store.competencyScoreVal =
weightAvg != 0
? (resultAvg / weightAvg) * store.excusiveCompetencyScore
: 0;
} else {
store.competencyScoreVal =
weightAvg != 0
? (resultAvg / weightAvg) * store.competencyScore
: 0;
}
}
});
}
@ -200,16 +209,41 @@ function onEvaluate(type: string) {
const modalProgress = ref<boolean>(false);
const modalProblem = ref<boolean>(false);
const type = ref<string>("");
function openPopupProgress() {
const idList = ref<string>("");
function openPopupProgress(id: string) {
modalProgress.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
type.value = "capacity";
idList.value = id;
}
function openPopupProblem() {
function openPopupProblem(id: string) {
modalProblem.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
type.value = "capacity";
idList.value = id;
}
const isEditStep1 = computed(() => {
return (
(store.dataEvaluation.evaluationStatus === "NEW" &&
store.rolePerson === "USER" &&
store.tabMain === "1") ||
(store.dataEvaluation.evaluationStatus === "NEW_EVALUATOR" &&
store.rolePerson === "EVALUATOR" &&
store.tabMain === "1")
);
});
const isEditStep3 = computed(() => {
return (
(store.dataEvaluation.evaluationStatus === "EVALUATING" &&
store.rolePerson === "USER" &&
store.tabMain === "3") ||
(store.dataEvaluation.evaluationStatus === "EVALUATING_EVALUATOR" &&
store.rolePerson === "EVALUATOR" &&
store.tabMain === "3")
);
});
watch(
() => store.dataEvaluation.capacityPoint,
(newValue, oldValue) => {
@ -238,10 +272,7 @@ onMounted(() => {
<div class="col">
<span class="text-weight-medium">{{ item.name }}</span>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
v-if="isEditStep1"
class="q-ml-xs"
flat
round
@ -257,7 +288,7 @@ onMounted(() => {
<q-space />
<q-btn
v-if="store.dataEvaluation.evaluationStatus == 'EVALUATING'"
v-if="isEditStep3"
flat
round
icon="mdi-clipboard-check-outline"
@ -366,7 +397,7 @@ onMounted(() => {
color="blue-6"
size="12px"
dense
@click="openPopupProgress()"
@click="openPopupProgress(props.row.id)"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
@ -378,19 +409,13 @@ onMounted(() => {
size="12px"
dense
main="problem"
@click="openPopupProblem()"
@click="openPopupProblem(props.row.id)"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
</div>
<div
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER' &&
store.tabMain === '1'
"
>
<div v-if="isEditStep1">
<q-btn
flat
round
@ -401,10 +426,6 @@ onMounted(() => {
<q-tooltip>แกไข </q-tooltip>
</q-btn>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
flat
round
icon="delete"
@ -437,7 +458,16 @@ onMounted(() => {
:get-data="getData"
/>
<DialogProgress
v-model:modal="modalProgress"
v-model:type="type"
:idList="idList"
/>
<DialogProblem
v-model:modal="modalProblem"
v-model:type="type"
:idList="idList"
/>
</template>
<style scoped>

View file

@ -2,6 +2,8 @@
import { onMounted, ref, computed, watch, reactive } from "vue";
import DialogDevelop from "@/modules/08_KPI/components/Tab/Dialog/DialogDevelop.vue";
import DialogEvalutionDevelop from "@/modules/08_KPI/components/Tab/DialogEvaluate/03_DialogEvalutionDevelop.vue";
import DialogProgress from "@/modules/08_KPI/components/Tab/Dialog/DialogCommentProgress.vue";
import DialogProblem from "@/modules/08_KPI/components/Tab/Dialog/DialogCommentProblem.vue";
import { useQuasar, type QTableProps } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
@ -94,7 +96,7 @@ const columns = ref<QTableProps["columns"]>([
]);
const visibleColumns = ref<string[]>(
store.tabOpen === 3
store.tabOpen === 3 && store.tabMain === "3"
? ["name", "develop", "target", "achievement", "summary"]
: ["name", "develop", "target"]
);
@ -114,6 +116,11 @@ function getDevelop() {
.then((res) => {
const data = res.data.result;
rows.value = data;
store.devScoreVal = rows.value.reduce(
(sum: number, e: any) => sum + e.summary,
0
);
});
}
@ -142,16 +149,42 @@ function onDelete(id: string) {
const modalProgress = ref<boolean>(false);
const modalProblem = ref<boolean>(false);
const type = ref<string>("");
function openPopupProgress() {
const idList = ref<string>("");
function openPopupProgress(id: string) {
modalProgress.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
type.value = "develop";
idList.value = id;
}
function openPopupProblem() {
function openPopupProblem(id: string) {
modalProblem.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
type.value = "develop";
idList.value = id;
}
const isEditStep1 = computed(() => {
return (
(store.dataEvaluation.evaluationStatus === "NEW" &&
store.rolePerson === "USER" &&
store.tabMain === "1") ||
(store.dataEvaluation.evaluationStatus === "NEW_EVALUATOR" &&
store.rolePerson === "EVALUATOR" &&
store.tabMain === "1")
);
});
const isEditStep3 = computed(() => {
return (
(store.dataEvaluation.evaluationStatus === "EVALUATING" &&
store.rolePerson === "USER" &&
store.tabMain === "3") ||
(store.dataEvaluation.evaluationStatus === "EVALUATING_EVALUATOR" &&
store.rolePerson === "EVALUATOR" &&
store.tabMain === "3")
);
});
onMounted(() => {
getDevelop();
});
@ -164,10 +197,7 @@ onMounted(() => {
<div class="col">
<span class="text-weight-medium">การพฒนาตนเอง</span>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
v-if="isEditStep1"
class="q-ml-xs"
flat
round
@ -183,10 +213,7 @@ onMounted(() => {
<q-space />
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
v-if="isEditStep3"
flat
round
icon="mdi-clipboard-check-outline"
@ -300,7 +327,7 @@ onMounted(() => {
color="blue-6"
size="12px"
dense
@click="openPopupProgress()"
@click="openPopupProgress(props.row.id)"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
@ -312,19 +339,13 @@ onMounted(() => {
size="12px"
dense
main="problem"
@click="openPopupProblem()"
@click="openPopupProblem(props.row.id)"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
</div>
<div
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER' &&
store.tabMain === '2'
"
>
<div v-if="isEditStep1">
<q-btn
flat
round
@ -362,6 +383,17 @@ onMounted(() => {
v-model:data="rows"
:get-all="getDevelop"
/>
<DialogProgress
v-model:modal="modalProgress"
v-model:type="type"
:idList="idList"
/>
<DialogProblem
v-model:modal="modalProblem"
v-model:type="type"
:idList="idList"
/>
</template>
<style scoped>