From f8cd032c0b84d4dbebcb150e68dc14e924034359 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Wed, 23 Apr 2025 10:29:50 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B8=9B=E0=B8=A3=E0=B8=B1=E0=B8=9A=20Eva?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/org/api.org.ts | 5 +- .../components/EvaluateStepMain.vue | 493 ++++++++------- .../06_evaluate/components/step/step2.vue | 575 +++++++++++------- .../06_evaluate/components/step/step3.vue | 101 +-- .../06_evaluate/components/step/step4.vue | 295 ++++++++- .../06_evaluate/components/step/step6.vue | 307 +++++++--- .../06_evaluate/components/step/step7.vue | 7 +- .../06_evaluate/components/step/step8.vue | 38 +- .../components/viewstep/viewStep1.vue | 143 ++--- src/modules/06_evaluate/interface/evalute.ts | 10 +- .../06_evaluate/stores/evaluteDetail.ts | 78 +-- 11 files changed, 1254 insertions(+), 798 deletions(-) diff --git a/src/api/org/api.org.ts b/src/api/org/api.org.ts index 8ad1a24..8705ab9 100644 --- a/src/api/org/api.org.ts +++ b/src/api/org/api.org.ts @@ -54,6 +54,8 @@ export default { dataUserSalary: `${profileOrg}/salary/user`, dataUserSalaryByType: (type: string) => `${org}/profile${type}/salary/user`, dataUserAssessments: `${profileOrg}/assessments/user`, + dataUserPortfolio: `${env.API_URI}/development/portfolio/user`, + dataUserPerformance: `${env.API_URI}/evaluation/performance/user`, dataUserNopaid: `${profileOrg}/nopaid/user`, dataUserNopaidByType: (type: string) => `${org}/profile${type}/nopaid/user`, @@ -61,8 +63,7 @@ export default { dataUserCertificateByType: (emType: string, type: string) => `${org}/profile${emType}/${type}/user`, - dataUserEvaByType: (type: string) => - `${org}/profile/${type}/user`, + dataUserEvaByType: (type: string) => `${org}/profile/${type}/user`, dataUserOther: `${profileOrg}/other/user`, dataUserOtherByType: (type: string) => `${org}/profile${type}/other/user`, diff --git a/src/modules/06_evaluate/components/EvaluateStepMain.vue b/src/modules/06_evaluate/components/EvaluateStepMain.vue index 0cdf723..d207626 100644 --- a/src/modules/06_evaluate/components/EvaluateStepMain.vue +++ b/src/modules/06_evaluate/components/EvaluateStepMain.vue @@ -1,5 +1,5 @@ @@ -412,32 +354,67 @@ onMounted(async () => {
- - +
+ +
+
+ + เพิ่มชื่อผลงาน + +
+
+
+ +
+
+ + ลบ + +
+
@@ -459,7 +436,6 @@ onMounted(async () => {
{ lazy-rules hide-bottom-space /> - +
+
+ + + + +
+
@@ -494,7 +509,6 @@ onMounted(async () => {
{ @update:model-value="updateInput(formCommand)" hide-bottom-space /> - + +
+
+ + + + +
+
@@ -527,8 +581,97 @@ onMounted(async () => {
+
+ +
+
{{ item.title }}
+ +
+ + ดาวน์โหลดต้นแบบ +
+
+ + ดูไฟล์เอกสาร +
+
+
+
+
+
+ + + + +
+
+
+
+
+ -
+ -
+ -
+ -
+ -
+ -
+
diff --git a/src/modules/06_evaluate/components/step/step3.vue b/src/modules/06_evaluate/components/step/step3.vue index 8333f63..019a960 100644 --- a/src/modules/06_evaluate/components/step/step3.vue +++ b/src/modules/06_evaluate/components/step/step3.vue @@ -22,13 +22,23 @@ const evaluateId = ref(route.params.id.toString()); const emit = defineEmits(["update:file"]); const selectedItem = ref(1); -const fileName = ref([ - "1-แบบพิจารณาคุณสมบัติบุคคล", - "2-แบบแสดงรายละเอียดการเสนอผลงาน", - "3-แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)", - "4-แบบประเมินคุณลักษณะบุคคล", - "5-แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)", - "6-ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)", +const formTemplates = ref([ + { + title: "แบบพิจารณาคุณสมบัติบุคคล", + fileName: "1-แบบพิจารณาคุณสมบัติบุคคล", + }, + { + title: "แบบแสดงรายละเอียดการเสนอผลงาน", + fileName: "2-แบบแสดงรายละเอียดการเสนอผลงาน", + }, + { + title: "แบบประเมินคุณลักษณะบุคคล", + fileName: "4-แบบประเมินคุณลักษณะบุคคล", + }, + { + title: "ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)", + fileName: "6-ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)", + }, ]); /** @@ -38,7 +48,7 @@ const fileName = ref([ function handleItemClick(itemNumber: number) { store.tabPanels = itemNumber.toString(); selectedItem.value = itemNumber; - fetchDocument(fileName.value[itemNumber - 1]); + fetchDocument(formTemplates.value[itemNumber - 1].fileName); } /** @@ -50,14 +60,14 @@ async function fetchDocument(fileName: string) { evaluateId.value && (await http .get(config.API.loadFileDocument("เล่ม 1", evaluateId.value, fileName)) - .then((res) => { - downloadFile(res.data.downloadUrl); + .then(async (res) => { + await downloadFile(res.data.downloadUrl); }) .catch((err) => { messageError($q, err); }) .finally(() => { - showLoader(); + hideLoader(); })); } @@ -66,7 +76,6 @@ async function fetchDocument(fileName: string) { * @param url ลิงก์ดาวน์โหลดไฟล์ */ async function downloadFile(url: string) { - showLoader(); await axios .get(url, { responseType: "blob", @@ -81,84 +90,28 @@ async function downloadFile(url: string) { }) .catch((err) => { messageError($q, err); - }) - .finally(() => { - hideLoader(); }); } /** HooK lifecycle*/ onMounted(async () => { - await fetchDocument(fileName.value[selectedItem.value - 1]); + await fetchDocument(formTemplates.value[selectedItem.value - 1].fileName); }); diff --git a/src/modules/06_evaluate/components/step/step4.vue b/src/modules/06_evaluate/components/step/step4.vue index d4ed7b9..839f63b 100644 --- a/src/modules/06_evaluate/components/step/step4.vue +++ b/src/modules/06_evaluate/components/step/step4.vue @@ -1,7 +1,215 @@ diff --git a/src/modules/06_evaluate/components/step/step6.vue b/src/modules/06_evaluate/components/step/step6.vue index 7a37b25..450c22b 100644 --- a/src/modules/06_evaluate/components/step/step6.vue +++ b/src/modules/06_evaluate/components/step/step6.vue @@ -34,36 +34,25 @@ const fileEvaluation1 = ref(); const formCommand = reactive({ commanderFullname: "", commanderPosition: "", + commanderPositionOld: "", + commanderOrg: "", + commanderOrgOld: "", commanderAboveFullname: "", commanderAbovePosition: "", + commanderAbovePositionOld: "", + commanderAboveOrgOld: "", + commanderAboveOrg: "", author: "", - subject: "", + subject: [""], assignedPosition: "", }); -/** ref input*/ -const commanderFullnameRef = ref(null); -const commanderPositionRef = ref(null); -const commanderAboveFullnameRef = ref(null); -const commanderAbovePositionRef = ref(null); -const fileEvaluation1Ref = ref(null); -const performanceRef = ref(null); -const performanceOwnerRef = ref(null); -const assignedPositionRef = ref(null); const modalView = ref(false); /** function อัปเดท ผลงาน,ผู้เซ็นเอกสาร*/ function updateInput(value: any) { const ref = { - commanderFullnameRef: commanderFullnameRef.value, - commanderPositionRef: commanderPositionRef.value, - commanderAboveFullnameRef: commanderAboveFullnameRef.value, - commanderAbovePositionRef: commanderAbovePositionRef.value, - fileEvaluation1Ref: fileEvaluation1Ref.value, downloadFile: [downloadUrl.value], - performance: performanceRef.value, - performanceOwner: performanceOwnerRef.value, - assignedPosition: assignedPositionRef.value, }; emit("update:form", value, ref); } @@ -146,17 +135,25 @@ async function fetcheSigner(id: string) { const data = res.data.result; formCommand.commanderFullname = data.commanderFullnameDoc2; formCommand.commanderPosition = data.commanderPositionDoc2; + formCommand.commanderPositionOld = data.commanderPositionOldDoc2; + formCommand.commanderOrg = data.commanderOrgDoc2; + formCommand.commanderOrgOld = data.commanderOrgOldDoc2; formCommand.commanderAboveFullname = data.commanderAboveFullnameDoc2; formCommand.commanderAbovePosition = data.commanderAbovePositionDoc2; + formCommand.commanderAbovePositionOld = + data.commanderAbovePositionOldDoc2; + formCommand.commanderAboveOrgOld = data.commanderAboveOrgOldDoc2; + formCommand.commanderAboveOrg = data.commanderAboveOrgDoc2; formCommand.author = data.authorDoc2; formCommand.subject = data.subjectDoc2; formCommand.assignedPosition = data.assignedPosition; - store.statusUpload6 = data.commanderFullnameDoc2 === null ? false : true; + store.statusUpload6 = data.isUpdated; }) - .catch(() => { - store.statusUpload6 = false; - getCommander(); + .catch((err) => { + messageError($q, err); + // store.statusUpload6 = false; + // getCommander(); }) .finally(() => { hideLoader(); @@ -181,28 +178,17 @@ async function fetchCheckDate() { const downloadUrl = ref(""); /** function เช็คไฟล์อัปโหลด*/ -function checkDoc() { - // showLoader(); - http +async function checkDoc() { + await http .get( config.API.loadFileDocument("เล่ม 2", evaluateId.value, "1-เอกสารเล่ม 2") ) .then((res: any) => { downloadUrl.value = res.data.downloadUrl; }) - .catch(() => {}) .finally(() => { - // hideLoader(); const ref = { - commanderFullnameRef: commanderFullnameRef.value, - commanderPositionRef: commanderPositionRef.value, - commanderAboveFullnameRef: commanderAboveFullnameRef.value, - commanderAbovePositionRef: commanderAbovePositionRef.value, - fileEvaluation1Ref: fileEvaluation1Ref.value, downloadFile: [downloadUrl.value], - performance: performanceRef.value, - performanceOwner: performanceOwnerRef.value, - assignedPosition: assignedPositionRef.value, }; emit("update:form", formCommand, ref); @@ -221,8 +207,15 @@ function getCommander() { }) .catch((e) => { messageError($q, e); - }) - .finally(() => {}); + }); +} + +function onAddSubject() { + formCommand.subject.push(""); +} + +function onDeleteSubject(index: number) { + formCommand.subject.splice(index, 1); } watch( @@ -273,27 +266,12 @@ onMounted(async () => {
ผลงาน
-
-
-
-
+
+
+
+
- { :rules="[(val:string) => !!val || `${'กรุณากรอกเจ้าของผลงาน'}`]" lazy-rules /> +
+
{ label="ตำแหน่งที่ได้รับ" hide-bottom-space :rules="[ - (val:string) => !!val || `${'กรุณากรอกตำแหน่งที่ได้รับ'}`, - ]" + (val:string) => !!val || `${'กรุณากรอกตำแหน่งที่ได้รับ'}`, + ]" lazy-rules />
+ +
+ + เพิ่มชื่อผลงาน + +
+ +
+
+ +
+
+ + ลบ + +
+
@@ -340,8 +369,7 @@ onMounted(async () => {
{ lazy-rules hide-bottom-space /> - +
+
+ + + + + + +
+
@@ -376,8 +453,7 @@ onMounted(async () => {
{ @update:model-value="updateInput(formCommand)" hide-bottom-space /> - + +
+
+ + + + +
+
@@ -434,7 +558,6 @@ onMounted(async () => {
{ - downloadFile(res.data.downloadUrl); + .then(async (res) => { + await downloadFile(res.data.downloadUrl); }) .catch((err) => { messageError($q, err); + }) + .finally(() => { + hideLoader(); })); } diff --git a/src/modules/06_evaluate/components/step/step8.vue b/src/modules/06_evaluate/components/step/step8.vue index cd8dcf2..93794c9 100644 --- a/src/modules/06_evaluate/components/step/step8.vue +++ b/src/modules/06_evaluate/components/step/step8.vue @@ -69,20 +69,20 @@ async function fetchPathUpload( showLoader(); await http .post(config.API.loadPathDocument(volume, id), body) - .then((res) => { + .then(async (res) => { const foundKey: string | undefined = Object.keys(res.data).find( (key) => res.data[key]?.fileName !== undefined && res.data[key]?.fileName !== "" ); - foundKey && uploadfile(res.data[foundKey]?.uploadUrl, file); + foundKey && (await uploadfile(res.data[foundKey]?.uploadUrl, file)); }) .catch((err) => { messageError($q, err); + }) + .finally(() => { hideLoader(); }); - // .finally(() => { - // }); } } @@ -103,16 +103,12 @@ async function uploadfile(uploadUrl: string, file: any) { }) .catch((err) => { messageError($q, err); - }) - .finally(() => { - hideLoader(); }); } const downloadUrl = ref(""); /** function เช็คไฟล์อัปโหลด*/ function checkDoc() { - showLoader(); http .get( config.API.loadFileDocument( @@ -123,12 +119,6 @@ function checkDoc() { ) .then((res: any) => { downloadUrl.value = res.data.downloadUrl; - }) - .catch((e) => { - // messageError($q, e); - }) - .finally(() => { - hideLoader(); }); } @@ -141,7 +131,6 @@ const assignedPosition = ref(""); * @param id ประเมิน */ async function fetcheSigner(id: string) { - showLoader(); await http .get(config.API.evaluationSignerDoc2(id)) .then((res) => { @@ -151,16 +140,21 @@ async function fetcheSigner(id: string) { assignedPosition.value = data.assignedPosition; evaluationResult.value = data.evaluationResult; }) - .catch(() => {}) - .finally(() => { - hideLoader(); + .catch((err) => { + messageError($q, err); }); } /** lifecycleHook*/ onMounted(async () => { - await checkDoc(); - await fetcheSigner(evaluateId.value); + try { + showLoader(); + await Promise.all([checkDoc(), fetcheSigner(evaluateId.value)]); + } catch (error) { + console.log(error); + } finally { + hideLoader(); + } }); @@ -178,7 +172,7 @@ onMounted(async () => { />
-
+
เอกสารเล่ม 2 (ฉบับแก้ไข)
@@ -224,7 +218,7 @@ onMounted(async () => {
-
+
เอกสารเล่ม 2 (ฉบับแก้ไข)
({ /** function เรียกข้อมูลตรวจสอบคุณสมบัติ*/ async function fetchDetail() { - showLoader(); await http .get(config.API.positionBykeycloak()) - .then((res) => { - const data = res.data.result; + .then(async (res) => { + const data = await res.data.result; formDetail.root = data.root; formDetail.rootId = data.rootId; formDetail.userId = data.id; @@ -89,58 +88,62 @@ async function fetchDetail() { formDetail.birthDate = data.birthDate; // formDetail.govAge = data.govAge; // ยังไม่มี formDetail.salary = data.salary; - - http.get(config.API.dataUserEducations).then((res) => { - formDetail.educations = res.data.result; - }); - - http.get(config.API.dataUserCertificate("certificate")).then((res) => { - formDetail.certificates = res.data.result.map( - (e: CertificatesForm) => ({ - certificateNo: e.certificateNo, - certificateType: e.certificateType, - expireDate: e.expireDate, - issueDate: e.issueDate, - issuer: e.issuer, - }) - ); - }); - - http.get(config.API.dataUserSalary).then((res) => { - formDetail.salaries = res.data.result; - }); - - http.get(config.API.dataUserCertificate("training")).then((res) => { - formDetail.trainings = res.data.result.map((e: any) => ({ - dateOrder: e.dateOrder, - department: e.department, - duration: e.duration, - endDate: e.endDate, - name: e.name, - numberOrder: e.numberOrder, - place: e.place, - startDate: e.startDate, - topic: e.topic, - yearly: e.yearly, - })); - }); - - http.get(config.API.dataUserAssessments).then((res) => { - formDetail.assessments = res.data.result; - }); + await fetchDataAllDetail(); emit("update:formDeital", formDetail); }) .catch((err) => { messageError($q, err); - }) - .finally(() => { - setTimeout(() => { - hideLoader(); - }, 2500); }); } +async function fetchDataAllDetail() { + // ดึงข้อมูลประวัติการศึกษา + http.get(config.API.dataUserEducations).then((res) => { + formDetail.educations = res.data.result; + }); + + // ดึงข้อมูลใบอนุญาตประกอบวิชาชีพ + http.get(config.API.dataUserCertificate("certificate")).then((res) => { + formDetail.certificates = res.data.result.map((e: CertificatesForm) => ({ + certificateNo: e.certificateNo, + certificateType: e.certificateType, + expireDate: e.expireDate, + issueDate: e.issueDate, + issuer: e.issuer, + })); + }); + + // ดึงข้อมูลประวัติการรับราชการ + http.get(config.API.dataUserSalary).then((res) => { + formDetail.salaries = res.data.result; + }); + + // ดึงข้อมูลประวัติการฝึกอบรมดูงาน + http.get(config.API.dataUserCertificate("training")).then((res) => { + formDetail.trainings = res.data.result.map((e: any) => ({ + dateOrder: e.dateOrder, + department: e.department, + duration: e.duration, + endDate: e.endDate, + name: e.name, + numberOrder: e.numberOrder, + place: e.place, + startDate: e.startDate, + topic: e.topic, + yearly: e.yearly, + })); + }); + + http.get(config.API.dataUserPerformance).then((res) => { + formDetail.assessments = res.data.result; + }); + + http.get(config.API.dataUserPortfolio).then((res) => { + formDetail.experience = res.data.result; + }); +} + /** * function fetchData ตรวจสอบคุณสมบัติ * @param id ประเมิน @@ -178,7 +181,8 @@ async function fetchCheckSpec(data: any) { topic: e.topic, yearly: e.yearly, })); - formDetail.assessments = data.assessments; + formDetail.assessments = data.performances; + formDetail.experience = data.portfolios; } /** @@ -195,7 +199,6 @@ function formattedNumber(x: number) { /** get data */ function getData() { - showLoader(); http .get(config.API.dataUserGovernment) .then(async (res) => { @@ -207,28 +210,30 @@ function getData() { }) .catch((e) => { messageError($q, e); - }) - .finally(() => { - setTimeout(() => { - hideLoader(); - }, 2500); }); } onMounted(async () => { - const promises = []; + try { + showLoader(); + const promises = []; - if (route.name === "evaluate-add") { - promises.push(fetchDetail()); + if (route.name === "evaluate-add") { + promises.push(fetchDetail()); + } + + if (props.data) { + promises.push(fetchCheckSpec(props.data)); + } + + promises.push(getData()); + + await Promise.all(promises); + } catch (error) { + console.log(error); + } finally { + hideLoader(); } - - if (props.data) { - promises.push(fetchCheckSpec(props.data)); - } - - promises.push(getData()); - - await Promise.all(promises); }); @@ -537,7 +542,6 @@ onMounted(async () => { -
@@ -561,7 +565,7 @@ onMounted(async () => { @@ -570,13 +574,12 @@ onMounted(async () => { ผลงานที่เคยเสนอขอประเมิน (ถ้ามี)
-
-
- +
diff --git a/src/modules/06_evaluate/interface/evalute.ts b/src/modules/06_evaluate/interface/evalute.ts index 593a27b..1db407c 100644 --- a/src/modules/06_evaluate/interface/evalute.ts +++ b/src/modules/06_evaluate/interface/evalute.ts @@ -38,10 +38,16 @@ interface FormSpec { interface FormCommand { commanderFullname: string; commanderPosition: string; + commanderPositionOld: string; + commanderOrgOld: string; + commanderOrg: string; commanderAboveFullname: string; commanderAbovePosition: string; + commanderAbovePositionOld: string; + commanderAboveOrgOld: string; + commanderAboveOrg: string; author: string; - subject: string; + subject: string[]; assignedPosition: string; } @@ -134,5 +140,5 @@ export type { ListMenu, FormRef, FormData, - FormCommandSe + FormCommandSe, }; diff --git a/src/modules/06_evaluate/stores/evaluteDetail.ts b/src/modules/06_evaluate/stores/evaluteDetail.ts index 02aa6df..0ae6bad 100644 --- a/src/modules/06_evaluate/stores/evaluteDetail.ts +++ b/src/modules/06_evaluate/stores/evaluteDetail.ts @@ -360,94 +360,40 @@ export const useEvaluateDetailStore = defineStore("evaluateDetailStore", () => { //ผลงานที่เคยเสนอขอประเมิน (ถ้ามี) const columnAssessments = ref([ { - name: "date", + name: "year", align: "left", - label: "วันที่ได้รับ", + label: "ปี พ.ศ.", sortable: true, - field: "date", + field: "year", headerStyle: "font-size: 14px", style: "font-size: 14px", - format: (v) => date2Thai(v), }, { - name: "point1Total", + name: "type", align: "left", - label: "ส่วนที่1 (น้ำหนัก)", + label: "ระดับตอนที่ยื่นขอ", sortable: true, - field: "point1Total", + field: "type", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { - name: "point1", + name: "subject", align: "left", - label: "ผลประเมินส่วนที่1 (คะแนน)", + label: "เรื่อง/ชื่อเรื่อง", sortable: true, - field: "point1", + field: "subject", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { - name: "point2Total", + name: "evaluationResult", align: "left", - label: "ส่วนที่2 (น้ำหนัก)", + label: "ผลการประเมิน (ผ่าน/ไม่ผ่าน)", sortable: true, - field: "point2Total", + field: "evaluationResult", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), - }, - { - name: "point2", - align: "left", - label: "ผลประเมินส่วนที่2 (คะแนน)", - sortable: true, - field: "point2", - headerStyle: "font-size: 14px", - style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), - }, - { - name: "pointSumTotal", - align: "left", - label: "ผลรวม (น้ำหนัก)", - sortable: true, - field: "pointSumTotal", - headerStyle: "font-size: 14px", - style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), - }, - { - name: "pointSum", - align: "left", - label: "ผลประเมินรวม (คะแนน)", - sortable: true, - field: "pointSum", - headerStyle: "font-size: 14px", - style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), - }, - { - name: "name", - align: "left", - label: "ผลประเมิน", - sortable: true, - field: "name", - format(val, row) { - return `${textPoint(row.pointSum)} ${textRangePoint(row.pointSum)}`; - }, - headerStyle: "font-size: 14px", - style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, ]);