User เพิ่มฟิลด์ตอนสร้างและแก้ไขการประเมิน ต่อ API

This commit is contained in:
STW_TTTY\stwtt 2024-04-26 16:28:38 +07:00
parent 8713b39842
commit 8c8673dd88
3 changed files with 234 additions and 33 deletions

View file

@ -31,4 +31,5 @@ export default {
kpiUserCapacity: `${KpiUser}/capacity`, kpiUserCapacity: `${KpiUser}/capacity`,
KpiEvaluation, KpiEvaluation,
Kpiorg, Kpiorg,
kpiEvaluationCheck:`${kpiEvaluation}/check`,
}; };

View file

@ -21,17 +21,19 @@ const isReadonly = <boolean>(route.name === "KPIEditEvaluator" ? true : false);
const store = useKpiDataStore(); const store = useKpiDataStore();
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError, dialogConfirm } = mixin; const { showLoader, hideLoader, messageError, dialogConfirm, success } = mixin;
const evaluatorIdOp = ref<DataOptions[]>([]); const evaluatorIdOp = ref<DataOptions[]>([]);
const commanderIdOp = ref<DataOptions[]>([]); const commanderIdOp = ref<DataOptions[]>([]);
const commanderHighOp = ref<DataOptions[]>([]); const commanderHighOp = ref<DataOptions[]>([]);
const formEva = reactive({ const evaluatorIdMainOp = ref<DataOptions[]>([]);
evaluatorId: "", const commanderIdMainOp = ref<DataOptions[]>([]);
commanderId: "", const commanderHighMainOp = ref<DataOptions[]>([]);
commanderHighId: "",
}); const evaluatorId = ref<any>();
const commanderId = ref<any>();
const commanderHighId = ref<any>();
const formProfile = reactive<FormProfile>({ const formProfile = reactive<FormProfile>({
fullName: "", fullName: "",
@ -56,7 +58,7 @@ function fetchEvaluation() {
formProfile.status = store.convertStatus(data.evaluationStatus); formProfile.status = store.convertStatus(data.evaluationStatus);
formProfile.result = store.convertResults(data.evaluationResults); formProfile.result = store.convertResults(data.evaluationResults);
fetchProfile(data.profileId); fetchProfile(data.profileId);
console.log(store.dataEvaluation) console.log(store.dataEvaluation);
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
@ -113,22 +115,113 @@ function close() {
modalEdit.value = false; modalEdit.value = false;
} }
function clearDialog() { async function clearDialog() {
modalEdit.value = false; modalEdit.value = false;
formEva.evaluatorId = ""; evaluatorId.value = null;
formEva.commanderId = ""; commanderId.value = null;
formEva.commanderHighId = ""; commanderHighId.value = null;
await fetchEvaluation();
await getProfile();
await getOrgOp();
} }
function onSubmit() { function onSubmit() {
dialogConfirm($q, () => { dialogConfirm($q, () => {
clearDialog(); showLoader();
http
.put(config.API.kpiEvaluationCheck + `/${id.value}`, {
evaluatorId: evaluatorId.value.id,
commanderId: commanderId.value.id,
commanderHighId: commanderHighId.value.id,
})
.then((res) => {
success($q, "บันทึกสำเร็จ");
clearDialog();
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
} }
onMounted(() => { function getOrgOp() {
fetchEvaluation(); http
getProfile(); .get(config.API.Kpiorg)
.then((res) => {
const data = res.data.result;
evaluatorIdMainOp.value = data.caregiver.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}));
commanderIdMainOp.value = data.commander.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}));
commanderHighMainOp.value = data.chairman.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}));
evaluatorId.value = data.caregiver
.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}))
.find((i: any) => i.id == store.dataEvaluation.evaluatorId);
commanderId.value = data.caregiver
.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}))
.find((i: any) => i.id == store.dataEvaluation.commanderId);
commanderHighId.value = data.caregiver
.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}))
.find((i: any) => i.id == store.dataEvaluation.commanderHighId);
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {});
}
function filterOption(val: any, update: Function, refData: string) {
switch (refData) {
case "evaluatorIdOp":
update(() => {
evaluatorIdOp.value = evaluatorIdMainOp.value.filter(
(v: any) => v.name.indexOf(val) > -1
);
});
break;
case "commanderIdOp":
update(() => {
commanderIdOp.value = commanderIdMainOp.value.filter(
(v: any) => v.name.indexOf(val) > -1
);
});
break;
case "commanderHighOp":
update(() => {
commanderHighOp.value = commanderHighMainOp.value.filter(
(v: any) => v.name.indexOf(val) > -1
);
});
break;
default:
break;
}
}
onMounted(async () => {
await fetchEvaluation();
await getProfile();
await getOrgOp();
}); });
</script> </script>
@ -148,7 +241,13 @@ onMounted(() => {
isReadonly ? router.push(`/KPI-evaluator`) : router.push(`/KPI`) isReadonly ? router.push(`/KPI-evaluator`) : router.push(`/KPI`)
" "
/> />
{{ id ? `แก้ไขแบบประเมิน` : `เพิ่มแบบประเมิน` }} {{
isReadonly
? "รายละเอียดการประเมินผลการปฏิบัติราชการระดับบุคคล"
: id
? `แก้ไขแบบประเมิน`
: `เพิ่มแบบประเมิน`
}}
<q-space /> <q-space />
<!-- <q-btn label="บันทึก" color="secondary" unelevated @click="onSave" <!-- <q-btn label="บันทึก" color="secondary" unelevated @click="onSave"
@ -175,6 +274,7 @@ onMounted(() => {
<q-space /> <q-space />
<div class="q-gutter-x-sm"> <div class="q-gutter-x-sm">
<q-btn <q-btn
v-if="!isReadonly"
unelevated unelevated
round round
icon="edit" icon="edit"
@ -282,14 +382,14 @@ onMounted(() => {
<q-card-section> <q-card-section>
<div class="column q-gutter-sm"> <div class="column q-gutter-sm">
<q-select <q-select
v-model="formEva.evaluatorId" v-model="evaluatorId"
outlined outlined
label="ผู้ประเมิน" label="ผู้ประเมิน"
dense dense
option-label="name" option-label="name"
option-value="id" option-value="id"
:options="evaluatorIdOp" :options="evaluatorIdOp"
emit-value class="inputgreen"
map-options map-options
hide-bottom-space hide-bottom-space
lazy-rules lazy-rules
@ -297,41 +397,53 @@ onMounted(() => {
(val:string) => (val:string) =>
!!val || `${'กรุณาเลือกผู้ประเมิน'}`, !!val || `${'กรุณาเลือกผู้ประเมิน'}`,
]" ]"
use-input
@filter="(inputValue:any,
doneFn:Function) => filterOption(inputValue, doneFn,'evaluatorIdOp'
) "
/> />
<q-select <q-select
v-model="formEva.commanderId" v-model="commanderId"
outlined outlined
label="ผู้บังคับบัญชาเหนือขึ้นไป" label="ผู้บังคับบัญชาเหนือขึ้นไป"
dense dense
option-label="name" option-label="name"
option-value="id" option-value="id"
:options="commanderIdOp" :options="commanderIdOp"
emit-value
map-options map-options
class="inputgreen"
use-input
@filter="(inputValue:any,
doneFn:Function) => filterOption(inputValue, doneFn,'commanderIdOp'
) "
> >
<template v-if="formEva.commanderId" v-slot:append> <template v-if="commanderId" v-slot:append>
<q-icon <q-icon
name="cancel" name="cancel"
@click.stop.prevent="formEva.commanderId = ''" @click.stop.prevent="commanderId = null"
class="cursor-pointer" class="cursor-pointer"
/> />
</template> </template>
</q-select> </q-select>
<q-select <q-select
v-model="formEva.commanderHighId" v-model="commanderHighId"
outlined outlined
label="ผู้บังคับบัญชาเหนือขึ้นไปอีกชั้นหนึ่ง" label="ผู้บังคับบัญชาเหนือขึ้นไปอีกชั้นหนึ่ง"
dense dense
option-label="name" option-label="name"
option-value="id" option-value="id"
:options="commanderHighOp" :options="commanderHighOp"
emit-value
map-options map-options
use-input
class="inputgreen"
@filter="(inputValue:any,
doneFn:Function) => filterOption(inputValue, doneFn,'commanderHighOp'
) "
> >
<template v-if="formEva.commanderHighId" v-slot:append> <template v-if="commanderHighId" v-slot:append>
<q-icon <q-icon
name="cancel" name="cancel"
@click.stop.prevent="formEva.commanderHighId = ''" @click.stop.prevent="commanderHighId = null"
class="cursor-pointer" class="cursor-pointer"
/> />
</template> </template>

View file

@ -13,6 +13,7 @@ import DialogHeader from "@/components/DialogHeader.vue";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useKpiDataStore } from "@/modules/08_KPI/store"; import { useKpiDataStore } from "@/modules/08_KPI/store";
const commanderOp = ref<any[]>([]);
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const store = useKpiDataStore(); const store = useKpiDataStore();
@ -77,6 +78,10 @@ const evaluatorIdOp = ref<DataOptions[]>([]);
const commanderIdOp = ref<DataOptions[]>([]); const commanderIdOp = ref<DataOptions[]>([]);
const commanderHighOp = ref<DataOptions[]>([]); const commanderHighOp = ref<DataOptions[]>([]);
const evaluatorIdMainOp = ref<DataOptions[]>([]);
const commanderIdMainOp = ref<DataOptions[]>([]);
const commanderHighMainOp = ref<DataOptions[]>([]);
/** Dialog*/ /** Dialog*/
const modalDialog = ref<boolean>(false); const modalDialog = ref<boolean>(false);
const yearDialog = ref<number | null>(null); const yearDialog = ref<number | null>(null);
@ -185,6 +190,10 @@ function onSubmit() {
prefix: formRound.prefix, prefix: formRound.prefix,
firstName: formRound.firstName, firstName: formRound.firstName,
lastName: formRound.lastName, lastName: formRound.lastName,
evaluatorId: formRound.evaluatorId,
commanderId: formRound.commanderId,
commanderHighId: formRound.commanderHighId,
}) })
.then((res) => { .then((res) => {
console.log(res); console.log(res);
@ -247,17 +256,62 @@ watch(
} }
); );
function getOrgOp(){ function getOrgOp() {
http http
.get(config.API.Kpiorg) .get(config.API.Kpiorg)
.then((res)=>{ .then((res) => {
console.log(res) const data = res.data.result;
}) evaluatorIdMainOp.value = data.caregiver.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}));
commanderIdMainOp.value = data.commander.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}));
commanderHighMainOp.value = data.chairman.map((i: any) => ({
id: i.id,
name: `${i.prefix}${i.firstName} ${i.lastName}`,
}));
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {});
} }
function filterOption(val: any, update: Function, refData: string) {
switch (refData) {
case "evaluatorIdOp":
update(() => {
evaluatorIdOp.value = evaluatorIdMainOp.value.filter(
(v: any) => v.name.indexOf(val) > -1
);
});
break;
case "commanderIdOp":
update(() => {
commanderIdOp.value = commanderIdMainOp.value.filter(
(v: any) => v.name.indexOf(val) > -1
);
});
break;
case "commanderHighOp":
update(() => {
commanderHighOp.value = commanderHighMainOp.value.filter(
(v: any) => v.name.indexOf(val) > -1
);
});
break;
default:
break;
}
}
onMounted(() => { onMounted(() => {
getProfile(); getProfile();
fetchRoundOption("main"); fetchRoundOption("main");
getOrgOp() getOrgOp();
}); });
</script> </script>
@ -507,7 +561,19 @@ onMounted(() => {
(val:string) => (val:string) =>
!!val || `${'กรุณาเลือกผู้ประเมิน'}`, !!val || `${'กรุณาเลือกผู้ประเมิน'}`,
]" ]"
/> use-input
@filter="(inputValue:any,
doneFn:Function) => filterOption(inputValue, doneFn,'evaluatorIdOp'
) "
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select>
</div> </div>
<div class="col-12"> <div class="col-12">
<q-select <q-select
@ -520,6 +586,10 @@ onMounted(() => {
:options="commanderIdOp" :options="commanderIdOp"
emit-value emit-value
map-options map-options
use-input
@filter="(inputValue:any,
doneFn:Function) => filterOption(inputValue, doneFn,'commanderIdOp'
) "
> >
<template v-if="formRound.commanderId" v-slot:append> <template v-if="formRound.commanderId" v-slot:append>
<q-icon <q-icon
@ -528,6 +598,13 @@ onMounted(() => {
class="cursor-pointer" class="cursor-pointer"
/> />
</template> </template>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select> </q-select>
</div> </div>
<div class="col-12"> <div class="col-12">
@ -541,6 +618,10 @@ onMounted(() => {
:options="commanderHighOp" :options="commanderHighOp"
emit-value emit-value
map-options map-options
use-input
@filter="(inputValue:any,
doneFn:Function) => filterOption(inputValue, doneFn,'commanderHighOp'
) "
> >
<template v-if="formRound.commanderHighId" v-slot:append> <template v-if="formRound.commanderHighId" v-slot:append>
<q-icon <q-icon
@ -549,6 +630,13 @@ onMounted(() => {
class="cursor-pointer" class="cursor-pointer"
/> />
</template> </template>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select> </q-select>
</div> </div>
</div> </div>