257 lines
7.2 KiB
Vue
257 lines
7.2 KiB
Vue
<script setup lang="ts">
|
|
import { ref, onMounted } from "vue";
|
|
import { useQuasar } from "quasar";
|
|
import { useRouter, useRoute } from "vue-router";
|
|
|
|
import http from "@/plugins/http";
|
|
import config from "@/app.config";
|
|
import { useCounterMixin } from "@/stores/mixin";
|
|
import { useDevelopmentDataStore } from "@/modules/15_development/store/developmentStore";
|
|
|
|
import type { ResRecord } from "@/modules/15_development/interface/response/Main";
|
|
|
|
import Record from "@/modules/15_development/components/Record.vue";
|
|
import DialogRecordPerson from "@/modules/15_development/components/DialogRecordPerson.vue";
|
|
|
|
/**
|
|
* use
|
|
*/
|
|
const $q = useQuasar();
|
|
const router = useRouter();
|
|
const route = useRoute();
|
|
const store = useDevelopmentDataStore();
|
|
const { showLoader, hideLoader, messageError, dialogConfirm, success } =
|
|
useCounterMixin();
|
|
|
|
/**
|
|
* ตัวแปร
|
|
*/
|
|
const projectId = ref<string>(route.params.id.toLocaleString()); //id route
|
|
const tab = ref<string>("IN"); //tab
|
|
const title = ref<string>(""); // หัวข้อ
|
|
const isLoadPage = ref<boolean>(false); // เช็คโหลดหน้า
|
|
const files = ref<any>(null); // ไฟล์
|
|
const listPerson = ref<ResRecord[]>([]); // ตัวแปร เก็บบุคคล
|
|
const modalAddPerson = ref<boolean>(false); // ตัวแปร dialog เพิ่มบุคคล
|
|
|
|
/**
|
|
* function fetch ข้อมูลเบื้องต้น
|
|
* @param id ProjectId
|
|
*/
|
|
function fetchData(id: string) {
|
|
showLoader();
|
|
http
|
|
.get(config.API.developmentMainTab("tab1", id))
|
|
.then(async (res) => {
|
|
title.value = res.data.result.projectName;
|
|
})
|
|
.catch((err) => {
|
|
messageError($q, err);
|
|
})
|
|
.finally(() => {
|
|
hideLoader();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* function เรียกข้อมูลรายชื่อทั้งหมด
|
|
*/
|
|
function fetchDataProject() {
|
|
isLoadPage.value = false;
|
|
showLoader();
|
|
http
|
|
.get(config.API.developmentMainTab("tab6", projectId.value))
|
|
.then(async (res) => {
|
|
listPerson.value = await res.data.result;
|
|
})
|
|
.catch((e) => {
|
|
messageError($q, e);
|
|
})
|
|
.finally(() => {
|
|
hideLoader();
|
|
isLoadPage.value = true;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* function อัปโหลดไฟล์
|
|
* @param file ไฟล์
|
|
*/
|
|
function clickUpload(file: any) {
|
|
dialogConfirm(
|
|
$q,
|
|
async () => {
|
|
showLoader();
|
|
const selectedFile = file;
|
|
const formData = new FormData();
|
|
formData.append("file", selectedFile);
|
|
await http
|
|
.post(config.API.developmentMainTab("tab6", projectId.value), formData)
|
|
.then(async () => {
|
|
await fetchDataProject();
|
|
await success($q, "อัปโหลดไฟล์สำเร็จ");
|
|
files.value = null;
|
|
})
|
|
.catch((err) => {
|
|
messageError($q, err);
|
|
showLoader();
|
|
});
|
|
},
|
|
"ยืนยันการอัปโหลดไฟล์",
|
|
"ต้องการยืนยันการอัปโหลดไฟล์นี้หรือไม่ ?"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* function ส่งไปบันทึกที่ทะเบียนประวัติ
|
|
*/
|
|
function sendRecordRegistry() {
|
|
dialogConfirm(
|
|
$q,
|
|
() => {
|
|
showLoader();
|
|
http
|
|
.get(config.API.developmentMainTab("tab6/done", projectId.value))
|
|
.then(async () => {
|
|
await fetchDataProject();
|
|
await success($q, "ส่งข้อมูลสำเร็จ");
|
|
})
|
|
.catch((e) => {
|
|
messageError($q, e);
|
|
hideLoader();
|
|
});
|
|
},
|
|
"ยืนยันการส่งข้อมูลไปบันทึกยังทะเบียนประวัติ",
|
|
"ต้องการยืนยันการส่งข้อมูลไปบันทึกยังทะเบียนประวัติหรือไม่"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* function ดาวน์โหลดไฟล์ต้นแบบ
|
|
*/
|
|
function downloadFile() {
|
|
const link = document.createElement("a");
|
|
link.href = `${window.location.protocol}//${window.location.host}/default-บันทึกผล.xlsx`;
|
|
link.download = "default-บันทึกผล.xlsx";
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
}
|
|
|
|
onMounted(() => {
|
|
fetchDataProject();
|
|
fetchData(projectId.value);
|
|
store.projectStatus = "FINISH";
|
|
});
|
|
</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.go(-1)"
|
|
/>
|
|
{{ `บันทึกผู้ผ่านการอบรม ${title}` }}
|
|
</div>
|
|
<q-card flat bordered>
|
|
<q-toolbar class="q-pa-md">
|
|
<q-file
|
|
v-model="files"
|
|
dense
|
|
label="อัปโหลดไฟล์"
|
|
outlined
|
|
accept=".xlsx"
|
|
hide-bottom-space
|
|
clearable
|
|
class="col-xs-12 col-sm-4"
|
|
>
|
|
<template v-slot:prepend>
|
|
<q-icon name="attach_file" color="blue" />
|
|
</template>
|
|
</q-file>
|
|
<q-btn
|
|
v-if="files"
|
|
size="md"
|
|
icon="mdi-upload"
|
|
round
|
|
flat
|
|
color="blue"
|
|
@click="clickUpload(files)"
|
|
>
|
|
<q-tooltip>อัปโหลดไฟล์</q-tooltip>
|
|
</q-btn>
|
|
<q-btn
|
|
size="md"
|
|
icon="mdi-download"
|
|
round
|
|
flat
|
|
color="green"
|
|
@click="downloadFile"
|
|
>
|
|
<q-tooltip>ดาวน์โหลดไฟล์ต้นแบบ</q-tooltip>
|
|
</q-btn>
|
|
<q-btn
|
|
v-if="listPerson.length > 0"
|
|
size="md"
|
|
icon="mdi-clipboard-account-outline"
|
|
round
|
|
flat
|
|
color="public"
|
|
@click="sendRecordRegistry()"
|
|
>
|
|
<q-tooltip>ส่งไปบันทึกที่ทะเบียนประวัติ</q-tooltip>
|
|
</q-btn>
|
|
<q-space />
|
|
<q-btn
|
|
flat
|
|
round
|
|
dense
|
|
icon="add"
|
|
color="primary"
|
|
@click="modalAddPerson = true"
|
|
>
|
|
<q-tooltip>เพิ่มรายชื่อผู้ผ่านการอบรม</q-tooltip>
|
|
</q-btn>
|
|
</q-toolbar>
|
|
</q-card>
|
|
|
|
<q-card flat bordered class="q-mt-sm">
|
|
<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="IN" label="รายชื่อที่อยู่ในทะเบียนประวัติ" />
|
|
<q-tab name="OUT" label="รายชื่อบุคคลภายนอก" />
|
|
</q-tabs>
|
|
<q-separator />
|
|
<div class="q-pa-sm" style="padding: 0px" v-if="isLoadPage">
|
|
<q-tab-panels v-model="tab" animated>
|
|
<q-tab-panel name="IN">
|
|
<Record :isProfile="true" :listPerson="listPerson" />
|
|
</q-tab-panel>
|
|
<q-tab-panel name="OUT">
|
|
<Record :isProfile="false" :listPerson="listPerson" />
|
|
</q-tab-panel>
|
|
</q-tab-panels>
|
|
</div>
|
|
</q-card>
|
|
|
|
<DialogRecordPerson
|
|
v-model:modal="modalAddPerson"
|
|
v-model:tab="tab"
|
|
:fetchData="fetchDataProject"
|
|
/>
|
|
</template>
|
|
|
|
<style scoped></style>
|