Merge branch 'develop' of https://github.com/Frappet/bma-ehr-frontend into develop

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2023-08-30 16:45:28 +07:00
commit d3067b3b65
9 changed files with 315 additions and 62 deletions

View file

@ -157,4 +157,5 @@ export default {
orderCPMUpdate: (type: string, id: string) => `${order}/order/${type}/detail/${id}`,
};

View file

@ -6,6 +6,7 @@ const reportOrder = `${env.API_REPORT2_URI}/report/order`;
const reportRetire = `${env.API_REPORT2_URI}/report/retire`;
const reportProbation = `${env.API_REPORT2_URI}/report/probation`;
const reportResign = `${env.API_REPORT2_URI}/report/resign/33`;
const reportTransfer = `${env.API_REPORT2_URI}/report/transfer`;
export default {
reportOrderCover: (fileType: string, id: string, commandCode: string) =>
@ -30,5 +31,8 @@ export default {
reportEvaluate:(type:string, id:string) => `${reportProbation}/16/${type}/${id}`,
reportEvaluateChairman:(type:string, id:string) => `${reportProbation}/17/${type}/${id}`,
reportEvaluateResult:(type:string, id:string) => `${reportProbation}/18/${type}/${id}`,
reportSurvey:(type:string, id:string) => `${reportProbation}/19/${type}/${id}`
};
reportSurvey:(type:string, id:string) => `${reportProbation}/19/${type}/${id}`,
//filetransfer
reportTransferFile:(no:number,type:string,id:string) => `${reportTransfer}/${no}/${type}/${id}`
};

View file

