This commit is contained in:
Warunee Tamkoo 2024-05-13 18:05:47 +07:00
parent f453b95f32
commit c3cc2e0aeb
7 changed files with 484 additions and 168 deletions

View file

@ -218,6 +218,41 @@ onMounted(() => {
:fetchList="fetchListPlanned"
:total="totalResults1"
/>
<q-table
flat
dense
bordered
:rows="[
{
name: 'รวมผลการประเมิน (ร้อยละ)',
value: store.excusiveIndicator1PercentVal,
},
{
name: 'ผลการประเมินมิติที่ 1 (คะแนน)',
value: store.excusiveIndicator1ScoreVal,
},
]"
:columns="[
{
name: 'name',
field: 'name',
label: 'name',
style: 'font-size: 14px',
},
{
name: 'value',
field: 'value',
label: 'value',
style: 'font-size: 14px; font-weight: bold',
},
]"
row-key="name"
hide-header
hide-bottom
class="q-mt-xs q-mb-md"
/>
<Work
v-model:data="rows_03"
:title="`มิติที่ 2 วาระเร่งด่วนที่ได้รับมอบหมายพิเศษ (ถ้ามี)`"
@ -225,6 +260,54 @@ onMounted(() => {
:fetchList="fetchAssigned"
:total="totalResults3"
/>
<q-table
flat
dense
bordered
:rows="[
{
name: 'รวมผลการประเมิน (ร้อยละ)',
value: store.excusiveIndicator2PercentVal,
},
{
name: 'ผลการประเมินมิติที่ 2 (คะแนน)',
value: store.excusiveIndicator2ScoreVal,
},
]"
:columns="[
{
name: 'name',
field: 'name',
label: 'name',
style: 'font-size: 14px',
},
{
name: 'value',
field: 'value',
label: 'value',
style: 'font-size: 14px; font-weight: bold',
},
]"
row-key="name"
hide-header
hide-bottom
class="q-mt-xs q-mb-md"
/>
<div class="row text-body2 text-weight-bold">
<div class="col-12 text-center row justify-center">
<span
>สรปผลการประเมนผลสมฤทธของงาน ( 1 + 2)
(คะแนนเต
{{ store.excusiveIndicatorScore }}
คะแนน)</span
>
<div class="text-primary q-pl-md">
{{ store.indicatorScoreVal }}
</div>
</div>
</div>
</div>
<div v-else>
@ -249,25 +332,48 @@ onMounted(() => {
:fetchList="fetchAssigned"
:total="totalResults3"
/>
</div>
<div class="row text-body2 text-weight-bold">
<!-- <div class="col-6 text-center row justify-center">
<span>รวมผลการประเม (อยละ) 100</span>
<div class="text-primary q-pl-md">{{ total }}</div>
</div> -->
<q-table
flat
dense
bordered
:rows="[
{
name: 'รวมผลการประเมิน (ร้อยละ)',
value: store.indicatorPercentVal,
},
]"
:columns="[
{
name: 'name',
field: 'name',
label: 'name',
style: 'font-size: 14px',
},
{
name: 'value',
field: 'value',
label: 'value',
style: 'font-size: 14px; font-weight: bold',
},
]"
row-key="name"
hide-header
hide-bottom
class="q-mt-xs q-mb-md"
/>
<div class="col-12 text-center row justify-center">
<span
>สรปผลการประเมนผลสมฤทธของงาน (คะแนนเต
{{
store.dataEvaluation.plannedPoint +
store.dataEvaluation.rolePoint +
store.dataEvaluation.specialPoint
}}
คะแนน)</span
>
<div class="text-primary q-pl-md">{{ resultWork }}</div>
<div class="row text-body2 text-weight-bold">
<div class="col-12 text-center row justify-center">
<span
>สรปผลการประเมนผลสมฤทธของงาน (คะแนนเต
{{ store.indicatorScore }}
คะแนน)</span
>
<div class="text-primary q-pl-md">
{{ store.indicatorScoreVal }}
</div>
</div>
</div>
</div>
@ -291,14 +397,98 @@ onMounted(() => {
<Competency v-model:dataListCriteria="dataListCriteria" />
<Develop />
<q-table
flat
dense
bordered
:rows="[
{
name: `สรุปผลการประเมินสมรรถนะ (คะแนนเต็ม ${
!store.dataProfile.posExecutiveName
? store.competencyScore
: store.excusiveCompetencyScore
} คะแนน)`,
value: store.competencyScoreVal,
},
]"
:columns="[
{
name: 'name',
field: 'name',
label: 'name',
style: 'font-size: 14px',
},
{
name: 'value',
field: 'value',
label: 'value',
style: 'font-size: 14px; font-weight: bold',
},
]"
row-key="name"
hide-header
hide-bottom
class="q-mt-xs q-mb-md"
/>
<div class="row text-body2 text-weight-bold justify-center">
<span
>สรปผลการประเมนสมรรถนะ (คะแนนเต
{{ store.competencyScore }} คะแนน)</span
>
<div class="text-primary q-pl-md">{{ store.competencyScoreVal }}</div>
<div v-if="!store.dataProfile.posExecutiveName">
<Develop />
<q-table
flat
dense
bordered
:rows="[
{
name: `ผลการประเมินการพัฒนาตนเอง (คะแนนเต็ม ${store.devScore} คะแนน)`,
value: store.devScoreVal,
},
]"
:columns="[
{
name: 'name',
field: 'name',
label: 'name',
style: 'font-size: 14px',
},
{
name: 'value',
field: 'value',
label: 'value',
style: 'font-size: 14px; font-weight: bold',
},
]"
row-key="name"
hide-header
hide-bottom
class="q-mt-xs q-mb-md"
/>
</div>
<div
v-if="!store.dataProfile.posExecutiveName"
class="row text-body2 text-weight-bold"
>
<div class="col-12 text-center row justify-center">
<span
>สรปผลการประเมนพฤตกรรมการปฏราชการ (สมรรถนะ+การพฒนาตนเอง)
(คะแนนเต {{ store.competencyDevScore }} คะแนน)</span
>
<div class="text-primary q-pl-md">
{{ store.competencyDevScoreVal }}
</div>
</div>
</div>
<div v-else class="row text-body2 text-weight-bold">
<div class="col-12 text-center row justify-center">
<span
>สรปผลการประเมนพฤตกรรมการปฏราชการ (สมรรถนะ) (คะแนนเต
{{ store.competencyScore }} คะแนน)</span
>
<div class="text-primary q-pl-md">
{{ store.competencyScoreVal }}
</div>
</div>
</div>
</div>
</q-scroll-area>

