รายการตัวชี้วัดตามแผนฯ => แก้ไขตัวชี้วัดตามแผนฯ

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-04-23 11:31:13 +07:00
parent b962fa3733
commit 87e006415c
2 changed files with 192 additions and 244 deletions

View file

@ -1,43 +1,14 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted } from "vue"; import { ref } from "vue";
import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import IndicatorByPlan from "@/modules/14_KPI/components/indicatorByPlan/IndicatorByPlan.vue"; import IndicatorByPlan from "@/modules/14_KPI/components/indicatorByPlan/IndicatorByPlan.vue";
const $q = useQuasar();
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const {
dialogConfirm,
showLoader,
hideLoader,
messageError,
success,
date2Thai,
calculateDurationYmd,
} = useCounterMixin();
const title = ref<string>(route.params.id ? "แก้ไข" : "เพิ่ม"); const title = ref<string>(route.params.id ? "แก้ไข" : "เพิ่ม");
async function fetchData() {
showLoader();
await http
.get(config.API.kpiPlan)
.then(async (res) => {})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
onMounted(async () => {
await fetchData();
});
</script> </script>
<template> <template>
<div class="toptitle text-dark col-12 row items-center"> <div class="toptitle text-dark col-12 row items-center">
@ -48,7 +19,7 @@ onMounted(async () => {
class="q-mr-sm" class="q-mr-sm"
icon="mdi-arrow-left" icon="mdi-arrow-left"
color="primary" color="primary"
@click="router.go(-1)" @click="router.push(`/KPI-indicator-plan`)"
/> />
{{ `${title}ตัวชี้วัดตามแผนฯ` }} {{ `${title}ตัวชี้วัดตามแผนฯ` }}
</div> </div>

View file

@ -1,25 +1,29 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted } from "vue"; import { ref, reactive, onMounted } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import config from "@/app.config";
import { QForm, useQuasar } from "quasar"; import { QForm, useQuasar } from "quasar";
import { useRoute, useRouter } from "vue-router";
import config from "@/app.config";
import http from "@/plugins/http"; import http from "@/plugins/http";
import { useRoute } from "vue-router";
/** importType*/
import type { DataOption } from "@/modules/14_KPI/interface/index/Main";
/** importStore*/
import { usePositionEmp } from "@/modules/16_positionEmployee/store/organizational"; import { usePositionEmp } from "@/modules/16_positionEmployee/store/organizational";
import { useCounterMixin } from "@/stores/mixin";
/**use*/
const $q = useQuasar();
const route = useRoute();
const router = useRouter();
const store = usePositionEmp(); const store = usePositionEmp();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const $q = useQuasar(); const { dialogConfirm, showLoader, hideLoader, messageError, success } = mixin;
const {
dialogRemove,
dialogConfirm,
showLoader,
hideLoader,
messageError,
success,
date2Thai,
} = mixin;
const planData = reactive<any>({ const id = ref<string>(route.params.id ? route.params.id.toLocaleString() : "");
/**form ตัวชี้วัดตามแผนฯ*/
const planData = reactive({
kpiPeriodId: "", //(->APR, ->OCT) kpiPeriodId: "", //(->APR, ->OCT)
including: "", // including: "", //
includingName: "", // includingName: "", //
@ -34,40 +38,27 @@ const planData = reactive<any>({
meaning: "", // meaning: "", //
formula: "", // formula: "", //
node: null, // node: null, //
nodeId: "", //id nodeId: null, //id
orgRevisionId: "", //RevisionId orgRevisionId: "", //RevisionId
strategy: null, // strategy: null, //
strategyId: "", //id strategyId: "", //id
}); });
const filter = ref<string>(""); const year = ref<number>(0); //
const filterAgency = ref<string>(""); const roundOp = ref<DataOption[]>([]);
const route = useRoute();
const id = ref<string>(route.params.id ? route.params.id.toLocaleString() : "");
const year = ref<number>(0);
const roundOp = ref<any[]>([]);
const notFound = ref<string>("ไม่พบข้อมูลที่ค้นหา");
const noData = ref<string>("ไม่มีข้อมูล");
const expandedPlan = ref<Array<string | null>>([]);
const expandedAgency = ref<Array<string | null>>([]);
const nodeplan = ref<any>([]); const nodeplan = ref<any>([]);
const nodeAgency = ref<any>([]); const nodeAgency = ref<any>([]);
const editStatus = ref<boolean>(false); const filter = ref<string>("");
async function onSubmit() { const filterAgency = ref<string>("");
dialogConfirm( const expandedPlan = ref<string[]>([]);
$q, const expandedAgency = ref<string[]>([]);
async () => {
editStatus.value ? editData(id.value) : addData();
},
"ยืนยันการบันทึกข้อมูล",
"ต้องการยืนยันการบันทึกข้อมูลนี้หรือไม่ ?"
);
}
const editStatus = ref<boolean>(false);
const inputRef = ref<any>(null); const inputRef = ref<any>(null);
/** functiopn fetch รอบการประเมิน*/
function fetchRoundOption(isId: number | null = null) { function fetchRoundOption(isId: number | null = null) {
showLoader();
http http
.get( .get(
config.API.kpiPeriod + config.API.kpiPeriod +
@ -93,14 +84,29 @@ function fetchRoundOption(isId: number | null = null) {
}) })
.catch((err) => { .catch((err) => {
messageError($q, err); messageError($q, err);
})
.finally(() => {
hideLoader();
}); });
} }
function fetchTree() { /** function fetch หาโครงสร้างที่ใช้งาน*/
showLoader(); function fetchOrganizationActive() {
http
.get(config.API.activeOrganization)
.then((res) => {
const data = res.data.result;
if (data) {
store.fetchDataActive(data);
store.activeId && fetchTreeAgency(store.activeId);
fetchTreeStrategy();
}
})
.catch((err) => {
messageError($q, err);
});
}
/** function fetchTree ยุทธศาสตร์ / แผน*/
function fetchTreeStrategy() {
http http
.get(config.API.devStrategy) .get(config.API.devStrategy)
.then((res) => { .then((res) => {
@ -109,15 +115,12 @@ function fetchTree() {
}) })
.catch((err) => { .catch((err) => {
messageError($q, err); messageError($q, err);
})
.finally(() => {
hideLoader();
}); });
} }
async function fetchDataTree(id: string) { /** functioon fetchcTree หน่วยงาน/ส่วนราชการ*/
showLoader(); function fetchTreeAgency(id: string) {
await http http
.get(config.API.orgByid(id.toString())) .get(config.API.orgByid(id.toString()))
.then(async (res) => { .then(async (res) => {
const data = res.data.result; const data = res.data.result;
@ -142,39 +145,17 @@ async function fetchDataTree(id: string) {
}) })
.catch((err) => { .catch((err) => {
messageError($q, err); messageError($q, err);
})
.finally(() => {
hideLoader();
}); });
} }
async function fetchOrganizationActive() { /** function fetch ข้อมูลตัวชี้วัด*/
function fetchDataById(id: string) {
showLoader(); showLoader();
await http http
.get(config.API.activeOrganization) .get(config.API.kpiPlanById(id))
.then((res) => { .then((res) => {
const data = res.data.result;
if (data) {
store.fetchDataActive(data);
}
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
async function fetchDataById(id: any) {
showLoader();
await http
.get(config.API.kpiPlanById(id))
.then(async (res) => {
const data = res.data.result; const data = res.data.result;
year.value = data.year; year.value = data.year;
// planData.value = data;
// planData.year = data.year;
planData.kpiPeriodId = data.kpiPeriodId; planData.kpiPeriodId = data.kpiPeriodId;
planData.including = data.including; planData.including = data.including;
planData.includingName = data.includingName; planData.includingName = data.includingName;
@ -193,7 +174,6 @@ async function fetchDataById(id: any) {
planData.orgRevisionId = data.orgRevisionId; planData.orgRevisionId = data.orgRevisionId;
planData.strategy = data.strategy; planData.strategy = data.strategy;
planData.strategyId = data.strategyId; planData.strategyId = data.strategyId;
console.log(data);
fetchRoundOption(); fetchRoundOption();
}) })
@ -201,15 +181,19 @@ async function fetchDataById(id: any) {
messageError($q, err); messageError($q, err);
}) })
.finally(() => { .finally(() => {
hideLoader(); setTimeout(() => {
hideLoader();
}, 1000);
}); });
} }
/** funtion เลือกหรืออัปดเดท ยุทธศาสตร์ / แผน*/
function updateSelected(data: any) { function updateSelected(data: any) {
planData.strategyId = data.id; planData.strategyId = data.id;
planData.strategy = data.level; planData.strategy = data.level;
} }
/** funtion เลือกหรืออัปดเดท หน่วยงาน/ส่วนราชการ*/
function updateSelectedAgency(data: any, isUpdate: boolean = false) { function updateSelectedAgency(data: any, isUpdate: boolean = false) {
if ( if (
planData.node === data.orgLevel && planData.node === data.orgLevel &&
@ -218,42 +202,39 @@ function updateSelectedAgency(data: any, isUpdate: boolean = false) {
) { ) {
planData.node = null; planData.node = null;
planData.nodeId = null; planData.nodeId = null;
console.log("1");
} else { } else {
planData.node = data.orgLevel; planData.node = data.orgLevel;
planData.nodeId = data.orgTreeId; planData.nodeId = data.orgTreeId;
console.log("2");
} }
planData.orgRevisionId = data.orgRevisionId; planData.orgRevisionId = data.orgRevisionId;
} }
async function addData() { /**function ยืนยันการบันทึกข้อมูล */
await http function onSubmit() {
.post(config.API.kpiPlan, planData) dialogConfirm(
.then(() => { $q,
success($q, "บันทึกข้อมูลสำเร็จ"); async () => {
}) showLoader();
.catch((err) => { // editStatus.value ? editData(id.value) : addData();
messageError($q, err); try {
}) const url = editStatus.value
.finally(() => { ? config.API.kpiPlanById(id.value)
hideLoader(); : config.API.kpiPlan;
}); const method = editStatus.value ? "put" : "post";
} const res = await http[method](url, planData);
success($q, "บันทึกข้อมูลสำเร็จ");
async function editData(id: string) { editStatus.value
await http ? fetchDataById(id.value)
.put(config.API.kpiPlanById(id), planData) : router.push(`/KPI-indicator-plan/${res.data.result}`);
.then(() => { } catch (e) {
success($q, "บันทึกข้อมูลสำเร็จ"); messageError($q, e);
fetchDataById(id); } finally {
}) hideLoader();
.catch((err) => { }
messageError($q, err); },
}) "ยืนยันการบันทึกข้อมูล",
.finally(() => { "ต้องการยืนยันการบันทึกข้อมูลนี้หรือไม่ ?"
hideLoader(); );
});
} }
/** /**
@ -276,18 +257,12 @@ async function searchAndReplace(orgTreeData: any, treeId: string | null) {
} }
} }
onMounted(async () => { onMounted(() => {
// fetchData(); fetchOrganizationActive();
await fetchOrganizationActive();
if (id.value) { if (id.value) {
editStatus.value = true; editStatus.value = true;
fetchDataById(id.value); fetchDataById(id.value);
} }
setTimeout(async () => {
store.activeId && (await fetchDataTree(store.activeId));
await fetchTree();
}, 200);
}); });
</script> </script>
@ -377,7 +352,7 @@ onMounted(async () => {
hide-bottom-space hide-bottom-space
/> />
</div> </div>
<div class="col-3"> <div class="col-4">
<q-input <q-input
outlined outlined
v-model="planData.target" v-model="planData.target"
@ -389,7 +364,7 @@ onMounted(async () => {
hide-bottom-space hide-bottom-space
/> />
</div> </div>
<div class="col-3"> <div class="col-4">
<q-input <q-input
outlined outlined
v-model="planData.unit" v-model="planData.unit"
@ -402,7 +377,7 @@ onMounted(async () => {
hide-bottom-space hide-bottom-space
/> />
</div> </div>
<div class="col-3"> <div class="col-4">
<q-input <q-input
outlined outlined
v-model="planData.weight" v-model="planData.weight"
@ -417,99 +392,101 @@ onMounted(async () => {
</div> </div>
<div class="col-12 row"> <div class="col-12 row">
<div class="col-6"> <div class="col-6">
<q-card bordered> <q-card flat bordered>
<q-card-actions class="bg-grey-3 row"> <q-card bordered>
<q-card-actions class="bg-grey-3 row">
<div class="col-4 flex justify-center items-center">
<div>ระดบคะแนน</div>
</div>
<div class="col-8 q-px-xl">ผลสำเรจของงาน</div>
</q-card-actions>
</q-card>
<div class="row">
<div class="col-4 flex justify-center items-center"> <div class="col-4 flex justify-center items-center">
<div>ระดบคะแนน</div> <div>5</div>
</div> </div>
<div class="col-8 q-px-xl">ผลสำเรจของงาน</div> <div class="col-8 q-pa-sm">
</q-card-actions> <q-input
outlined
v-model="planData.achievement5"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>4</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement4"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>3</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement3"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>2</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement2"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>1</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement1"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
</q-card> </q-card>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>5</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement5"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>4</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement4"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>3</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement3"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>2</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement2"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
<div class="row">
<div class="col-4 flex justify-center items-center">
<div>1</div>
</div>
<div class="col-8 q-pa-sm">
<q-input
outlined
v-model="planData.achievement1"
label="กรอกผลสำเร็จของงาน"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกผลสำเร็จของงาน'}`]"
hide-bottom-space
/>
</div>
</div>
</div> </div>
</div> </div>
<div class="col-12"> <div class="col-12">
@ -567,8 +544,8 @@ onMounted(async () => {
label-key="labelName" label-key="labelName"
selected-color="primary" selected-color="primary"
:filter="filterAgency" :filter="filterAgency"
:no-results-label="notFound" no-results-label="ไม่พบข้อมูลที่ค้นหา"
:no-nodes-label="noData" no-nodes-label="ไม่มีข้อมูล"
v-model:expanded="expandedAgency" v-model:expanded="expandedAgency"
v-model:selected="planData.nodeId" v-model:selected="planData.nodeId"
> >
@ -630,8 +607,8 @@ onMounted(async () => {
node-key="id" node-key="id"
label-key="id" label-key="id"
:filter="filter" :filter="filter"
:no-results-label="notFound" no-results-label="ไม่พบข้อมูลที่ค้นหา"
:no-nodes-label="noData" no-nodes-label="ไม่มีข้อมูล"
v-model:expanded="expandedPlan" v-model:expanded="expandedPlan"
v-model:selected="planData.strategyId" v-model:selected="planData.strategyId"
> >