Merge branch 'develop' into devTee

This commit is contained in:
STW_TTTY\stwtt 2024-06-19 10:48:37 +07:00
commit defcfd56da
10 changed files with 125 additions and 98 deletions

View file

@ -1,14 +1,24 @@
import env from "../index" import env from "../index";
const appeal = `${env.API_URI}/discipline/complaint_appeal` const appeal = `${env.API_URI}/discipline/complaint_appeal`;
const profile = `${env.API_URI}/profile/keycloak` const profile = `${env.API_URI}/profile/keycloak`;
export default { export default {
profileBykeycloak:()=>`${profile}`, profileBykeycloak: () => `${profile}`,
appealMainList:(status: string, type: string, year: number, page: number, pageSize: number, keyword: string)=>`${appeal}/user?status=${status}&type=${type}&year=${year}&page=${page}&pageSize=${pageSize}&keyword=${keyword}`, positionBykeycloak: () => `${env.API_URI}/org/profile/keycloak/position`,
appealAdd:()=>`${appeal}`,
appealByID:(id:string)=>`${appeal}/${id}`, appealMainList: (
status: string,
type: string,
year: number,
page: number,
pageSize: number,
keyword: string
) =>
`${appeal}/user?status=${status}&type=${type}&year=${year}&page=${page}&pageSize=${pageSize}&keyword=${keyword}`,
appealAdd: () => `${appeal}`,
appealByPrintReport:(id:string)=>`${appeal}/report/${id}` appealByID: (id: string) => `${appeal}/${id}`,
}
appealByPrintReport: (id: string) => `${appeal}/report/${id}`,
};

View file