View file

@ -11,6 +11,8 @@ import Dialog from "@/modules/08_KPI/components/Tab/Dialog/01_FormIndicator.vue"
import Dialog03 from "@/modules/08_KPI/components/Tab/Dialog/03_FormIndicatorSpecial.vue";
import DialogEvaluate from "@/modules/08_KPI/components/Tab/DialogEvaluate/01_Indicator.vue";
import DialogViewInfo from "@/modules/08_KPI/components/Tab/Dialog/DialogViewInfo.vue";
import DialogProgress from "@/modules/08_KPI/components/Tab/Dialog/DialogCommentProgress.vue";
import DialogProblem from "@/modules/08_KPI/components/Tab/Dialog/DialogCommentProblem.vue";
import { useCounterMixin } from "@/stores/mixin";
import { useKpiDataStore } from "@/modules/08_KPI/store";
@ -171,14 +173,20 @@ 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 =
numpage.value === 1 ? "plan" : numpage.value === 2 ? "role" : "special";
idList.value = id;
}
function openPopupProblem() {
function openPopupProblem(id: string) {
modalProblem.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
type.value =
numpage.value === 1 ? "plan" : numpage.value === 2 ? "role" : "special";
idList.value = id;
}
watch(
@ -349,14 +357,15 @@ watch(
</div>
</q-td>
<td>
<!-- <div v-if="store.dataEvaluation.evaluationStatus == 'APPROVE'"> -->
<q-btn
flat
round
icon="note"
color="blue-5"
icon="mdi-developer-board"
color="blue-6"
size="12px"
dense
@click="openPopupProgress()"
@click="openPopupProgress(props.row.id)"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
@ -367,44 +376,47 @@ watch(
color="red-5"
size="12px"
dense
:type="data ? 'plan' : data ? 'role' : 'special'"
main="problem"
@click="openPopupProblem()"
@click="openPopupProblem(props.row.id)"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
<!-- </div> -->
<q-btn
<div
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
flat
round
icon="edit"
color="edit"
size="12px"
dense
@click="onAdd(true, props.row.id)"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<q-btn
flat
round
icon="edit"
color="edit"
size="12px"
dense
@click="onAdd(true, props.row.id)"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
flat
round
icon="delete"
color="red"
size="12px"
dense
@click="onDelete(props.row.id)"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
flat
round
icon="delete"
color="red"
size="12px"
dense
@click="onDelete(props.row.id)"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</div>
</td>
</q-tr>
</template>
@ -438,7 +450,19 @@ watch(
:isStatusEdit="isStatusEdit"
:kpiUserPlannedId="kpiUserPlannedId"
/>
<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>
.custom-table2 {
max-height: 64vh;

View file

@ -197,6 +197,19 @@ function onEvaluate(type: string) {
modalEvaluate.value = true;
}
const modalProgress = ref<boolean>(false);
const modalProblem = ref<boolean>(false);
const type = ref<string>("");
function openPopupProgress() {
modalProgress.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
}
function openPopupProblem() {
modalProblem.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
}
watch(
() => store.dataEvaluation.capacityPoint,
(newValue, oldValue) => {
@ -345,30 +358,62 @@ onMounted(() => {
{{ col.value }}
</div>
</q-td>
<q-td
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
>
<q-btn
flat
round
icon="edit"
color="edit"
@click.stop.pervent="onEdit(props.row, item.id)"
<q-td>
<div v-if="store.dataEvaluation.evaluationStatus == 'APPROVE'">
<q-btn
flat
round
icon="mdi-developer-board"
color="blue-6"
size="12px"
dense
@click="openPopupProgress()"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
<q-btn
flat
round
icon="warning"
color="red-5"
size="12px"
dense
main="problem"
@click="openPopupProblem()"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
</div>
<div
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
>
<q-tooltip>แกไข </q-tooltip>
</q-btn>
<q-btn
flat
round
icon="delete"
color="red"
@click.stop.pervent="onDelete(props.row.id, item.id)"
>
<q-tooltip>ลบขอม </q-tooltip>
</q-btn>
<q-btn
flat
round
icon="edit"
color="edit"
@click.stop.pervent="onEdit(props.row, item.id)"
>
<q-tooltip>แกไข </q-tooltip>
</q-btn>
<q-btn
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
flat
round
icon="delete"
color="red"
@click.stop.pervent="onDelete(props.row.id, item.id)"
>
<q-tooltip>ลบขอม </q-tooltip>
</q-btn>
</div>
</q-td>
</q-tr>
</template>

View file

@ -139,6 +139,19 @@ function onDelete(id: string) {
});
}
const modalProgress = ref<boolean>(false);
const modalProblem = ref<boolean>(false);
const type = ref<string>("");
function openPopupProgress() {
modalProgress.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
}
function openPopupProblem() {
modalProblem.value = true;
type.value = rows.value ? "plan" : rows.value ? "role" : "special";
}
onMounted(() => {
getDevelop();
});
@ -273,30 +286,58 @@ onMounted(() => {
{{ col.value ? col.value : "-" }}
</div>
</q-td>
<q-td
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
>
<q-btn
flat
round
icon="edit"
color="edit"
@click.stop.pervent="onEdit(props.row.id)"
<q-td>
<div v-if="store.dataEvaluation.evaluationStatus == 'APPROVE'">
<q-btn
flat
round
icon="mdi-developer-board"
color="blue-6"
size="12px"
dense
@click="openPopupProgress()"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
<q-btn
flat
round
icon="warning"
color="red-5"
size="12px"
dense
main="problem"
@click="openPopupProblem()"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
</div>
<div
v-if="
store.dataEvaluation.evaluationStatus === 'NEW' &&
store.rolePerson === 'USER'
"
>
<q-tooltip>แกไข </q-tooltip>
</q-btn>
<q-btn
flat
round
icon="delete"
color="red"
@click.stop.pervent="onDelete(props.row.id)"
>
<q-tooltip>ลบขอม </q-tooltip>
</q-btn>
<q-btn
flat
round
icon="edit"
color="edit"
@click.stop.pervent="onEdit(props.row.id)"
>
<q-tooltip>แกไข </q-tooltip>
</q-btn>
<q-btn
flat
round
icon="delete"
color="red"
@click.stop.pervent="onDelete(props.row.id)"
>
<q-tooltip>ลบขอม </q-tooltip>
</q-btn>
</div>
</q-td>
</q-tr>
</template>

View file

@ -48,8 +48,8 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
});
const dataEvaluation = ref<any>({
evaluationReqEdit: "NEW",
evaluationStatus: "NEW",
evaluationReqEdit: null,
evaluationStatus: null,
profileId: null,
evaluatorId: null,
commanderId: null,
@ -133,6 +133,7 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
const position = dataProfile.value.position;
const posTypeName = dataProfile.value.posTypeName;
const posLevelName = dataProfile.value.posLevelName;
const executiveName = dataProfile.value.posExecutiveName;
if (
position == "ผู้ตรวจราชการกรุงเทพมหานคร" ||
@ -146,33 +147,42 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
(x: DataOptions) => x.id == "HEAD" || x.id == "DIRECTOR"
);
} else {
switch (posTypeName + " " + posLevelName) {
// case "ทั่วไป ปฏิบัติงาน":
// case "ทั่วไป ชำนาญงาน":
// case "ทั่วไป อาวุโส":
// case "วิชาการ ปฏิบัติการ":
// case "วิชาการ ชำนาญการ":
// case "วิชาการ ชำนาญการพิเศษ":
// case "วิชาการ เชี่ยวชาญ":
// case "วิชาการ ทรงคุณวุฒิ":
// competencyType.value = competencyType.value.filter(
// (x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
// );
// break;
case "อำนวยการ ต้น":
case "อำนวยการ สูง":
case "บริหาร ต้น":
case "บริหาร สูง":
competencyType.value = competencyType.value.filter(
(x: DataOptions) => x.id == "HEAD" || x.id == "EXECUTIVE"
);
break;
default:
competencyType.value = competencyType.value.filter(
(x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
);
break;
if (executiveName == null) {
competencyType.value = competencyType.value.filter(
(x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
);
} else {
competencyType.value = competencyType.value.filter(
(x: DataOptions) => x.id == "HEAD" || x.id == "EXECUTIVE"
);
}
// switch (posTypeName + " " + posLevelName) {
// // case "ทั่วไป ปฏิบัติงาน":
// // case "ทั่วไป ชำนาญงาน":
// // case "ทั่วไป อาวุโส":
// // case "วิชาการ ปฏิบัติการ":
// // case "วิชาการ ชำนาญการ":
// // case "วิชาการ ชำนาญการพิเศษ":
// // case "วิชาการ เชี่ยวชาญ":
// // case "วิชาการ ทรงคุณวุฒิ":
// // competencyType.value = competencyType.value.filter(
// // (x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
// // );
// // break;
// case "อำนวยการ ต้น":
// case "อำนวยการ สูง":
// case "บริหาร ต้น":
// case "บริหาร สูง":
// competencyType.value = competencyType.value.filter(
// (x: DataOptions) => x.id == "HEAD" || x.id == "EXECUTIVE"
// );
// break;
// default:
// competencyType.value = competencyType.value.filter(
// (x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
// );
// break;
// }
}
}

View file

@ -12,6 +12,7 @@ import { useKpiDataStore } from "@/modules/08_KPI/store";
import DialogHeader from "@/components/DialogHeader.vue";
import type { FormProfile } from "@/modules/08_KPI/interface/request/index";
import type { DataOptions } from "@/modules/08_KPI/interface/index/Main";
import { aW } from "@fullcalendar/core/internal-common";
const scoreTotal = ref<boolean>(false);
const modalScore = ref<boolean>(false);
@ -65,8 +66,8 @@ const formProfile = reactive<FormProfile>({
const router = useRouter();
function fetchEvaluation() {
http
async function fetchEvaluation() {
await http
.get(config.API.kpiEvaluation + `/${id.value}`)
.then((res) => {
const data = res.data.result;
@ -93,13 +94,12 @@ function fetchEvaluation() {
function getProfile() {
http
.get(config.API.profilePosition())
.then((res) => {
const data = res.data.result;
.then(async (res) => {
const data = await res.data.result;
store.dataProfile = await data;
store.dataProfile = data;
store.checkCompetency();
store.checkCompetencyDefaultCompetencyLevel();
store.checkStep();
await store.checkCompetency();
await store.checkCompetencyDefaultCompetencyLevel();
})
.catch((e) => {
messageError($q, e);
@ -251,27 +251,27 @@ watch(
}
);
function onSubmitScore() {
showLoader();
http
.put(config.API.kpiScoreTotal() + `/${id.value}`, {
plannedPoint: plannedPoint.value,
rolePoint: rolePoint.value,
specialPoint: specialPoint.value,
capacityPoint: capacityPoint.value,
})
.then(async (res) => {
await fetchEvaluation();
success($q, "บันทึกสำเร็จ");
modalScore.value = false;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
// function onSubmitScore() {
// showLoader();
// http
// .put(config.API.kpiScoreTotal() + `/${id.value}`, {
// plannedPoint: plannedPoint.value,
// rolePoint: rolePoint.value,
// specialPoint: specialPoint.value,
// capacityPoint: capacityPoint.value,
// })
// .then(async (res) => {
// await fetchEvaluation();
// success($q, "");
// modalScore.value = false;
// })
// .catch((e) => {
// messageError($q, e);
// })
// .finally(() => {
// hideLoader();
// });
// }
// async function clearScore() {
// modalScore.value = false;
@ -283,8 +283,11 @@ function onSubmitScore() {
// }
async function getAll() {
await getProfile();
await fetchEvaluation();
await (store.dataProfile.profileId === null ? getProfile() : ""); // await getProfile();
await store.checkStep();
await getOrgOp();
}
@ -397,7 +400,9 @@ onMounted(async () => {
<div class="q-gutter-x-sm">
<span
v-if="
indicatorWeightTotal > 0 && indicatorWeightTotal != 100
store.dataProfile.posExecutiveName == null &&
indicatorWeightTotal > 0 &&
indicatorWeightTotal != 100
"
class="text-red"
>*ำหน(อยละ) ผลสมฤทธของงานไมกตอง</span

View file

@ -169,10 +169,12 @@ function changRound() {
}
function redirectViewDetail(id: string) {
store.tabMain = "1";
router.push(`/KPI/${id}`);
}
function onClickAddList() {
async function onClickAddList() {
await getProfile();
modalDialog.value = true;
}
@ -194,11 +196,11 @@ function onSubmit() {
lastName: formRound.lastName,
evaluatorId: formRound.evaluatorId,
commanderId: formRound.commanderId,
commanderHighId: formRound.commanderHighId,
commanderId: formRound.commanderId == "" ? null : formRound.commanderId,
commanderHighId:
formRound.commanderHighId == "" ? null : formRound.commanderHighId,
})
.then((res) => {
console.log(res);
const id = res.data.result;
redirectViewDetail(id);
onCloseDialog();
@ -314,7 +316,6 @@ function filterOption(val: any, update: Function, refData: string) {
}
onMounted(() => {
getProfile();
fetchRoundOption("main");
getOrgOp();
});