From eedab43e4ab1bc707bde8be8b383bc07dd903f94 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Fri, 17 Jan 2025 17:12:11 +0700 Subject: [PATCH] report insignia --- src/api/07_insignia/api.insignia.ts | 2 + .../components/DialogFormAgency.vue | 17 ++++ .../02_organization/interface/index/Main.ts | 1 + .../07_insignia/views/06_ReportMain.vue | 91 ++++++++++++++----- 4 files changed, 87 insertions(+), 24 deletions(-) diff --git a/src/api/07_insignia/api.insignia.ts b/src/api/07_insignia/api.insignia.ts index 9f75833b7..7569f1683 100644 --- a/src/api/07_insignia/api.insignia.ts +++ b/src/api/07_insignia/api.insignia.ts @@ -105,4 +105,6 @@ export default { // สกจ. ตีกลับให้หัวหน้าเขต rejectRequest: (id: string, ocId: string) => `${insignia}/request/head/reject/${id}/${ocId}`, + + reportInsigniaNew: `${insignia}/report`, }; diff --git a/src/modules/02_organization/components/DialogFormAgency.vue b/src/modules/02_organization/components/DialogFormAgency.vue index 500e38279..59972dc89 100644 --- a/src/modules/02_organization/components/DialogFormAgency.vue +++ b/src/modules/02_organization/components/DialogFormAgency.vue @@ -82,6 +82,7 @@ const formData = reactive({ responsibility: "", isOfficer: false, isDeputy: false, + orgMisId: "", }); /** @@ -120,6 +121,8 @@ function onSubmit() { ["org" + type + "Fax"]: formData.orgFax, ["org" + type + "Rank"]: formData.orgLevel, ["org" + type + "RankSub"]: formData.orgLevelSub, + misId: formData.orgMisId, + [nameId]: rootId, responsibility: formData.responsibility != null ? formData.responsibility : "", @@ -205,6 +208,7 @@ function closeClear() { formData.orgLevel = ""; formData.responsibility = ""; formData.isOfficer = false; + formData.orgMisId = ""; props.close?.(); } @@ -402,6 +406,7 @@ watch( formData.responsibility = props.dataNode.responsibility; formData.isOfficer = props.dataNode.isOfficer ?? false; formData.isDeputy = props.dataNode.isDeputy ?? false; + formData.orgMisId = props.dataNode.isDeputy; orgLevelOption.value = props.dataNode.orgTreeRank === "DEPARTMENT" ? orgLevelOptionMain.value @@ -596,6 +601,18 @@ watch( :class="classInput(false)" /> +
+ +
([ const typeReport = ref(""); const optionReport = ref([ { - id: "45", + id: "report1", name: "บัญชีรายชื่อข้าราชการผู้ขอพระราชทานเครื่องราชอิสริยาภรณ์", }, - { id: "44", name: " บัญชีระดับผลการประเมินผลการปฏิบัติราชการในรอบ 5 ปี" }, - { id: "43", name: " บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ 5 ปี" }, + { + id: "report2", + name: " บัญชีระดับผลการประเมินผลการปฏิบัติราชการในรอบ 5 ปี", + }, + { id: "report3", name: " บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ 5 ปี" }, ]); const roundId = ref(""); @@ -54,21 +60,11 @@ const pdfSrc = ref(); const isLoadPDF = ref(false); -// /** -// * ฟังก์ชัน Redirect ไปหน้ารายงานที่เลือก -// * @param type ประเภทรายงาน -// */ -// function nextPage(type: string) { -// router.push(`/insignia/report/${type}`); -// } - async function fetchDataTree() { node.value = await fetchStructureTree(route.meta.Key as string, true); } -/** - * ฟังก์ชันคึงข้อมูลรอบการเสนอขอ - */ +/** ฟังก์ชันคึงข้อมูลรอบการเสนอขอ*/ async function fecthlistRound() { showLoader(); await http @@ -106,12 +102,19 @@ function filterSelector(val: string, update: Function, name: string) { }); } +/** + * function เลือกหน่วยงาน + * @param id id หน่วยงาน + * @param level ระดับหน่วยงาน + */ function onSelectedNode(id: string, level: number) { nodeId.value = id; nodeLevel.value = level; onUpdateFilter(); } +const detailReport = ref(); + /** * ฟังก์ชันโหลดไฟล์ * @param type ประเภทไฟล์ @@ -123,16 +126,19 @@ async function onUpdateFilter() { pdfSrc.value = undefined; await http - .get(config.API.reportInsignia(typeReport.value, "pdf", roundId.value), { - responseType: "blob", - }) + .post( + config.API.reportInsigniaNew + + `/${typeReport.value}/${employeeClass.value}`, + { + roundId: roundId.value, + node: nodeLevel.value, + nodeId: nodeId.value, + } + ) .then(async (res) => { - const url = URL.createObjectURL(new Blob([res.data])); - const pdfData = await usePDF(url); - await setTimeout(() => { - pdfSrc.value = pdfData.pdf.value; - numOfPages.value = pdfData.pages.value; - }, 1000); + const data = await res.data.result; + detailReport.value = data; + await fetchDocumentTemplate(data); }) .catch(async (e) => { messageError($q, JSON.parse(await e.response.data.text())); @@ -143,6 +149,34 @@ async function onUpdateFilter() { } } +/** + * function เรียกไฟล์ PDF + * @param data ข้อมูลบัญชีวันลา + */ +async function fetchDocumentTemplate(data: any) { + await axios + .post(`${config.API.reportTemplate}/docx`, data, { + headers: { + accept: "application/pdf", + "content-Type": "application/json", + }, + responseType: "blob", + }) + .then(async (res) => { + const blob = new Blob([res.data]); + const objectUrl = URL.createObjectURL(blob); + const pdfData = usePDF(`${objectUrl}`); + + setTimeout(() => { + pdfSrc.value = pdfData.pdf.value; + numOfPages.value = pdfData.pages.value; + }, 1500); + }) + .catch(async (e) => { + messageError($q, JSON.parse(await e.response.data.text())); + }); +} + /** ไปหน้าต่อไปของรายงาน */ function nextPage() { if (page.value < numOfPages.value) { @@ -157,7 +191,16 @@ function backPage() { } } -function downloadReport(type: string) {} +function downloadReport(type: string) { + const fileName = + optionReport.value.find((e) => e.id === typeReport.value)?.name || ""; + + if (type === "xlsx") { + genReportXLSX(detailReport.value, fileName, type); + } else { + genReport(detailReport.value, fileName, type); + } +} onMounted(async () => { await Promise.all([fetchDataTree(), fecthlistRound()]);