Merge branch 'develop' into dev-tee

# Conflicts:
#	src/api/07_insignia/api.insignia.ts
This commit is contained in:
setthawutttty 2023-09-27 15:40:49 +07:00
commit 6bbec104de
9 changed files with 248 additions and 93 deletions

View file

@ -98,4 +98,8 @@ export default {
reportInsignia: (type: string, fileType: string, fileId: string) => reportInsignia: (type: string, fileType: string, fileId: string) =>
`${report}/insignia/${type}/${fileType}/${fileId}`, `${report}/insignia/${type}/${fileType}/${fileId}`,
// เจ้าหน้าที่เป็นคนอัปโหลดไฟล์
uploadfileOnlyInsignia: (requestId: string) => `${insignia}/request/upload/${requestId}`,
// สกจ. ตีกลับให้หัวหน้าเขต
rejectRequest: (id: string, ocId: string) => `${insignia}/request/head/reject/${id}/${ocId}`
}; };

View file

@ -242,4 +242,6 @@ const uploadData = async () => {
const downloadData = async (path: string) => { const downloadData = async (path: string) => {
window.open(path); window.open(path);
}; };
</script> </script>

View file

@ -1021,27 +1021,60 @@ const closeKp7Short = () => {
dialogShort.value = false; dialogShort.value = false;
}; };
const helpPost = () => { const helpPost = async () => {
const formData = new FormData();
formData.append("id", profileId.value);
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
const formData = new FormData(); showLoader();
formData.append("id", profileId.value); await http
await http.post(config.API.placemenHelpGov, formData); .post(config.API.placemenHelpGov, formData)
.then(() => {
success($q, "ดำเนินการสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
}; };
const repatriationPost = async () => { const repatriationPost = async () => {
const formData = new FormData();
formData.append("id", profileId.value);
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
const formData = new FormData(); showLoader();
formData.append("id", profileId.value); await http
await http.post(config.API.placemenRepatriation, formData); .post(config.API.placemenRepatriation, formData)
.then(() => {
success($q, "ดำเนินการสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
}; };
const appointPost = async () => { const appointPost = async () => {
const formData = new FormData();
formData.append("id", profileId.value);
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
const formData = new FormData(); showLoader();
formData.append("id", profileId.value); await http
await http.post(config.API.placemenAppointment, formData); .post(config.API.placemenAppointment, formData)
.then(() => {
success($q, "ดำเนินการสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
}; };
@ -1054,34 +1087,78 @@ const appointPost = async () => {
// }; // };
const outPost = async () => { const outPost = async () => {
const formData = new FormData();
formData.append("id", profileId.value);
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
const formData = new FormData(); showLoader();
formData.append("id", profileId.value); await http
await http.post(config.API.retirementOut, formData); .post(config.API.retirementOut, formData)
.then(() => {
success($q, "ดำเนินการสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
}; };
const dischargePost = async () => { const dischargePost = async () => {
const formData = new FormData();
formData.append("id", profileId.value);
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
const formData = new FormData(); showLoader();
formData.append("id", profileId.value); await http
await http.post(config.API.retirementDischarge, formData); .post(config.API.retirementDischarge, formData)
.then(() => {
success($q, "ดำเนินการสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
}; };
const expulsionPost = async () => { const expulsionPost = async () => {
const formData = new FormData();
formData.append("id", profileId.value);
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
const formData = new FormData(); showLoader();
formData.append("id", profileId.value); await http
await http.post(config.API.retirementExpulsion, formData); .post(config.API.retirementExpulsion, formData)
.then(() => {
success($q, "ดำเนินการสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
}; };
const otherPost = async () => { const otherPost = async () => {
const formData = new FormData();
formData.append("id", profileId.value);
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
const formData = new FormData(); showLoader();
formData.append("id", profileId.value); await http
await http.post(config.API.placemenOther, formData); .post(config.API.placemenOther, formData)
.then(() => {
success($q, "ดำเนินการสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}); });
}; };

View file

@ -81,7 +81,7 @@ const FileDownload = async (type: string) => {
.then(async (res) => { .then(async (res) => {
downloadFile( downloadFile(
res, res,
`แบบบันทึกผล(ผู้บัคับบัญชา)_${fullname.value}_ครั้งที่${numTab.no}.${type}` `แบบบันทึกผล(ผู้บัคับบัญชา)_${fullname.value}_ครั้งที่${numTab.no}.${type}`
); );
}) })
.catch((e) => { .catch((e) => {

View file

@ -7,6 +7,7 @@ import { useQuasar } from "quasar";
import type { FormProprsalsRound2 } from "@/modules/07_insignia/interface/request/Main"; import type { FormProprsalsRound2 } from "@/modules/07_insignia/interface/request/Main";
import config from "@/app.config"; import config from "@/app.config";
import http from "@/plugins/http"; import http from "@/plugins/http";
import { useInsigniaDataStore } from "@/modules/07_insignia/store";
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const {
@ -19,6 +20,7 @@ const {
dialogRemove, dialogRemove,
} = mixin; } = mixin;
const $q = useQuasar(); // noti quasar const $q = useQuasar(); // noti quasar
const storeInsignia = useInsigniaDataStore();
const visibleColumns = ref<string[]>([ const visibleColumns = ref<string[]>([
"period_name", "period_name",
@ -108,7 +110,7 @@ const fetchData = async () => {
period_isActive: e.period_isActive, period_isActive: e.period_isActive,
period_doc: e.period_doc, period_doc: e.period_doc,
period_status: e.period_status.result, period_status: e.period_status.result,
statusRoyal: 'กำลังดำเนินการ' statusRoyal: storeInsignia.convertStatus(e.period_status),
})); }));
}) })
.catch((e) => { .catch((e) => {

View file

@ -816,7 +816,6 @@ const clickShowWarn = () => {
/> />
<q-th v-else></q-th> <q-th v-else></q-th>
</q-tr> </q-tr>
</template> </template>
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr <q-tr
@ -859,16 +858,14 @@ const clickShowWarn = () => {
</q-td> </q-td>
<q-td key="note" class="text-center"> <q-td key="note" class="text-center">
<q-btn <q-btn
v-if="props.rowIndex == 2" v-if="props.row.reason"
icon="mdi-information-outline" icon="mdi-information-outline"
size="12px" size="12px"
color="blue" color="blue"
flat flat
round round
dense dense
@click.stop=" @click.stop="clickShowreson(props.row.name, props.row.reason)"
clickShowreson(props.row.name, 'จะได้เลื่อนเงินเดือน')
"
> >
<q-tooltip>หมายเหต</q-tooltip> <q-tooltip>หมายเหต</q-tooltip>
</q-btn> </q-btn>

View file

@ -142,6 +142,8 @@ const changround = async () => {
}; };
const requestNote = ref<string>(""); const requestNote = ref<string>("");
const requestStatus = ref<string>(""); const requestStatus = ref<string>("");
const requestId = ref<string>("");
const document = ref<string>("");
// //
const fecthInsigniaByOc = async ( const fecthInsigniaByOc = async (
@ -156,6 +158,8 @@ const fecthInsigniaByOc = async (
.then(async (res) => { .then(async (res) => {
requestNote.value = res.data.result.requestNote; requestNote.value = res.data.result.requestNote;
requestStatus.value = res.data.result.requestStatus; requestStatus.value = res.data.result.requestStatus;
requestId.value = res.data.result.requestId;
document.value = res.data.result.document;
await DataStore.fetchData(res.data.result.items); // await DataStore.fetchData(res.data.result.items); //
await DataStore.fetchDataInsignia(res.data.result); // await DataStore.fetchDataInsignia(res.data.result); //
loading.value = true; loading.value = true;
@ -279,11 +283,27 @@ const directorApproved = async () => {
); );
}; };
// requestStatus st5 adminRole // requestStatus st5 adminRole
const backToEditinsignia2Role = async () => { const backToEditinsignia2Role = async (reason: string) => {
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
console.log("รอ API"); await http
closepopupBackToInsignia2Role(); .put(config.API.rejectRequest(round.value, DataStore.typeOc), {
success($q, " ตีกลับรอบการเสนอขอ รอ API"); reason: reason,
})
.then(async () => {
await fecthInsigniaByOc(
round.value,
DataStore.typeOc,
"officer",
tab.value
);
success($q, "การตีกลับสำเร็จ");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
closepopupBackToInsignia2Role();
});
}); });
}; };
// //
@ -315,23 +335,32 @@ const requestSendNote = async () => {
}); });
}); });
}; };
// //
const fileUpload = ref<any>(null); const fileUpload = ref<any>(null);
const uploadFile = async (event: any) => { const uploadFile = async (event: any) => {
dialogConfirm($q, () => { dialogConfirm($q, async () => {
const selectedFile = event; const selectedFile = event;
const formdata = new FormData(); const formdata = new FormData();
formdata.append("file", selectedFile); formdata.append("Document", selectedFile);
console.log("uploadFile :รอ API"), await http
.put(config.API.uploadfileOnlyInsignia(requestId.value), formdata)
.then(async () => {
await fecthInsigniaByOc(
round.value,
DataStore.agency,
"officer",
tab.value
);
success($q, "อัปโหลดไฟล์สำเร็จ");
fileUpload.value = null;
})
.catch((err) => {
messageError($q, err);
}),
"ยืนยันการอัปโหลดไฟล์", "ยืนยันการอัปโหลดไฟล์",
"ต้องการยืนยันการอัปโหลดไฟล์นี้หรือไม่ ?"; "ต้องการยืนยันการอัปโหลดไฟล์นี้หรือไม่ ?";
}); });
}; };
//
const downloadFile = async () => {
console.log("downloadFile : รอ API");
success($q, "downloadFile : รอ API");
};
</script> </script>
<template> <template>
@ -500,27 +529,31 @@ const downloadFile = async () => {
@click="uploadFile(fileUpload)" @click="uploadFile(fileUpload)"
v-if="fileUpload !== null" v-if="fileUpload !== null"
/> />
<q-btn <div v-if="document">
size="md" <q-btn
icon="mdi-download" size="md"
flat icon="mdi-download"
round flat
color="primary" round
@click="downloadFile" color="primary"
v-if="roleDataStore.insignia1Role" v-if="roleDataStore.insignia1Role"
> :href="document"
<q-tooltip>ดาวนโหลด</q-tooltip> target="_blank"
</q-btn> >
<q-btn <q-tooltip>ดาวนโหลด</q-tooltip>
v-else </q-btn>
color="primary" <q-btn
icon-right="mdi-download" v-else
label="ดาวน์โหลดไฟล์" color="primary"
@click="downloadFile" icon-right="mdi-download"
outline label="ดาวน์โหลดไฟล์"
> outline
<q-tooltip>ดาวนโหลด</q-tooltip></q-btn :href="document"
> target="_blank"
>
<q-tooltip>ดาวนโหลด</q-tooltip></q-btn
>
</div>
<q-space /> <q-space />
<q-btn <q-btn
v-if=" v-if="
@ -553,7 +586,7 @@ const downloadFile = async () => {
@click="directorApproved" @click="directorApproved"
/> />
<q-btn <q-btn
v-if="requestStatus == 'st5' && roleDataStore.adminRole" v-if="requestStatus == 'st6' && roleDataStore.adminRole"
dense dense
unelevated unelevated
label="ตีกลับ" label="ตีกลับ"

View file

@ -36,12 +36,7 @@ export const useInsigniaDataStore = defineStore("insignia", () => {
{ id: '43', title: 'บัญชีระดับผลการประเมินผลการปฏิบัติราชการในรอบ 5 ปี' }, { id: '43', title: 'บัญชีระดับผลการประเมินผลการปฏิบัติราชการในรอบ 5 ปี' },
{ id: '44', title: 'บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ' } { id: '44', title: 'บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ' }
]) ])
const mainTab = ref<string | undefined>("pending"); const mainTab = ref<string | undefined>("pending");
// เรียกราชชื่อการเสนอขอ // เรียกราชชื่อการเสนอขอ
const fetchData = async (data: any) => { const fetchData = async (data: any) => {
if (data !== null) { if (data !== null) {
@ -60,6 +55,8 @@ export const useInsigniaDataStore = defineStore("insignia", () => {
dateSend: date2Thai(e.requestDate), dateSend: date2Thai(e.requestDate),
requestNote: e.requestNote, requestNote: e.requestNote,
employeeType: profileType(e.profileType), employeeType: profileType(e.profileType),
reason: e.reason
})); }));
rows.value = await datalist; rows.value = await datalist;
listinsignia.value = await datalist; listinsignia.value = await datalist;
@ -137,6 +134,17 @@ export const useInsigniaDataStore = defineStore("insignia", () => {
return "ลูกจ้างประจำ"; return "ลูกจ้างประจำ";
} }
}; };
//แปลงสถานะ
function convertStatus(val: string) {
switch (val) {
case "WAITTING":
return "สร้างรอบ"
case "PENDING":
return "กำลังดำเนินการ"
case "DONE":
return "เสร็จสิ้น"
}
}
return { return {
roundId, roundId,
@ -159,5 +167,6 @@ export const useInsigniaDataStore = defineStore("insignia", () => {
roleUser, roleUser,
requestStatus, requestStatus,
optionReport, optionReport,
convertStatus
}; };
}); });

View file

@ -112,11 +112,15 @@ const conclusionFireNo = ref<string>("");
const conclusionFireDate = ref<Date>(new Date()); const conclusionFireDate = ref<Date>(new Date());
const conclusionFireResolution = ref<string>(""); const conclusionFireResolution = ref<string>("");
const typeOrderFilter = ref<any>({
typeOrderOption: [],
});
onMounted(async () => { onMounted(async () => {
if (orderId) { if (orderId) {
fecthTypeOption("hasData"); await fecthTypeOption("hasData");
} else { } else {
fecthTypeOption("noData"); await fecthTypeOption("noData");
} }
}); });
// //
@ -149,6 +153,13 @@ const fecthTypeOption = async (actions: string) => {
commandCode: e.commandCode, commandCode: e.commandCode,
fullname: e.commandCode + " " + e.name, fullname: e.commandCode + " " + e.name,
})); }));
typeOrderFilter.value = res.data.result.map((e: OrederResult) => ({
id: e.id,
name: e.name,
category: e.category,
commandCode: e.commandCode,
fullname: e.commandCode + " " + e.name,
}));
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
@ -249,11 +260,13 @@ const fecthCommand = async () => {
}); });
}; };
const selectCMP = (selectOrder: OrederResult) => { const selectCMP = (selectOrder: OrederResult) => {
fecthExamRoundOption(selectOrder.commandCode); if (selectOrder != null) {
if (selectOrder.commandCode === "C-PM-10") { fecthExamRoundOption(selectOrder.commandCode);
nodeTree(); if (selectOrder.commandCode === "C-PM-10") {
nodeTree();
}
nameOrder.value = DataStore.nameOrderFilter(selectOrder.commandCode);
} }
nameOrder.value = DataStore.nameOrderFilter(selectOrder.commandCode);
//01-04 //01-04
examRound.value = ""; examRound.value = "";
conclusionRegisterNo.value = ""; conclusionRegisterNo.value = "";
@ -598,6 +611,14 @@ const clickSavelist = () => {
} else dialogMessageNotify($q, "โปรดเลือกรายชื่อ"); } else dialogMessageNotify($q, "โปรดเลือกรายชื่อ");
}; };
const filterSelector = (val: any, update: Function, fullname: any) => {
update(() => {
typeOrderOption.value = typeOrderFilter.value.filter(
(v: any) => v.fullname.toLowerCase().indexOf(val.toLowerCase()) > -1
);
});
};
/** /**
* class ดรปแบบแสดงระหวางขอมลทแกไขหรอแสดงเฉยๆ * class ดรปแบบแสดงระหวางขอมลทแกไขหรอแสดงเฉยๆ
* @param val อม input สำหรบแกไขหรอไม * @param val อม input สำหรบแกไขหรอไม
@ -631,6 +652,9 @@ const getClass = (val: boolean) => {
use-input use-input
input-debounce="0" input-debounce="0"
@update:model-value="selectCMP(typeOrder)" @update:model-value="selectCMP(typeOrder)"
@filter="(inputValue:any,
doneFn:Function) => filterSelector(inputValue, doneFn,'typeOrderOption'
) "
/> />
</div> </div>
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
@ -819,7 +843,10 @@ const getClass = (val: boolean) => {
hide-bottom-space hide-bottom-space
/> />
</div> </div>
<div class="col-12 q-mb-md" v-if="typeOrder.commandCode"> <div
class="col-12 q-mb-md"
v-if="typeOrder != null && typeOrder.commandCode"
>
<q-separator /> <q-separator />
</div> </div>
</div> </div>
@ -828,10 +855,11 @@ const getClass = (val: boolean) => {
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if=" v-if="
typeOrder.commandCode === 'C-PM-01' || typeOrder != null &&
typeOrder.commandCode === 'C-PM-02' || (typeOrder.commandCode === 'C-PM-01' ||
typeOrder.commandCode === 'C-PM-03' || typeOrder.commandCode === 'C-PM-02' ||
typeOrder.commandCode === 'C-PM-04' typeOrder.commandCode === 'C-PM-03' ||
typeOrder.commandCode === 'C-PM-04')
" "
> >
<div class="col-xs-12 col-md-12"> <div class="col-xs-12 col-md-12">
@ -978,8 +1006,9 @@ const getClass = (val: boolean) => {
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if=" v-if="
typeOrder.commandCode === 'C-PM-05' || typeOrder != null &&
typeOrder.commandCode === 'C-PM-06' (typeOrder.commandCode === 'C-PM-05' ||
typeOrder.commandCode === 'C-PM-06')
" "
> >
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
@ -1037,7 +1066,7 @@ const getClass = (val: boolean) => {
<!-- C-PM-08 --> <!-- C-PM-08 -->
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if="typeOrder.commandCode === 'C-PM-08'" v-if="typeOrder != null && typeOrder.commandCode === 'C-PM-08'"
> >
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
@ -1101,7 +1130,7 @@ const getClass = (val: boolean) => {
<!-- C-PM-09 --> <!-- C-PM-09 -->
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if="typeOrder.commandCode === 'C-PM-09'" v-if="typeOrder != null && typeOrder.commandCode === 'C-PM-09'"
> >
<div class="col-xs-12 col-md-12"> <div class="col-xs-12 col-md-12">
<q-input <q-input
@ -1220,7 +1249,7 @@ const getClass = (val: boolean) => {
<!-- C-PM-10 --> <!-- C-PM-10 -->
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if="typeOrder.commandCode === 'C-PM-10'" v-if="typeOrder != null && typeOrder.commandCode === 'C-PM-10'"
> >
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<q-input <q-input
@ -1452,8 +1481,9 @@ const getClass = (val: boolean) => {
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if=" v-if="
typeOrder.commandCode === 'C-PM-11' || typeOrder != null &&
typeOrder.commandCode === 'C-PM-12' (typeOrder.commandCode === 'C-PM-11' ||
typeOrder.commandCode === 'C-PM-12')
" "
> >
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
@ -1526,7 +1556,7 @@ const getClass = (val: boolean) => {
<!-- C-PM-13 --> <!-- C-PM-13 -->
<div <div
class="row col-6 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-6 q-col-gutter-x-lg q-col-gutter-y-md"
v-if="typeOrder.commandCode === 'C-PM-13'" v-if="typeOrder != null && typeOrder.commandCode === 'C-PM-13'"
> >
<div class="col-xs-12 col-md-12"> <div class="col-xs-12 col-md-12">
<q-input <q-input
@ -1545,7 +1575,7 @@ const getClass = (val: boolean) => {
<!-- C-PM-14 --> <!-- C-PM-14 -->
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if="typeOrder.commandCode === 'C-PM-14'" v-if="typeOrder != null && typeOrder.commandCode === 'C-PM-14'"
> >
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<q-input <q-input
@ -1617,7 +1647,7 @@ const getClass = (val: boolean) => {
<!-- C-PM-16 --> <!-- C-PM-16 -->
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if="typeOrder.commandCode === 'C-PM-16'" v-if="typeOrder != null && typeOrder.commandCode === 'C-PM-16'"
> >
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
@ -1678,9 +1708,10 @@ const getClass = (val: boolean) => {
<div <div
class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md" class="row col-12 q-col-gutter-x-lg q-col-gutter-y-md"
v-if=" v-if="
typeOrder.commandCode === 'C-PM-18' || typeOrder != null &&
typeOrder.commandCode === 'C-PM-19' || (typeOrder.commandCode === 'C-PM-18' ||
typeOrder.commandCode === 'C-PM-20' typeOrder.commandCode === 'C-PM-19' ||
typeOrder.commandCode === 'C-PM-20')
" "
> >
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">