@ -250,12 +250,12 @@ const menuList = readonly<any[]>([
path: "appoint-promote",
role: "placement",
},
{
key: 6.9,
label: "รายการย้าย" /* */,
path: "relocation",
role: "placement",
},
// {
// key: 6.9,
// label: "รายการย้าย" /* */,
// path: "relocation",
// role: "placement",
// },
{
key: 6.1,
label: "รายการอื่นๆ" /* */,

View file

@ -89,11 +89,11 @@ const fecthlistappointment = async () => {
console.log(res);
let response = res.data.result;
listRecevice.value = response;
// console.log(response);
console.log(response);
rows.value = response.map((e: any) => ({
personalId: e.id,
citizenId: e.citizenId,
fullname: e.prefix+e.firstname + " " + e.lastname,
fullname: e.prefix + e.firstname + " " + e.lastname,
organizationName:
e.organizationName +
" " +
@ -107,12 +107,17 @@ const fecthlistappointment = async () => {
positionNumber: e.positionNumber,
positionPath: e.positionPath,
status: status(e.status),
createdAt:date2Thai(e.createdAt),
createdAt: date2Thai(e.createdAt),
birthday: e.dateOfBirth == null ? "-" : date2Thai(e.dateOfBirth),
}));
// console.log(rows.value);
rows2.value = rows.value.filter((e: any) => e.orgName !== null);
rows2.value = rows.value.filter(
(e: any) =>
e.orgName !== null &&
e.status !== "ส่งรายชื่อไปออกคำสั่ง" &&
e.status !== "ออกคำสั่งเสร็จแล้ว"
);
})
.catch((e) => {
console.log(typeof e);
@ -127,7 +132,10 @@ const fecthTypeOption = async () => {
.get(config.API.typeOrder())
.then((res) => {
optionsType.value = res.data.result.filter(
(e: any) => e.commandCode === "C-PM-05" || e.commandCode === "C-PM-06"
(e: any) =>
e.commandCode === "C-PM-05" ||
e.commandCode === "C-PM-06" ||
e.commandCode === "C-PM-07"
);
})
.catch((e) => {
@ -173,7 +181,6 @@ const columns = ref<QTableProps["columns"]>([
field: "organizationName",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "birthday",
@ -252,7 +259,6 @@ const columns2 = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
const openModalTree = (id: string) => {
@ -279,35 +285,64 @@ const deleteAppoint = async (id: string) => {
hideLoader();
});
};
const clickAddlist = () => {
dialogConfirm($q, () => createdAppoint());
};
const createdAppoint = async () => {
let pId: string[] = [];
selected.value.forEach((e: any) => {
pId.push(e.personalId);
});
let data = {
id: pId,
};
console.log(data);
showLoader();
await http
.put(config.API.apppointmentReport(type.value), data)
.then((res: any) => {
console.log(res);
success($q, "บันทึกสำเร็จ");
})
.catch((e: any) => {
console.log(e);
messageError($q, e);
})
.finally(() => {
hideLoader();
fecthlistappointment();
selected.value = [];
modal.value = false;
if (type.value == "c6de09ef-c1f8-4a39-aa31-c7ed88df01d9") {
let pId: string[] = [];
selected.value.forEach((e: any) => {
pId.push(e.personalId);
});
let data = {
id: pId,
};
console.log(data);
showLoader();
await http
.post(config.API.relocationMainReport(), data)
.then((res: any) => {
console.log(res);
success($q, "บันทึกสำเร็จ");
})
.catch((e) => {
console.log(e);
messageError($q, e);
})
.finally(async () => {
hideLoader();
fecthlistappointment();
selected.value = [];
modal.value = false;
});
} else {
let pId: string[] = [];
selected.value.forEach((e: any) => {
pId.push(e.personalId);
});
let data = {
id: pId,
};
console.log(data);
showLoader();
await http
.put(config.API.apppointmentReport(type.value), data)
.then((res: any) => {
console.log(res);
success($q, "บันทึกสำเร็จ");
})
.catch((e: any) => {
console.log(e);
messageError($q, e);
})
.finally(() => {
hideLoader();
fecthlistappointment();
selected.value = [];
modal.value = false;
});
}
};
const closeModalTree = async () => {
@ -340,11 +375,10 @@ const pagination = ref({
page: 1,
rowsPerPage: 10,
});
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">
รายการแตงต-เลอน
รายการแตงต-เลอน-าย
</div>
<q-card flat bordered class="col-12 q-mt-sm">
<q-separator />
@ -363,7 +397,7 @@ const pagination = ref({
color="add"
icon="mdi-account-arrow-right"
>
<q-tooltip>งไปออกคำสงแตงต-เลอน</q-tooltip>
<q-tooltip>งไปออกคำสงแตงต-เลอน-าย</q-tooltip>
</q-btn>
<q-space />
@ -413,7 +447,6 @@ const pagination = ref({
row-key="citizenId"
:visible-columns="visibleColumns"
v-model:pagination="pagination"
>
<template v-slot:header="props">
<q-tr :props="props">
@ -503,7 +536,10 @@ const pagination = ref({
</q-td>
<q-td auto-width>
<q-btn
v-if="props.row.status !== 'ส่งรายชื่อไปออกคำสั่ง' && props.row.status !== 'ออกคำสั่งแล้ว'"
v-if="
props.row.status !== 'ส่งรายชื่อไปออกคำสั่ง' &&
props.row.status !== 'ออกคำสั่งแล้ว'
"
icon="mdi-dots-vertical"
size="12px"
color="grey-7"
@ -532,9 +568,7 @@ const pagination = ref({
name="mdi-bookmark-outline"
/>
</q-item-section>
<q-item-section
>เลอกหนวยงานทบโอน</q-item-section
>
<q-item-section>เลอกหนวยงาน/ตำแหน</q-item-section>
</q-item>
<q-item
clickable
@ -565,7 +599,10 @@ const pagination = ref({
<q-dialog v-model="modal">
<q-card style="width: 1200px; max-width: 80vw">
<DialogHeader title="ส่งไปรายการแต่งตั้ง - เลื่อน" :close="clickClose" />
<DialogHeader
title="ส่งไปรายการแต่งตั้ง - เลื่อน - ย้าย"
:close="clickClose"
/>
<q-separator />
<q-card-section class="q-pt-none">
<div class="row justify-between">
@ -576,7 +613,7 @@ const pagination = ref({
dense
v-model="type"
:options="optionsType"
label="คำสั่งแต่งตั่ง - เลื่อน"
label="คำสั่งแต่งตั่ง - เลื่อน - ย้าย"
style="width: 400px; max-width: auto"
emit-value
map-options

View file

@ -114,7 +114,7 @@ const fecthlistOthet = async () => {
fullname: `${r.prefix ?? ""} ${r.firstname ?? ""} ${r.lastname ?? ""}`,
}));
console.log(rows.value);
rows2.value = rows.value.filter((e: any) => e.orgName !== null);
rows2.value = rows.value.filter((e: any) => e.orgName !== null && e.status !== 'REPORT'&& e.status !== 'DONE');
})
.catch((e) => {
messageError($q);

View file

@ -49,7 +49,36 @@ const status = ref<string>("");
const myForm = ref<QForm | null>(null);
const edit = ref<boolean>(false);
const rows = ref<any[]>([]);
const columns = ref<QTableProps["columns"]>([
{
name: "no",
align: "left",
label: "ลำดับ",
sortable: true,
field: "no",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "fileName",
align: "left",
label: "ชื่อไฟล์",
sortable: true,
field: "fileName",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "btnMicrosoft",
align: "right",
label: "ปุ่ม",
sortable: true,
field: "btnMicrosoft",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
const profileId = ref<string>("");
const educationOld = ref<string>("");
const organizationPositionOld = ref<string>("");
@ -170,7 +199,17 @@ const getData = async () => {
.get(config.API.receiveDataId(paramsId.toString()))
.then(async (res: any) => {
const data = res.data.result;
// console.log(data);
let list: any[] = [];
if (data.docs.length > 0) {
data.docs.map((doc: any) => {
list.push({
pathName: doc.pathName ?? "",
fileName: doc.fileName ?? "",
});
});
}
rows.value = list;
profileId.value = data.profileId;
title.value.fullname = `${data.firstname ?? "-"} ${data.lastname ?? "-"}`;
title.value.organizationPositionOld = data.organizationPositionOld ?? "-";
@ -1012,6 +1051,37 @@ const getClass = (val: boolean) => {
</div>
</div>
</q-form>
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div class="bg-grey-1 q-pa-sm col-12 row items-center text-primary">
<div class="q-pl-sm text-weight-bold text-dark">เอกสารเพมเต</div>
</div>
<div class="col-12"><q-separator /></div>
<div class="col-12">
<d-table
:rows="rows"
:columns="columns"
row-key="fileName"
hide-header
hide-bottom
>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td key="no" :props="props">
{{ props.rowIndex + 1 }}
</q-td>
<q-td key="fileName" :props="props">
{{ props.row.fileName }}
</q-td>
<q-td key="btnMicrosoft" :props="props">
<q-btn type="a" target="_blank" :href="props.row.pathName" flat dense round color="red" icon="picture_as_pdf">
<q-tooltip>ไฟล PDF</q-tooltip>
</q-btn>
</q-td>
</q-tr>
</template>
</d-table>
</div>
</q-card>
</q-card>
</template>

View file

@ -45,6 +45,8 @@ const popup = () => {
modal.value = true;
};
const modalupload = ref<boolean>(false);
const modalTree = ref<boolean>(false);
const personal = ref<any[]>([]);
const personalId = ref<string>("");
@ -70,7 +72,8 @@ const visibleColumns2 = ref<string[]>([
const filterKeyword = ref<string>("");
const filterKeyword2 = ref<string>("");
const filterRef = ref<any>(null);
const files = ref<any>();
const fileDocDataUpload = ref<File[]>([]);
const listRecevice = ref<any[]>([]);
const filters = ref<ResponseRow[]>([]);
const rows = ref<ResponseRow[]>([
@ -309,6 +312,32 @@ const fecthlistRecevice = async () => {
});
};
const fileUploadDoc = async (files: any) => {
files.forEach((file: any) => {
fileDocDataUpload.value.push(file);
});
};
const addUpload= async () => {
// showLoader();
// await http
// .post(config.API.listRoundInsignia())
// .then(() => {
// success($q, "");
// })
// .catch((e) => {
// messageError($q, e);
// })
// .finally(async () => {
// hideLoader();
// });
};
const SaveData = async () => {
await addUpload();
await clickCloseUpload();
};
const resetFilter = () => {
filterKeyword.value = "";
filterKeyword2.value = "";
@ -328,6 +357,9 @@ const add = () => {
const clickClose = () => {
modal.value = false;
};
const clickCloseUpload = () => {
modalupload.value = false;
};
const openModalTree = (id: string) => {
personalId.value = id;
@ -337,6 +369,11 @@ const openModalTree = (id: string) => {
modalTree.value = true;
};
const openUpload = (id: string) => {
personalId.value = id;
modalupload.value = true;
};
const openDelete = (id: string) => {
dialogRemove($q, async () => await fetchDataDelete(id));
};
@ -594,6 +631,35 @@ const saveOrder = async () => {
>เลอกหนวยงานทบโอน</q-item-section
>
</q-item>
<q-item
clickable
v-close-popup
@click="openUpload(props.row.personalId)"
:disable="
props.row.status == 'REPORT' ||
props.row.status == 'DONE'
"
>
<q-item-section
style="min-width: 0px"
avatar
class="q-py-sm"
>
<q-icon
:color="
props.row.status == 'REPORT' ||
props.row.status == 'DONE'
? 'grey'
: 'blue'
"
size="xs"
name="attach_file"
/>
</q-item-section>
<q-item-section
>พโหลดเอกสาร</q-item-section
>
</q-item>
<q-item
clickable
v-close-popup
@ -794,6 +860,47 @@ const saveOrder = async () => {
</q-card>
</q-dialog>
<q-dialog v-model="modalupload">
<q-card style="width: 600px">
<DialogHeader title="อัพโหลดเอกสาร" :close="clickCloseUpload" />
<q-separator />
<q-separator />
<q-card-section class="q-pt-none">
<div class="col-12 row items-center q-col-gutter-sm">
<div class="col-12">
<q-file
outlined
dense
v-model="files"
@added="fileUploadDoc"
label="อัพโหลดเอกสาร"
lazy-rules
>
<!-- :rules="[
(val) => val || 'กรุณาเลือกไฟล์หนังสือถึงหน่วยงานที่รับโอน',
]" -->
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
</div>
</q-card-section>
<q-card-actions class="text-primary q-py-sm">
<q-space />
<q-btn
flat
round
color="public"
@click="SaveData"
icon="mdi-content-save-outline"
>
<q-tooltip>นท</q-tooltip>
</q-btn>
</q-card-actions>
</q-card>
</q-dialog>
<DialogOrgTree
v-model:modal="modalTree"
:close="closeModalTree"

View file

@ -167,10 +167,10 @@
{{ props.row.fileName }}
</q-td>
<q-td key="btnMicrosoft" :props="props">
<q-btn flat dense round color="red" icon="picture_as_pdf">
<q-tooltip>ดาวนโหลด</q-tooltip>
<q-btn flat dense round color="red" icon="picture_as_pdf" @click="fileDownload(props.row.no,'pdf')">
<q-tooltip>ไฟล PDF</q-tooltip>
</q-btn>
<q-btn flat dense round color="blue" icon="mdi-file-word">
<q-btn flat dense round color="blue" icon="mdi-file-word" @click="fileDownload(props.row.no,'docx')">
<q-tooltip>ไฟล WORD</q-tooltip>
</q-btn>
</q-td>
@ -423,8 +423,9 @@ const $q = useQuasar();
const route = useRoute();
const router = useRouter();
const mixin = useCounterMixin();
const id = ref<string>("")
const dataId = (route.params.id as string);
const dataId = route.params.id;
const {
date2Thai,
messageError,
@ -463,7 +464,34 @@ const responseData = ref<ResponseDataDetail>({
status: "",
fullname: "",
});
const downloadFile = (response: any, filename: string) => {
const link = document.createElement("a");
var fileName = filename;
link.href = window.URL.createObjectURL(new Blob([response.data]));
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
const fileDownload = async (no:number,type:string) =>{
showLoader();
await http
.get(config.API.reportTransferFile(no,type,id.value), {
responseType: "blob",
})
.then(async (res) => {
downloadFile(
res,
`_ครั้งที่.${type}`
);
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
};
const rows = ref<TypeFile[]>([]);
const columns = ref<QTableProps["columns"]>([
{
@ -503,22 +531,28 @@ onMounted(async () => {
await getData();
});
const rowsFileDownload = ref<TypeFile[]>([{
const rowsFileDownload = ref<any[]>([{
no:1,
fileName: "คําร้องขอโอนไปถึงส่วนราชการอื่นนอก กรุงเทพมหานครที่ข้าราชการประสงค์ขอโอน",
pathName: ""
},{
no:2,
fileName: "หนังสือแจ้งสํานักงานการเจ้าหน้าที่ สํานักปลัดกรุงเทพมหานคร ให้ทราบตําแหน่งและตําแหน่งเลขที่ที่ดําเนินการให้โอน",
pathName: ""
},{
no:3,
fileName: "หนังสือยินยอมให้โอนและวันที่พร้อมจะให้โอนไปยัง หน่วยงานที่รับโอน",
pathName: ""
},{
no:4,
fileName: "หนังสือแจ้งสหกรณ์ออมทรัพย์กรุงเทพมหานครเพื่อขอ ตรวจสอบภาระหนี้สินสหกรณ์ออมทรัพย์",
pathName: ""
},{
no:5,
fileName: "หนังสือถึงสํานักงานการเจ้าหน้าที่ สํานักปลัดกรุงเทพมหานครเพื่อขอตรวจสอบพฤติการณ์ทางวินัย และภาระหนี้สินสวัสดิการ",
pathName: ""
},{
no:6,
fileName: "หนังสือถึงสถาบันพัฒนาข้าราชการกรุงเทพมหานครเพื่อขอตรวจสอบเรื่องภาระผูกพันการรับทุนและการลา ศึกษาต่อกับทางกรุงเทพมหานคร",
pathName: ""
}]);
@ -529,7 +563,7 @@ const getData = async () => {
.get(config.API.transferId(dataId.toString()))
.then((res: any) => {
const data = res.data.result;
// console.log(data);
id.value = data.id
let list: TypeFile[] = [];
if (data.docs.length > 0) {
data.docs.map((doc: TypeFile) => {

View file

@ -488,7 +488,7 @@ const saveOrder = async () => {
<q-dialog v-model="modal">
<q-card style="width: 1200px; max-width: 80vw">
<DialogHeader title="ส่งไปออกคำสั่งโอนออก" :close="closeModal" />
<DialogHeader title="ส่งไปออกคำสั่ง" :close="closeModal" />
<q-separator />
<q-card-section class="q-pt-none">
<div class="row justify-end">