hrms-mgt/src/modules/15_development/components/MainTab.vue
2024-09-16 11:58:55 +07:00

280 lines
9.4 KiB
Vue

<script setup lang="ts">
import { ref, onMounted, watch } from "vue";
import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
/** importComponents*/
import BasicInfo from "@/modules/15_development/components/BasicInfo.vue"; // ข้อมูลเบื้องต้น
import Target from "@/modules/15_development/components/Target.vue"; // เป้าหมาย
import ProjectDetail from "@/modules/15_development/components/ProjectDetail.vue"; // ลักษณะโครงการ
import Budget from "@/modules/15_development/components/Budget.vue"; // งบประมาณ
import Risk from "@/modules/15_development/components/Risk.vue"; //ความเสี่ยง
import FollowResult from "@/modules/15_development/components/FollowResult.vue"; // การติดตามประเมินผล
import Other from "@/modules/15_development/components/Other.vue"; // อื่นๆ
// import Record from "@/modules/15_development/components/Record.vue"; // บันทึกผล
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
import { useDevelopmentDataStore } from "@/modules/15_development/store/developmentStore";
/** use*/
const $q = useQuasar();
const router = useRouter();
const route = useRoute();
const store = useDevelopmentDataStore();
const { success, showLoader, hideLoader, messageError, dialogConfirm } =
useCounterMixin();
const checkRoutePermission = ref<boolean>(
route.name == "developmentDetailPage"
);
const title = ref<string>(route.params.id ? "แก้ไข" : "เพิ่ม");
const projectId = ref<string>(route.params.id.toLocaleString());
const tab = ref<string>("BasicInfo");
const status = ref<string>("ONGOING");
const step = ref<string[]>([
"BasicInfo",
"Target",
"ProjectDetail",
"Budget",
"Risk",
"FollowResult",
"Other",
"Result",
]);
function prevStep() {
const index = step.value.indexOf(tab.value);
if (index > 0) {
tab.value = step.value[index - 1];
}
}
function nextStep() {
const index = step.value.indexOf(tab.value);
if (index < step.value.length - 1) {
tab.value = step.value[index + 1];
}
}
/**
* function fetch สถานะ Project
* @param id projectId
*/
function getStatus(id: string) {
showLoader();
http
.get(config.API.developmentMainStatus(id))
.then((res) => {
status.value = res.data.result.status;
store.projectStatus = res.data.result.status;
})
.catch((e) => {
messageError($q, e);
hideLoader();
});
// .finally(() => {});
}
/** function ยืนยันการเสร็จสิ้นโครงการ*/
function onFinish(id: string) {
dialogConfirm(
$q,
async () => {
showLoader();
http
.get(config.API.developmentMainFinish(id))
.then(() => {
getStatus(id);
success($q, "บันทึกข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
},
"ยืนยันการเสร็จสิ้นโครงการ",
"ต้องการยืนยันการเสร็จสิ้นโครงการนี้ใช่หรือไม่?"
);
}
/** hooklifecycle*/
onMounted(() => {
projectId.value && getStatus(projectId.value);
});
const isChangeData = ref<boolean>(false);
/**
* function เช็คการแกไข้ข้อมูล
*/
function onCheckChangeData() {
isChangeData.value = true;
}
const childBasicInfoRef = ref<InstanceType<typeof BasicInfo> | null>(null);
const childProjectDetailRef = ref<InstanceType<typeof ProjectDetail> | null>(
null
);
const childBudgetRef = ref<InstanceType<typeof Budget> | null>(null);
const childRiskRef = ref<InstanceType<typeof Risk> | null>(null);
const childFollowResultRef = ref<InstanceType<typeof FollowResult> | null>(
null
);
const childOtherRef = ref<InstanceType<typeof Other> | null>(null);
watch(tab, (newValue, oldValue) => {
console.log(`Count changed from ${oldValue} to ${newValue}`);
if (isChangeData.value) {
// เรียกใช้ฟังก์ชันของ component ลูก
if (oldValue === "BasicInfo") {
childBasicInfoRef.value?.onSubmit();
} else if (oldValue === "ProjectDetail") {
childProjectDetailRef.value?.onSubmit();
} else if (oldValue === "Budget") {
childBudgetRef.value?.onSubmit();
} else if (oldValue === "Risk") {
childRiskRef.value?.onSubmit();
} else if (oldValue === "FollowResult") {
childFollowResultRef.value?.onSubmit();
} else if (oldValue === "Other") {
childOtherRef.value?.onSubmit();
}
}
});
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">
<q-btn
flat
round
dense
class="q-mr-sm"
icon="mdi-arrow-left"
color="primary"
@click="router.push('/development')"
/>
{{
checkRoutePermission
? "รายละเอียดโครงการ/หลักสูตรการฝึกอบรม"
: `${title}โครงการ/หลักสูตรการฝึกอบรม`
}}
<q-space />
<div v-if="!checkRoutePermission"></div>
<q-btn
v-if="status === 'ONGOING' && !checkRoutePermission"
unelevated
label="เสร็จสิ้นโครงการ"
color="green"
@click="onFinish(projectId)"
>
<q-tooltip>เสรจสนโครงการ</q-tooltip>
</q-btn>
<q-badge
v-else-if="status !== 'ONGOING' || !checkRoutePermission"
outline
color="primary"
class="q-px-sm q-py-xs"
>เสรจสนโครงการ</q-badge
>
</div>
<q-card flat bordered class="col-12">
<q-tabs
v-model="tab"
dense
align="left"
inline-label
class="rounded-borders"
indicator-color="primary"
active-bg-color="teal-1"
active-class="text-primary"
>
<q-tab name="BasicInfo" label="ข้อมูลเบื้องต้น" />
<q-tab name="Target" label="เป้าหมาย" />
<q-tab name="ProjectDetail" label="ลักษณะโครงการ" />
<q-tab name="Budget" label="งบประมาณ" />
<q-tab name="Risk" label="ความเสี่ยงและประโยชน์ที่จะได้รับ" />
<q-tab name="FollowResult" label="การติดตามประเมินผล" />
<q-tab name="Other" label="อื่นๆ" />
<!-- v-if="status !== 'ONGOING'" -->
<!-- <q-tab name="Record" label="บันทึกผล" /> -->
</q-tabs>
<q-separator />
<div class="q-pa-sm" style="padding: 0px">
<q-tab-panels v-model="tab" animated>
<!-- อมลเบองต -->
<q-tab-panel style="padding: 0px" name="BasicInfo">
<BasicInfo
ref="childBasicInfoRef"
:next-step="nextStep"
:onCheckChangeData="onCheckChangeData"
v-model:isChangeData.value="isChangeData"
/>
</q-tab-panel>
<!-- เปาหมาย -->
<q-tab-panel name="Target">
<Target :prev-step="prevStep" :next-step="nextStep" />
</q-tab-panel>
<!-- กษณะโครงการ -->
<q-tab-panel name="ProjectDetail" style="padding: 0px">
<ProjectDetail
ref="childProjectDetailRef"
:prev-step="prevStep"
:next-step="nextStep"
:onCheckChangeData="onCheckChangeData"
v-model:isChangeData.value="isChangeData"
/>
</q-tab-panel>
<!-- งบประมาณ -->
<q-tab-panel name="Budget" style="padding: 0px">
<Budget
ref="childBudgetRef"
:status="status"
:prev-step="prevStep"
:next-step="nextStep"
:onCheckChangeData="onCheckChangeData"
v-model:isChangeData.value="isChangeData"
/>
</q-tab-panel>
<!-- ความเสยงและประโยชนจะได -->
<q-tab-panel name="Risk" style="padding: 0px">
<Risk
ref="childRiskRef"
:prev-step="prevStep"
:next-step="nextStep"
:onCheckChangeData="onCheckChangeData"
v-model:isChangeData.value="isChangeData"
/>
</q-tab-panel>
<q-tab-panel name="FollowResult" style="padding: 0px">
<FollowResult
ref="childFollowResultRef"
:status="status"
:prev-step="prevStep"
:next-step="nextStep"
:onCheckChangeData="onCheckChangeData"
v-model:isChangeData.value="isChangeData"
/>
</q-tab-panel>
<q-tab-panel name="Other" style="padding: 0px">
<Other
ref="childOtherRef"
:status="status"
:prev-step="prevStep"
:onCheckChangeData="onCheckChangeData"
v-model:isChangeData.value="isChangeData"
/>
</q-tab-panel>
<!-- <q-tab-panel name="Record"> <Record /> </q-tab-panel> -->
</q-tab-panels>
</div>
</q-card>
</template>
<style scoped></style>