From c3d24fdc3339ea2e4b22fcf894ffdf746c186633 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Fri, 18 Apr 2025 13:55:30 +0700 Subject: [PATCH 01/13] =?UTF-8?q?eva=20=3D>=20=E0=B9=80=E0=B8=9E=E0=B8=B4?= =?UTF-8?q?=E0=B9=88=E0=B8=A1=20Duty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/viewstep/viewStep1.vue | 31 +++++-------------- .../06_evaluate/stores/evaluteDetail.ts | 28 ++++++++++++++++- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/modules/06_evaluate/components/viewstep/viewStep1.vue b/src/modules/06_evaluate/components/viewstep/viewStep1.vue index dfc9002..8cfc4c8 100644 --- a/src/modules/06_evaluate/components/viewstep/viewStep1.vue +++ b/src/modules/06_evaluate/components/viewstep/viewStep1.vue @@ -28,7 +28,7 @@ const { columnsCertificates, columnSalaries, columnTraining, - columnProjectsProposed, + columnExperience, columnAssessments, } = store; @@ -63,6 +63,7 @@ const formDetail = reactive({ salaries: [], trainings: [], assessments: [], + experience: [], honor: [], }); @@ -164,27 +165,7 @@ async function fetchCheckSpec(data: any) { issueDate: date2Thai(e.issueDate), issuer: e.issuer, })); - formDetail.salaries = data.salaries - // .map((e: any) => ({ - // amount: e.amount, - // date: e.date, - // mouthSalaryAmount: e.mouthSalaryAmount ? e.mouthSalaryAmount : 0, - // posNo: e.posNo, - // position: e.position, - // positionSalaryAmount: e.positionSalaryAmount ? e.positionSalaryAmount : 0, - // refCommandDate: e.refCommandDate ? e.refCommandDate : "", - // salaryClass: e.salaryClass ? e.salaryClass : "", - // salaryRef: e.salaryRef ? e.salaryRef : "", - // salaryStatus: e.salaryStatus ? e.salariesStatus : "", - // // - // oc: "-", - // lineWork: "-", - // side: "-", - // positionType: "-", - // level: "-", - // positionsAdministrative: "-", - // aspectAdministrative: "-", - // })); + formDetail.salaries = data.salaries; formDetail.trainings = data.trainings.map((e: any) => ({ dateOrder: date2Thai(e.dateOrder), department: e.department, @@ -577,7 +558,11 @@ onMounted(async () => { ประสบการณ์ในการปฏิบัติงาน
-
-
+ diff --git a/src/modules/06_evaluate/stores/evaluteDetail.ts b/src/modules/06_evaluate/stores/evaluteDetail.ts index 0fea3e6..02aa6df 100644 --- a/src/modules/06_evaluate/stores/evaluteDetail.ts +++ b/src/modules/06_evaluate/stores/evaluteDetail.ts @@ -9,6 +9,7 @@ export const useEvaluateDetailStore = defineStore("evaluateDetailStore", () => { const mixin = useCounterMixin(); const { date2Thai, findOrgNameHtml, findOrgName } = mixin; + //ใบอนุญาตประกอบวิชาชีพ const columnsCertificates = ref([ { name: "certificateType", @@ -57,6 +58,7 @@ export const useEvaluateDetailStore = defineStore("evaluateDetailStore", () => { }, ]); + //ประวัติการรับราชการ const columnSalaries = ref([ { name: "commandDateAffect", @@ -237,6 +239,7 @@ export const useEvaluateDetailStore = defineStore("evaluateDetailStore", () => { }, ]); + //ประวัติการฝึกอบรมดูงาน const columnTraining = ref([ { name: "name", @@ -354,7 +357,7 @@ export const useEvaluateDetailStore = defineStore("evaluateDetailStore", () => { }, ]); - /** ผลงานที่เคยเสนอขอประเมิน (ถ้ามี)*/ + //ผลงานที่เคยเสนอขอประเมิน (ถ้ามี) const columnAssessments = ref([ { name: "date", @@ -448,6 +451,28 @@ export const useEvaluateDetailStore = defineStore("evaluateDetailStore", () => { }, ]); + //ประสบการณ์ในการปฏิบัติงาน + const columnExperience = ref([ + { + name: "name", + align: "left", + label: "ชื่อผลงาน", + sortable: true, + field: "name", + headerStyle: "font-size: 14px", + style: "font-size: 14px", + }, + { + name: "detail", + align: "left", + label: "รายละเอียดผลงาน", + sortable: true, + field: "detail", + headerStyle: "font-size: 14px", + style: "font-size: 14px", + }, + ]); + function textRangePoint(val: number | undefined) { if (val == undefined) val = -1; if (val < 60.0) return "(คะแนนต่ำกว่าร้อยละ 60.00)"; @@ -473,6 +498,7 @@ export const useEvaluateDetailStore = defineStore("evaluateDetailStore", () => { columnSalaries, columnTraining, columnProjectsProposed, + columnExperience, columnAssessments, }; }); From d9d946d6a76722ec7538156468003cd359e85e98 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Tue, 22 Apr 2025 15:54:24 +0700 Subject: [PATCH 02/13] =?UTF-8?q?=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88?= =?UTF-8?q?=E0=B8=A1=E0=B8=82=E0=B8=AD=E0=B9=81=E0=B8=81=E0=B9=89=E0=B9=84?= =?UTF-8?q?=E0=B8=82=E0=B9=83=E0=B8=9A=E0=B8=AD=E0=B8=99=E0=B8=B8=E0=B8=8D?= =?UTF-8?q?=E0=B8=B2=E0=B8=95=E0=B8=9B=E0=B8=A3=E0=B8=B0=E0=B8=81=E0=B8=AD?= =?UTF-8?q?=E0=B8=9A=E0=B8=A7=E0=B8=B4=E0=B8=8A=E0=B8=B2=E0=B8=8A=E0=B8=B5?= =?UTF-8?q?=E0=B8=9E=20=E0=B9=83=E0=B8=99=E0=B8=82=E0=B8=AD=E0=B9=81?= =?UTF-8?q?=E0=B8=81=E0=B9=89=E0=B9=84=E0=B8=82=E0=B8=97=E0=B8=B0=E0=B9=80?= =?UTF-8?q?=E0=B8=9A=E0=B8=B5=E0=B8=A2=E0=B8=99=E0=B8=9B=E0=B8=A3=E0=B8=B0?= =?UTF-8?q?=E0=B8=A7=E0=B8=B1=E0=B8=95=E0=B8=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/10_registry/store/RequestEdit.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/10_registry/store/RequestEdit.ts b/src/modules/10_registry/store/RequestEdit.ts index 0efc690..bcd3a58 100644 --- a/src/modules/10_registry/store/RequestEdit.ts +++ b/src/modules/10_registry/store/RequestEdit.ts @@ -15,6 +15,7 @@ export const useRequestEditStore = defineStore("requestEditStore", () => { "ขอแก้ไขข้อมูลประวัติการฝึกอบรม", "ขอแก้ไขใบอนุญาตประกอบวิชาชีพ", "ขอแก้ไขที่อยู่ปัจจุบัน", + "ขอแก้ไขใบอนุญาตประกอบวิชาชีพ", ]); const optionStatus = ref([ { id: "", name: "ทั้งหมด" }, 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 03/13] =?UTF-8?q?=E0=B8=9B=E0=B8=A3=E0=B8=B1=E0=B8=9A=20Ev?= =?UTF-8?q?a?= 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" }), }, ]); From 8103ea7d9dcf7c537ea4a733475c2171f567a64d Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Wed, 23 Apr 2025 15:30:29 +0700 Subject: [PATCH 04/13] fix --- src/modules/06_evaluate/components/EvaluateStepMain.vue | 4 ++-- src/modules/06_evaluate/components/viewstep/viewStep1.vue | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/modules/06_evaluate/components/EvaluateStepMain.vue b/src/modules/06_evaluate/components/EvaluateStepMain.vue index d207626..980e619 100644 --- a/src/modules/06_evaluate/components/EvaluateStepMain.vue +++ b/src/modules/06_evaluate/components/EvaluateStepMain.vue @@ -87,8 +87,6 @@ async function onCilckNextStep() { /** function validateForm Step 2,4*/ async function onSubmitFormData() { store.checkFileupload = !store.checkFileupload; - console.log(store.statusUpload6); - if (store.step === 2) { if (!store.statusUpload) { saveStep2(); @@ -364,6 +362,8 @@ async function saveStep1() { isHaveSpecificQft: formSpec.isHaveSpecificQft, isHaveProLicense: formSpec.isHaveProLicense, isHaveMinPeriodOrHoldPos: formSpec.isHaveMinPeriodOrHoldPos, + posExecutive: formDetail.value.posExecutive ?? "", + positionArea: formDetail.value.positionArea ?? "", reason: "", educations: [...educations], certificates: [...certificates], diff --git a/src/modules/06_evaluate/components/viewstep/viewStep1.vue b/src/modules/06_evaluate/components/viewstep/viewStep1.vue index 28eeb77..773715a 100644 --- a/src/modules/06_evaluate/components/viewstep/viewStep1.vue +++ b/src/modules/06_evaluate/components/viewstep/viewStep1.vue @@ -58,6 +58,8 @@ const formDetail = reactive({ month: 0, day: 0, }, + posExecutive: "", + positionArea: "", educations: [] as EducationForm[], certificates: [], salaries: [], @@ -88,6 +90,8 @@ async function fetchDetail() { formDetail.birthDate = data.birthDate; // formDetail.govAge = data.govAge; // ยังไม่มี formDetail.salary = data.salary; + formDetail.posExecutive = data.posExecutive; + formDetail.positionArea = data.positionArea; await fetchDataAllDetail(); emit("update:formDeital", formDetail); From 965304339dc4ab4c5f407ed8fabb8747a51cfaa7 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 24 Apr 2025 09:12:33 +0700 Subject: [PATCH 05/13] =?UTF-8?q?fix=20=E0=B9=80=E0=B8=A5=E0=B8=82?= =?UTF-8?q?=E0=B8=97=E0=B8=B5=E0=B9=88=E0=B8=95=E0=B8=B3=E0=B9=81=E0=B8=AB?= =?UTF-8?q?=E0=B8=99=E0=B9=88=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/data.ts | 1 - src/stores/mixin.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/stores/data.ts b/src/stores/data.ts index 2000d80..dad7009 100644 --- a/src/stores/data.ts +++ b/src/stores/data.ts @@ -100,7 +100,6 @@ export const useDataStore = defineStore("dataMain", () => { async function getData(dataPerson: any) { const data = await dataPerson; isProbation.value = data.isProbation; - formData.profileId = data.profileId; formData.rank = data.rank; formData.prefix = data.prefix; diff --git a/src/stores/mixin.ts b/src/stores/mixin.ts index e232b31..fb73de0 100644 --- a/src/stores/mixin.ts +++ b/src/stores/mixin.ts @@ -1096,7 +1096,7 @@ export const useCounterMixin = defineStore("mixin", () => { ? obj.child1ShortName : obj.rootShortName != null ? obj.rootShortName - : "") + (obj.posMasterNo != null ? obj.posMasterNo : ""); + : "") + (obj.posMasterNo != null ? ` ${obj.posMasterNo}` : ""); return shortName == "" ? "-" : shortName; } else { return ""; From 3b6172ee037cda5fce93592858da6871fa1ecaf1 Mon Sep 17 00:00:00 2001 From: setthawutttty Date: Thu, 24 Apr 2025 11:04:38 +0700 Subject: [PATCH 06/13] =?UTF-8?q?=E0=B8=9B=E0=B8=A3=E0=B8=B1=E0=B8=9A=20ui?= =?UTF-8?q?=20=E0=B8=97=E0=B8=B8=E0=B8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../09_scholarship/interface/request/index.ts | 1 + src/modules/09_scholarship/views/detail.vue | 2094 ++++++++++------- src/modules/09_scholarship/views/main.vue | 14 +- 3 files changed, 1226 insertions(+), 883 deletions(-) diff --git a/src/modules/09_scholarship/interface/request/index.ts b/src/modules/09_scholarship/interface/request/index.ts index 1ad74ac..a25579f 100644 --- a/src/modules/09_scholarship/interface/request/index.ts +++ b/src/modules/09_scholarship/interface/request/index.ts @@ -61,6 +61,7 @@ interface FormsSholarship { totalPeriod: string; //รวมระยะเวลาในการศึกษา/รวมระยะเวลาในการฝึกอบรม planType: string; // INPLAN ในแผนฯ, OUTPLAN นอกแผนฯ isNoUseBudget: boolean; // + budgetSourceOther: string; // } interface DataSholarship { diff --git a/src/modules/09_scholarship/views/detail.vue b/src/modules/09_scholarship/views/detail.vue index 5f13b1c..a3fa770 100644 --- a/src/modules/09_scholarship/views/detail.vue +++ b/src/modules/09_scholarship/views/detail.vue @@ -48,6 +48,21 @@ const budgetSourceOp = ref([ { id: "OTHER", name: "เงินอื่นๆ" }, ]); +const useOfficialTimeOp = ref([ + { + id: "NOUSETIME", + name: "ไม่ใช้เวลาราชการ", + }, + { + id: "USETIME", + name: "ใช้เวลาราชการ", + }, + { + id: "SOMETIME", + name: "ใช้เวลาราชการบางส่วน", + }, +]); + const formBody = reactive({ profileId: "", rank: "", //ยศ @@ -110,6 +125,7 @@ const formBody = reactive({ studyAbroadEndDate: null, //วันสิ้นสุดการศึกษาดูงานต่างประเทศ totalPeriod: "", //รวมระยะเวลาในการศึกษา/รวมระยะเวลาในการฝึกอบรม planType: "", + budgetSourceOther: "", isNoUseBudget: false, }); @@ -156,8 +172,12 @@ const scholarshipTypeOp = ref([ name: " ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยงานภายนอก (หลักสูตรประเภทนักบริหาร)", }, { - id: "RESEARCH", - name: "ศึกษา ฝึกอบรม ประชุม ดูงาน และปฏิบัติการวิจัย ณ ต่างประเทศ", + id: "STUDY", + name: "ทุนการศึกษา ณ ต่างประเทศ", + }, + { + id: "TRAINING", + name: "ทุนฝึกอบรม ณ ต่างประเทศ", }, ]); @@ -525,86 +545,9 @@ onMounted(async () => {
-
- - - - - - - - แก้ไขข้อมูลรายงานตัวกลับเข้ารับราชการ - - - - - - - - ดาวน์โหลดฟอร์มต้นแบบ .docx - - - - - - - - ดาวน์โหลดฟอร์มต้นแบบ .pdf - - - - - - -
- -
- - - - -
-
+ +
{
-
+
-
+
-
-
- +
+
+ + + + + +
+
+ +
+
- - - - -
-
- -
-
- -
-
- + +
+
+ +
-
-
- -
-
- +
+
+ +
+
+ + + + + +
+
+ + + + + +
+
- - - - + + +
+
+ +
-
- - - - - -
-
- -
-
- -
-
-
+
-
+
- -
-
- -
-
- - - - - -
-
- - - -