@ -12,7 +12,7 @@ const router = useRouter();
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { fails, success, messageError, showLoader, hideLoader } = mixin; const { findOrgName, success, messageError, showLoader, hideLoader } = mixin;
const formProfile = reactive<any>({ const formProfile = reactive<any>({
profileId: "", profileId: "",
@ -24,13 +24,13 @@ const formProfile = reactive<any>({
function getProFile() { function getProFile() {
showLoader(); showLoader();
http http
.get(config.API.profileBykeycloak()) .get(config.API.positionBykeycloak())
.then((res) => { .then((res) => {
const data = res.data.result; const data = res.data.result;
formProfile.profileId = data.id; formProfile.profileId = data.profileId;
formProfile.fullname = `${data.prefix}${data.firstName} ${data.lastName}`; formProfile.fullname = `${data.prefix}${data.firstName} ${data.lastName}`;
formProfile.citizenId = data.citizenId; formProfile.citizenId = data.citizenId;
formProfile.oc = data.oc; formProfile.oc = findOrgName(data);
formProfile.position = data.position; formProfile.position = data.position;
}) })
.catch((e) => { .catch((e) => {
@ -53,9 +53,9 @@ function onSubmit(data: any) {
formData.append("title", data.title); formData.append("title", data.title);
formData.append("description", data.description); formData.append("description", data.description);
formData.append("type", data.type); formData.append("type", data.type);
formData.append("year", ''); formData.append("year", "");
formData.append("caseType", ''); formData.append("caseType", "");
formData.append("caseNumber", ''); formData.append("caseNumber", "");
formData.append("file", data.files); formData.append("file", data.files);
formData.append("oc", data.oc); formData.append("oc", data.oc);
formData.append("position", data.position); formData.append("position", data.position);

View file

@ -119,7 +119,11 @@ function onClickApprove(type: string = "") {
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
v-model:pagination="pagination" v-model:pagination="pagination"
@update:pagination="props.updatePagination" @update:pagination="props.updatePagination"
selection="multiple" :selection="
store.tabMainevaluator === '5' || store.tabMainevaluator === '6'
? 'none'
: 'multiple'
"
v-model:selected="store.selected" v-model:selected="store.selected"
> >
<template v-slot:header-selection="scope"> <template v-slot:header-selection="scope">
@ -218,17 +222,7 @@ function onClickApprove(type: string = "") {
</div> </div>
<div class="row justify-end q-mt-md q-gutter-sm"> <div class="row justify-end q-mt-md q-gutter-sm">
<q-btn <q-btn color="public" label="อนุมัติ" @click="onClickApprove('PASSED')" />
v-if="store.tabMainevaluator === '5'"
color="orange"
label="ไม่ผ่านการประเมิน"
@click="onClickApprove('NOTPASSED')"
/>
<q-btn
:color="store.tabMainevaluator === '5' ? 'green' : 'public'"
:label="store.tabMainevaluator === '5' ? 'ผ่านการประเมิน' : 'อนุมัติ'"
@click="onClickApprove('PASSED')"
/>
</div> </div>
</template> </template>

View file

@ -0,0 +1,3 @@
<template>
<div class="q-pa-md">สรปผลการประเม</div>
</template>

View file

@ -13,7 +13,7 @@ const store = useKpiDataStore();
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const id = ref<string>(route.params.id as string) const id = ref<string>(route.params.id as string);
const work = ref<boolean>(false); const work = ref<boolean>(false);
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
@ -29,35 +29,37 @@ const {
} = mixin; } = mixin;
const modal = defineModel<boolean>("modal", { required: true }); const modal = defineModel<boolean>("modal", { required: true });
const isProbation = defineModel<boolean>("isProbation", { required: true });
function close() { function close() {
modal.value = false; modal.value = false;
} }
function getData() { // function getData() {
showLoader(); // showLoader();
http // http
.get(config.API.orgPosition+`/${store.dataProfile.profileId}`) // .get(config.API.orgPosition+`/${store.dataProfile.profileId}`)
.then((res) => { // .then((res) => {
const data = res.data.result.isProbation; // const data = res.data.result.isProbation;
work.value = data; // work.value = data;
}) // })
.catch((e) => { // .catch((e) => {
messageError($q, e); // messageError($q, e);
}) // })
.finally(() => { // .finally(() => {
hideLoader(); // hideLoader();
}); // });
} // }
watch( // watch(
() => modal.value, // () => modal.value,
(n) => { // (n) => {
if (n == true) { // if (n == true) {
getData(); // getData();
} // }
} // }
); // );
</script> </script>
<template> <template>
<q-dialog persistent v-model="modal"> <q-dialog persistent v-model="modal">
<q-card bordered style="min-width: 20vw"> <q-card bordered style="min-width: 20vw">
@ -66,7 +68,9 @@ watch(
<q-card-section class="q-pa-sm"> <q-card-section class="q-pa-sm">
<div class="row"> <div class="row">
<div class="col-12 text-center bg-grey-1 q-pa-md rounded-borders"> <div class="col-12 text-center bg-grey-1 q-pa-md rounded-borders">
<span class="text-weight-bold text-teal">{{work ? `อยู่ระหว่างทดลองงาน`:'พ้นจากการทดลองงาน'}}</span> <span class="text-weight-bold text-teal">{{
isProbation ? `อยู่ระหว่างทดลองงาน` : "-"
}}</span>
</div> </div>
</div> </div>
</q-card-section> </q-card-section>

View file

@ -4,7 +4,7 @@ import { useKpiDataStore } from "@/modules/08_KPI/store";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import Assessment from "@/modules/08_KPI/components/Tab/01_Assessment.vue"; import Assessment from "@/modules/08_KPI/components/Tab/01_Assessment.vue";
import Evaluator from "@/modules/08_KPI/components/Tab/02_Evaluator.vue"; import Result from "@/modules/08_KPI/components/Tab/04_Result.vue";
import CommanderAbove from "@/modules/08_KPI/components/Tab/03_CommanderAbove.vue"; import CommanderAbove from "@/modules/08_KPI/components/Tab/03_CommanderAbove.vue";
import CommanderAboveOneStep from "@/modules/08_KPI/components/Tab/04_CommanderAboveOneStep.vue"; import CommanderAboveOneStep from "@/modules/08_KPI/components/Tab/04_CommanderAboveOneStep.vue";
import File from "@/modules/08_KPI/components/Tab/05_File.vue"; import File from "@/modules/08_KPI/components/Tab/05_File.vue";
@ -25,6 +25,10 @@ const itemsTab = ref<any>([
name: "3", name: "3",
label: "รายงานผลสำเร็จของงาน", label: "รายงานผลสำเร็จของงาน",
}, },
{
name: "4",
label: "สรุปผลการประเมิน",
},
{ {
name: "5", name: "5",
label: "ไฟล์เอกสาร", label: "ไฟล์เอกสาร",
@ -59,6 +63,7 @@ const splitterModel = ref<number>(12);
label="รายงานผลสำเร็จของงาน" label="รายงานผลสำเร็จของงาน"
:disable="store.tabOpen < 3" :disable="store.tabOpen < 3"
/> />
<q-tab name="4" label="สรุปผลการประเมิน" />
<q-tab name="5" label="ไฟล์เอกสาร" /> <q-tab name="5" label="ไฟล์เอกสาร" />
</q-tabs> </q-tabs>
</template> </template>
@ -81,7 +86,7 @@ const splitterModel = ref<number>(12);
<Assessment v-if="store.tabMain === '1'" /> <Assessment v-if="store.tabMain === '1'" />
<Assessment v-if="store.tabMain === '2'" :type="'evaluator'" /> <Assessment v-if="store.tabMain === '2'" :type="'evaluator'" />
<Assessment v-if="store.tabMain === '3'" :type="'commander'" /> <Assessment v-if="store.tabMain === '3'" :type="'commander'" />
<Assessment v-if="store.tabMain === '4'" :type="'commanderHigh'" /> <Result v-if="store.tabMain === '4'" :type="'result'" />
<File v-if="store.tabMain === '5'" /> <File v-if="store.tabMain === '5'" />
</q-tab-panel> </q-tab-panel>
</q-tab-panels> </q-tab-panels>

View file

@ -47,7 +47,7 @@ const visibleColumns = ref<string[]>(
"achievement", "achievement",
"evaluationResults", "evaluationResults",
] ]
: ["includingName", "target", "weight"] : ["includingName", "target", "point", "weight"]
); );
const columns = ref<QTableProps["columns"]>([ const columns = ref<QTableProps["columns"]>([
{ {

View file

@ -108,7 +108,7 @@ const columns = ref<QTableProps["columns"]>([
const visibleColumns = ref<string[]>( const visibleColumns = ref<string[]>(
store.tabOpen === 3 && store.tabMain === "3" store.tabOpen === 3 && store.tabMain === "3"
? ["name", "level", "point", "weight", "summary"] ? ["name", "level", "point", "weight", "summary"]
: ["name", "level", "weight"] : ["name", "level", "point", "weight"]
); );
const typeCompetency = ref<string>(""); const typeCompetency = ref<string>("");

View file

@ -130,31 +130,37 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
} }
async function checkCompetency() { async function checkCompetency() {
const position = await dataEvaluation.value.position; // const position = await dataEvaluation.value.position;
const executiveName = await dataEvaluation.value.posExecutiveName; // const executiveName = await dataEvaluation.value.posExecutiveName;
const posTypeName = dataEvaluation.value.posTypeName;
const posLevelName = dataEvaluation.value.posLevelName;
if ( // if (
position == "ผู้ตรวจราชการกรุงเทพมหานคร" || // position == "ผู้ตรวจราชการกรุงเทพมหานคร" ||
position == "ผู้ตรวจราชการ" // position == "ผู้ตรวจราชการ"
) { // ) {
// competencyType.value = competencyType.value.filter(
// (x: DataOptions) => x.id == "HEAD" || x.id == "INSPECTOR"
// );
// } else if (position == "ผู้อำนวยการเขต") {
// competencyType.value = competencyType.value.filter(
// (x: DataOptions) => x.id == "HEAD" || x.id == "DIRECTOR"
// );
// } else {
if (posTypeName == "อำนวยการ" || posTypeName == "บริหาร") {
competencyType.value = competencyType.value.filter( competencyType.value = competencyType.value.filter(
(x: DataOptions) => x.id == "HEAD" || x.id == "INSPECTOR" (x: DataOptions) =>
); x.id == "HEAD" ||
} else if (position == "ผู้อำนวยการเขต") { x.id == "EXECUTIVE" ||
competencyType.value = competencyType.value.filter( x.id == "INSPECTOR" ||
(x: DataOptions) => x.id == "HEAD" || x.id == "DIRECTOR" x.id == "DIRECTOR"
); );
} else { } else {
if (executiveName == null) { competencyType.value = competencyType.value.filter(
competencyType.value = competencyType.value.filter( (x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
(x: DataOptions) => x.id == "HEAD" || x.id == "GROUP" );
);
} else {
competencyType.value = competencyType.value.filter(
(x: DataOptions) => x.id == "HEAD" || x.id == "EXECUTIVE"
);
}
} }
// }
} }
const defaultCompetencyCoreLevel = ref<number>(); const defaultCompetencyCoreLevel = ref<number>();
@ -231,18 +237,18 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
const rolePerson = ref<string>("USER"); //"USER" | "EVALUATOR" | "COMMANDER", "COMMANDERHIGH" const rolePerson = ref<string>("USER"); //"USER" | "EVALUATOR" | "COMMANDER", "COMMANDERHIGH"
const tabOpen = ref<number>(1); const tabOpen = ref<number>(1);
async function checkStep() { async function checkStep() {
const role = const role = await (dataEvaluation.value.profileId ==
dataProfile.value.profileId
dataEvaluation.value.profileId == await dataProfile.value.profileId ? "USER"
? "USER" : dataEvaluation.value.evaluatorId == (await dataProfile.value.profileId)
: dataEvaluation.value.evaluatorId == await dataProfile.value.profileId ? "EVALUATOR"
? "EVALUATOR" : dataEvaluation.value.commanderId == (await dataProfile.value.profileId)
: dataEvaluation.value.commanderId == await dataProfile.value.profileId ? "COMMANDER"
? "COMMANDER" : dataEvaluation.value.commanderHighId ==
: dataEvaluation.value.commanderHighId == await dataProfile.value.profileId (await dataProfile.value.profileId)
? "COMMANDERHIGH" ? "COMMANDERHIGH"
: ""; : "");
console.log("🚀 ~ checkStep ~ role:", role) // console.log("🚀 ~ checkStep ~ role:", role);
rolePerson.value = role; rolePerson.value = role;
switch (dataEvaluation.value.evaluationStatus) { switch (dataEvaluation.value.evaluationStatus) {

View file

@ -63,7 +63,7 @@ async function fetchEvaluation() {
.get(config.API.kpiEvaluation + `/${id.value}`) .get(config.API.kpiEvaluation + `/${id.value}`)
.then(async (res) => { .then(async (res) => {
const data = res.data.result; const data = res.data.result;
console.log("🚀 ~ .then ~ data:", data) // console.log("🚀 ~ .then ~ data:", data);
store.dataEvaluation = await data; store.dataEvaluation = await data;
formProfile.status = store.convertStatus(data.evaluationStatus); formProfile.status = store.convertStatus(data.evaluationStatus);
@ -89,10 +89,10 @@ async function fetchEvaluation() {
async function getProfile() { async function getProfile() {
await http await http
.get(config.API.profilePosition()) .get(config.API.orgPosition + `/${store.dataEvaluation.profileId}`)
.then(async (res) => { .then(async (res) => {
const data = res.data.result; const data = await res.data.result;
store.dataProfile = await data; store.dataProfile = data;
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
@ -252,8 +252,8 @@ function filterOption(val: any, update: Function, refData: string) {
// } // }
async function getAll() { async function getAll() {
await getProfile();
await fetchEvaluation(); await fetchEvaluation();
await getProfile();
await getOrgOp(); await getOrgOp();
await store.checkStep(); await store.checkStep();
} }
@ -335,7 +335,7 @@ function sendToCommander() {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader() hideLoader();
}); });
}); });
} }
@ -418,7 +418,8 @@ onMounted(async () => {
store.indicatorWeightTotal != 100) || store.indicatorWeightTotal != 100) ||
(store.dataEvaluation.posExecutiveName != null && (store.dataEvaluation.posExecutiveName != null &&
(store.indicatorWeight1Total != 100 || (store.indicatorWeight1Total != 100 ||
store.indicatorWeight2Total != 20)) && store.dataEvaluation.evaluationStatus == 'NEW' store.indicatorWeight2Total != 20) &&
store.dataEvaluation.evaluationStatus == 'NEW')
" "
class="text-red" class="text-red"
>*ำหน(อยละ) ผลสมฤทธของงานไมกตอง</span >*ำหน(อยละ) ผลสมฤทธของงานไมกตอง</span
@ -465,7 +466,8 @@ onMounted(async () => {
<q-btn <q-btn
v-if=" v-if="
store.rolePerson == 'USER' && store.rolePerson == 'USER' &&
store.dataEvaluation.evaluationStatus == 'EVALUATING' && store.tabMain == '3' store.dataEvaluation.evaluationStatus == 'EVALUATING' &&
store.tabMain == '3'
" "
unelevated unelevated
round round
@ -831,7 +833,10 @@ onMounted(async () => {
</q-dialog> --> </q-dialog> -->
<DialogGovernment v-model:modal="modalGovernment" /> <DialogGovernment v-model:modal="modalGovernment" />
<DialogStatus v-model:modal="modalStatus" /> <DialogStatus
v-model:modal="modalStatus"
v-model:is-probation="store.dataProfile.isProbation"
/>
</template> </template>
<style> <style>
.bg-toolbar { .bg-toolbar {