Compare commits

..

No commits in common. "dev" and "v1.0.18" have entirely different histories.
dev ... v1.0.18

4 changed files with 29 additions and 161 deletions

View file

@ -6,7 +6,7 @@ import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import genReport from "@/plugins/genreport";
import { useDataStore } from "@/stores/data";
/** import type*/
import type {
@ -16,6 +16,8 @@ import type {
FromCancelDetail,
} from "@/modules/05_leave/interface/response/leave";
import DialogHeader from "@/components/DialogHeader.vue";
import Workflow from "@/components/Workflow/Main.vue";
import FormLeave from "@/modules/05_leave/components/formDetail/01_SickForm.vue";
import FormChildbirth from "@/modules/05_leave/components/formDetail/04_HelpWifeBirthForm.vue";
import FormHoliday from "@/modules/05_leave/components/formDetail/05_VacationForm.vue";
@ -31,6 +33,7 @@ import FormCancel from "@/modules/05_leave/components/formDetail/formCancel.vue"
const $q = useQuasar();
const dataStore = useLeaveStore();
const mainStore = useDataStore();
const { convertStatud } = dataStore;
const mixin = useCounterMixin();
const {
@ -408,28 +411,6 @@ async function onSubmit() {
});
}
/**
* งกนดาวนโหลดไฟล
* @param id รหสการลา
* @param fileName อไฟล
* @param type ประเภทไฟล
*/
async function onClickDownloadFile(id: string, fileName: string, type: string) {
showLoader();
await http
.get(config.API.leaveReport(id))
.then(async (res) => {
const data = res.data.result;
await genReport(data, fileName, type);
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
/**** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาแล้วเปิด modal */
watch(
() => props.modal,
@ -453,62 +434,10 @@ watch(
v-if="props.leaveStatus != 'DELETE'"
style="width: 900px; max-width: 80vw"
>
<q-toolbar>
<q-toolbar-title class="text-subtitle2 text-bold">
{{ ` ${titleMain} ${titleName}` }}
<q-btn class="q-mr-sm" icon="mdi-download" round color="primary" flat>
<q-tooltip>ดาวนโหลดไฟล</q-tooltip>
<q-menu>
<q-list style="min-width: 100px">
<q-item
clickable
v-close-popup
@click="
onClickDownloadFile(
formData.id,
formData.leaveSubTypeName
? formData.leaveSubTypeName
: formData.leaveTypeName,
'docx',
)
"
>
<q-item-section avatar>
<q-icon color="blue" name="mdi-file-word" />
</q-item-section>
<q-item-section>ไฟล .DOCX</q-item-section>
</q-item>
<q-item
clickable
v-close-popup
@click="
onClickDownloadFile(
formData.id,
formData.leaveSubTypeName
? formData.leaveSubTypeName
: formData.leaveTypeName,
'pdf',
)
"
>
<q-item-section avatar>
<q-icon color="red" name="mdi-file-pdf" />
</q-item-section>
<q-item-section>ไฟล .pdf</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>
</q-toolbar-title>
<q-btn
icon="close"
unelevated
round
dense
@click="props.onClickClose?.()"
style="color: #ff8080; background-color: #ffdede"
<DialogHeader
:tittle="`${titleMain} ${titleName}`"
:close="props.onClickClose"
/>
</q-toolbar>
<q-separator />
<q-card-section v-if="isLoading">
@ -651,62 +580,10 @@ watch(
</q-card>
<q-card v-if="props.leaveStatus === 'DELETE'" style="min-width: 40vw">
<q-toolbar>
<q-toolbar-title class="text-subtitle2 text-bold">
{{ ` ${titleMainCancle} ${titleName}` }}
<q-btn class="q-mr-sm" icon="mdi-download" round color="primary" flat>
<q-tooltip>ดาวนโหลดไฟล</q-tooltip>
<q-menu>
<q-list style="min-width: 100px">
<q-item
clickable
v-close-popup
@click="
onClickDownloadFile(
formData.id,
formData.leaveSubTypeName
? formData.leaveSubTypeName
: formData.leaveTypeName,
'docx',
)
"
>
<q-item-section avatar>
<q-icon color="blue" name="mdi-file-word" />
</q-item-section>
<q-item-section>ไฟล .DOCX</q-item-section>
</q-item>
<q-item
clickable
v-close-popup
@click="
onClickDownloadFile(
formData.id,
formData.leaveSubTypeName
? formData.leaveSubTypeName
: formData.leaveTypeName,
'pdf',
)
"
>
<q-item-section avatar>
<q-icon color="red" name="mdi-file-pdf" />
</q-item-section>
<q-item-section>ไฟล .pdf</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>
</q-toolbar-title>
<q-btn
icon="close"
unelevated
round
dense
@click="props.onClickClose?.()"
style="color: #ff8080; background-color: #ffdede"
<DialogHeader
:tittle="`${titleMainCancle} ${titleName}`"
:close="props.onClickClose"
/>
</q-toolbar>
<q-separator />
<q-card-section v-if="isLoading">

View file

@ -43,7 +43,6 @@ interface LeaveItem {
all: number;
use: number;
remain: number;
leaveCountApproveCount: number;
}
interface MainList {

View file

@ -141,14 +141,12 @@ async function fetchStatsTable() {
value:
el.leaveLimit > 0
? Math.round(
(Number(el.leaveCountApprove) / Number(el.leaveLimit)) *
100,
(Number(el.leaveCountApprove) / Number(el.leaveLimit)) * 100
)
: 0,
all: Number(el.leaveLimit),
use: el.leaveCountApprove,
remain: Number(el.leaveLimit) - Number(el.leaveCountApprove),
leaveCountApproveCount: el.leaveCountApproveCount,
}));
});
stat.forEach((item) => itemPie.value.push(...item));
@ -256,7 +254,7 @@ onMounted(async () => {
</q-knob>
</div>
<div class="col-12 text-center text-weight-medium">
{{ item.text }}
ลาพกผอน
</div>
</div>
<div class="row gt-xs"><q-separator vertical /></div>
@ -264,19 +262,17 @@ onMounted(async () => {
<div class="col-12 row text-dark text-body2 items-center">
<div class="col-12 row q-pa-xs q-px-md row">
<span class="text-grey-7 col-6">ได</span>
<span class="text-weight-bold">{{ item.all }} </span>
<span class="text-weight-bold">{{ item.all }}</span>
</div>
<div class="col-12"><q-separator /></div>
<div class="col-12 row q-pa-xs q-px-md">
<span class="text-grey-7 col-6">ใชไป</span>
<span class="text-weight-bold">{{ item.use }} </span>
<span class="text-weight-bold">{{ item.use }}</span>
</div>
<div class="col-12"><q-separator /></div>
<div class="col-12 row q-pa-xs q-px-md">
<span class="text-grey-7 col-6">คงเหล</span>
<span class="text-weight-bold"
>{{ item.remain }} </span
>
<span class="text-weight-bold">{{ item.remain }}</span>
</div>
</div>
</div>
@ -298,11 +294,11 @@ onMounted(async () => {
flat
class="shadow-0 col-12 fit row items-center q-px-lg"
>
<div class="text-subtitle2 col-4">{{ item.text }}</div>
<div class="text-subtitle2 col-4">ลาปวย</div>
<div class="text-subtitle2 col-8">
<span class="text-grey-7 q-pr-md">ใชไป</span>
<span class="text-weight-bold">{{ item.use }} </span>
({{ item.leaveCountApproveCount }} คร)
<span class="text-weight-bold">{{ item.use }}</span>
<!-- <span class="text-grey-7 q-pl-md">ลา</span> -->
</div>
</q-card>
</div>
@ -321,11 +317,11 @@ onMounted(async () => {
flat
class="shadow-0 col-12 fit row items-center q-px-lg"
>
<div class="text-subtitle2 col-4">{{ item.text }}</div>
<div class="text-subtitle2 col-4">ลากจสวนต</div>
<div class="text-subtitle2 col-8">
<span class="text-grey-7 q-pr-md">ใชไป</span>
<span class="text-weight-bold">{{ item.use }} </span>
({{ item.leaveCountApproveCount }} คร)
<span class="text-weight-bold">{{ item.use }}</span>
<!-- <span class="text-grey-7 q-pl-md">ลา</span> -->
</div>
</q-card>
</div>

View file

@ -2,6 +2,7 @@ import axios from "axios";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
const mixin = useCounterMixin();
const { showLoader, hideLoader } = mixin;
@ -31,16 +32,11 @@ async function genReport(data: any, fileName: string, type: string = "docx") {
const url = URL.createObjectURL(blob);
const baseName = fileName.trim();
const extension = type === "docx" ? "docx" : "pdf";
const link = document.createElement("a");
link.href = url;
link.download = `${baseName}.${extension}`;
document.body.appendChild(link);
link.click();
setTimeout(() => {
document.body.removeChild(link);
URL.revokeObjectURL(url);
}, 100);
// const extension = type === "docx" ? "docx" : "pdf";
await downloadBlobFile({
downloadUrl: url,
fileName: baseName,
});
}
})
.catch((err) => {