Compare commits
No commits in common. "dev" and "v1.0.7" have entirely different histories.
35 changed files with 190 additions and 606 deletions
|
|
@ -6,7 +6,7 @@ import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useLeaveStore } from "@/modules/05_leave/store";
|
import { useLeaveStore } from "@/modules/05_leave/store";
|
||||||
import genReport from "@/plugins/genreport";
|
import { useDataStore } from "@/stores/data";
|
||||||
|
|
||||||
/** import type*/
|
/** import type*/
|
||||||
import type {
|
import type {
|
||||||
|
|
@ -16,6 +16,8 @@ import type {
|
||||||
FromCancelDetail,
|
FromCancelDetail,
|
||||||
} from "@/modules/05_leave/interface/response/leave";
|
} 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 FormLeave from "@/modules/05_leave/components/formDetail/01_SickForm.vue";
|
||||||
import FormChildbirth from "@/modules/05_leave/components/formDetail/04_HelpWifeBirthForm.vue";
|
import FormChildbirth from "@/modules/05_leave/components/formDetail/04_HelpWifeBirthForm.vue";
|
||||||
import FormHoliday from "@/modules/05_leave/components/formDetail/05_VacationForm.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 $q = useQuasar();
|
||||||
const dataStore = useLeaveStore();
|
const dataStore = useLeaveStore();
|
||||||
|
const mainStore = useDataStore();
|
||||||
const { convertStatud } = dataStore;
|
const { convertStatud } = dataStore;
|
||||||
const mixin = useCounterMixin();
|
const mixin = useCounterMixin();
|
||||||
const {
|
const {
|
||||||
|
|
@ -203,7 +206,7 @@ async function fetchDataDetail(id: string) {
|
||||||
formData.leaveDateEnd = data.leaveEndDate && date2Thai(data.leaveEndDate);
|
formData.leaveDateEnd = data.leaveEndDate && date2Thai(data.leaveEndDate);
|
||||||
formData.leaveCount = calculateDurationYmd(
|
formData.leaveCount = calculateDurationYmd(
|
||||||
data.leaveStartDate,
|
data.leaveStartDate,
|
||||||
data.leaveEndDate,
|
data.leaveEndDate
|
||||||
);
|
);
|
||||||
formData.leaveWrote = data.leaveWrote ?? "-";
|
formData.leaveWrote = data.leaveWrote ?? "-";
|
||||||
formData.leaveAddress = data.leaveAddress ?? "-";
|
formData.leaveAddress = data.leaveAddress ?? "-";
|
||||||
|
|
@ -252,7 +255,8 @@ async function fetchDataDetail(id: string) {
|
||||||
formData.studyDaySubject = data.studyDaySubject ?? "-";
|
formData.studyDaySubject = data.studyDaySubject ?? "-";
|
||||||
formData.studyDayDegreeLevel = data.studyDayDegreeLevel ?? "-";
|
formData.studyDayDegreeLevel = data.studyDayDegreeLevel ?? "-";
|
||||||
formData.studyDayUniversityName = data.studyDayUniversityName ?? "-";
|
formData.studyDayUniversityName = data.studyDayUniversityName ?? "-";
|
||||||
formData.studyDayTrainingSubject = data.studyDayTrainingSubject ?? "-";
|
formData.studyDayTrainingSubject =
|
||||||
|
data.studyDayTrainingSubject ?? "-" ?? "-";
|
||||||
formData.studyDayTrainingName = data.studyDayTrainingName ?? "-";
|
formData.studyDayTrainingName = data.studyDayTrainingName ?? "-";
|
||||||
formData.studyDayCountry = data.studyDayCountry ?? "-";
|
formData.studyDayCountry = data.studyDayCountry ?? "-";
|
||||||
formData.studyDayScholarship = data.studyDayScholarship ?? "-";
|
formData.studyDayScholarship = data.studyDayScholarship ?? "-";
|
||||||
|
|
@ -379,7 +383,7 @@ async function onClickSave() {
|
||||||
onSubmit();
|
onSubmit();
|
||||||
},
|
},
|
||||||
"ยืนยันการบันทึกข้อมูล",
|
"ยืนยันการบันทึกข้อมูล",
|
||||||
"ต้องการยินยันการบันทึกข้อมูลนี้หรือไม่ ?",
|
"ต้องการยินยันการบันทึกข้อมูลนี้หรือไม่ ?"
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
|
|
@ -408,28 +412,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 */
|
/**** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาแล้วเปิด modal */
|
||||||
watch(
|
watch(
|
||||||
() => props.modal,
|
() => props.modal,
|
||||||
|
|
@ -443,7 +425,7 @@ watch(
|
||||||
? props.leaveId && fetchDataCancelDetail(props.leaveId)
|
? props.leaveId && fetchDataCancelDetail(props.leaveId)
|
||||||
: props.leaveId && fetchDataDetail(props.leaveId);
|
: props.leaveId && fetchDataDetail(props.leaveId);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -453,62 +435,10 @@ watch(
|
||||||
v-if="props.leaveStatus != 'DELETE'"
|
v-if="props.leaveStatus != 'DELETE'"
|
||||||
style="width: 900px; max-width: 80vw"
|
style="width: 900px; max-width: 80vw"
|
||||||
>
|
>
|
||||||
<q-toolbar>
|
<DialogHeader
|
||||||
<q-toolbar-title class="text-subtitle2 text-bold">
|
:tittle="`${titleMain} ${titleName}`"
|
||||||
{{ ` ${titleMain} ${titleName}` }}
|
:close="props.onClickClose"
|
||||||
<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"
|
|
||||||
/>
|
|
||||||
</q-toolbar>
|
|
||||||
|
|
||||||
<q-separator />
|
<q-separator />
|
||||||
<q-card-section v-if="isLoading">
|
<q-card-section v-if="isLoading">
|
||||||
|
|
@ -651,62 +581,10 @@ watch(
|
||||||
</q-card>
|
</q-card>
|
||||||
|
|
||||||
<q-card v-if="props.leaveStatus === 'DELETE'" style="min-width: 40vw">
|
<q-card v-if="props.leaveStatus === 'DELETE'" style="min-width: 40vw">
|
||||||
<q-toolbar>
|
<DialogHeader
|
||||||
<q-toolbar-title class="text-subtitle2 text-bold">
|
:tittle="`${titleMainCancle} ${titleName}`"
|
||||||
{{ ` ${titleMainCancle} ${titleName}` }}
|
:close="props.onClickClose"
|
||||||
<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"
|
|
||||||
/>
|
|
||||||
</q-toolbar>
|
|
||||||
|
|
||||||
<q-separator />
|
<q-separator />
|
||||||
<q-card-section v-if="isLoading">
|
<q-card-section v-if="isLoading">
|
||||||
|
|
|
||||||
|
|
@ -131,11 +131,11 @@ function onValidate() {
|
||||||
formData.append("leaveRangeEnd", formDataSick.leaveRangeEnd);
|
formData.append("leaveRangeEnd", formDataSick.leaveRangeEnd);
|
||||||
formData.append(
|
formData.append(
|
||||||
"leaveStartDate",
|
"leaveStartDate",
|
||||||
convertDateToAPI(formDataSick.leaveStartDate) ?? "",
|
convertDateToAPI(formDataSick.leaveStartDate) ?? ""
|
||||||
);
|
);
|
||||||
formData.append(
|
formData.append(
|
||||||
"leaveEndDate",
|
"leaveEndDate",
|
||||||
convertDateToAPI(formDataSick.leaveEndDate) ?? "",
|
convertDateToAPI(formDataSick.leaveEndDate) ?? ""
|
||||||
);
|
);
|
||||||
formData.append("leaveWrote", formDataSick.leaveWrote);
|
formData.append("leaveWrote", formDataSick.leaveWrote);
|
||||||
formData.append("leaveAddress", dataStore.currentAddress);
|
formData.append("leaveAddress", dataStore.currentAddress);
|
||||||
|
|
@ -202,6 +202,7 @@ function mapPropsToFormData() {
|
||||||
statusCheck.value = props.data.status;
|
statusCheck.value = props.data.status;
|
||||||
leaveId.value = props.data.id;
|
leaveId.value = props.data.id;
|
||||||
formDataSick.leaveDocument = [];
|
formDataSick.leaveDocument = [];
|
||||||
|
console.log(props.data.leaveDocument);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -210,7 +211,7 @@ watch(
|
||||||
() => {
|
() => {
|
||||||
mapPropsToFormData();
|
mapPropsToFormData();
|
||||||
},
|
},
|
||||||
{ deep: true },
|
{ deep: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
/** Hook */
|
/** Hook */
|
||||||
|
|
|
||||||
|
|
@ -293,7 +293,7 @@ function getSearch() {
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
v-if="props.model === 'LV-005'"
|
v-if="props.model === 'LV-005'"
|
||||||
class="col-md-3 col-sm-6"
|
class="col-12 col-sm-4"
|
||||||
dense
|
dense
|
||||||
outlined
|
outlined
|
||||||
readonly
|
readonly
|
||||||
|
|
@ -302,7 +302,7 @@ function getSearch() {
|
||||||
label="จำนวนสิทธิ์การลาที่ได้รับ"
|
label="จำนวนสิทธิ์การลาที่ได้รับ"
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
class="col-md-3 col-sm-6"
|
class="col-12 col-sm-4"
|
||||||
dense
|
dense
|
||||||
outlined
|
outlined
|
||||||
readonly
|
readonly
|
||||||
|
|
@ -312,7 +312,7 @@ function getSearch() {
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
v-if="props.model === 'LV-005'"
|
v-if="props.model === 'LV-005'"
|
||||||
class="col-md-3 col-sm-6"
|
class="col-12 col-sm-4"
|
||||||
dense
|
dense
|
||||||
outlined
|
outlined
|
||||||
readonly
|
readonly
|
||||||
|
|
@ -320,15 +320,6 @@ function getSearch() {
|
||||||
v-model="dataStore.leaveRemain"
|
v-model="dataStore.leaveRemain"
|
||||||
label="จำนวนสิทธิ์การลาคงเหลือ"
|
label="จำนวนสิทธิ์การลาคงเหลือ"
|
||||||
/>
|
/>
|
||||||
<q-input
|
|
||||||
class="col-md-3 col-sm-6"
|
|
||||||
dense
|
|
||||||
outlined
|
|
||||||
readonly
|
|
||||||
bg-color="white"
|
|
||||||
v-model="dataStore.leaveWaitingSummary"
|
|
||||||
label="จำนวนวันที่อยู่ระหว่างการพิจารณา"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</q-card>
|
</q-card>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ async function updatePagination(p: number, ps: number, s: string, d: boolean) {
|
||||||
function convert(val: any) {
|
function convert(val: any) {
|
||||||
if (leaveType.value) {
|
if (leaveType.value) {
|
||||||
const filtertype = leaveType.value.find(
|
const filtertype = leaveType.value.find(
|
||||||
(e: any) => e.id === val.leaveTypeId,
|
(e: any) => e.id === val.leaveTypeId
|
||||||
);
|
);
|
||||||
const type = filtertype?.code;
|
const type = filtertype?.code;
|
||||||
if (type == "LV-006" && val.hajjDayStatus == false) {
|
if (type == "LV-006" && val.hajjDayStatus == false) {
|
||||||
|
|
@ -242,7 +242,7 @@ onMounted(async () => {
|
||||||
:props="props"
|
:props="props"
|
||||||
@click="onClickView(props.row.id, props.row.status)"
|
@click="onClickView(props.row.id, props.row.status)"
|
||||||
>
|
>
|
||||||
{{ props.row.status === "DRAFT" ? "-" : props.row.dateSendLeave }}
|
{{ props.row.dateSendLeave }}
|
||||||
</q-td>
|
</q-td>
|
||||||
|
|
||||||
<q-td key="status" :props="props">
|
<q-td key="status" :props="props">
|
||||||
|
|
@ -419,7 +419,7 @@ onMounted(async () => {
|
||||||
<q-item-label v-if="col.name === 'no'">
|
<q-item-label v-if="col.name === 'no'">
|
||||||
{{ (page - 1) * pageSize + props.rowIndex + 1 }}
|
{{ (page - 1) * pageSize + props.rowIndex + 1 }}
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<q-item-label v-else-if="col.name === 'status'">
|
<q-item-label v-if="col.name === 'status'">
|
||||||
<q-icon
|
<q-icon
|
||||||
v-if="props.row.status == 'DRAFT'"
|
v-if="props.row.status == 'DRAFT'"
|
||||||
size="10px"
|
size="10px"
|
||||||
|
|
@ -468,12 +468,7 @@ onMounted(async () => {
|
||||||
|
|
||||||
<span class="q-pr-md">{{ props.row.statusConvert }}</span>
|
<span class="q-pr-md">{{ props.row.statusConvert }}</span>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<q-item-label v-else-if="col.name === 'dateSendLeave'">
|
<q-item-label v-else>{{ col.value }}</q-item-label>
|
||||||
{{
|
|
||||||
props.row.status === "DRAFT" ? "-" : props.row.dateSendLeave
|
|
||||||
}}
|
|
||||||
</q-item-label>
|
|
||||||
<q-item-label v-else>{{ col.value }} </q-item-label>
|
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,7 @@ const props = defineProps({
|
||||||
<div class="q-gutter-md q-pa-sm">
|
<div class="q-gutter-md q-pa-sm">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -32,33 +30,11 @@ const props = defineProps({
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateStart }} {{ `${props.data.leaveRange && props.data.leaveRange !== 'ALL' ? `(${converstType(props.data.leaveRange)})`:''}` }}</div>
|
||||||
{{ props.data.leaveDateStart }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveRange && props.data.leaveRange !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRange)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateEnd }} {{ `${props.data.leaveDateStart !== props.data.leaveDateEnd ? `${props.data.leaveRangeEnd && props.data.leaveRangeEnd !== 'ALL' ? `(${converstType(props.data.leaveRangeEnd)})`:''}` :''}` }}</div>
|
||||||
{{ props.data.leaveDateEnd }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveDateStart !== props.data.leaveDateEnd
|
|
||||||
? `${
|
|
||||||
props.data.leaveRangeEnd && props.data.leaveRangeEnd !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRangeEnd)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
||||||
|
|
@ -111,12 +87,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip
|
|
||||||
>
|
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useLeaveStore } from "@/modules/05_leave/store";
|
import { useLeaveStore } from '@/modules/05_leave/store'
|
||||||
|
|
||||||
const store = useLeaveStore();
|
const store = useLeaveStore()
|
||||||
const { converstType } = store;
|
const { converstType } = store
|
||||||
/**
|
/**
|
||||||
* รับ prop จาก component
|
* รับ prop จาก component
|
||||||
*/
|
*/
|
||||||
|
|
@ -17,9 +17,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -31,33 +29,11 @@ const props = defineProps({
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateStart }} {{ `${props.data.leaveRange && props.data.leaveRange !== 'ALL' ? `(${converstType(props.data.leaveRange)})`:''}` }}</div>
|
||||||
{{ props.data.leaveDateStart }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveRange && props.data.leaveRange !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRange)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateEnd }} {{ `${props.data.leaveDateStart !== props.data.leaveDateEnd ? `${props.data.leaveRangeEnd && props.data.leaveRangeEnd !== 'ALL' ? `(${converstType(props.data.leaveRangeEnd)})`:''}` :''}` }}</div>
|
||||||
{{ props.data.leaveDateEnd }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveDateStart !== props.data.leaveDateEnd
|
|
||||||
? `${
|
|
||||||
props.data.leaveRangeEnd && props.data.leaveRangeEnd !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRangeEnd)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
||||||
|
|
@ -106,12 +82,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip
|
|
||||||
>
|
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -44,33 +42,11 @@ const props = defineProps({
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateStart }} {{ `${props.data.leaveRange && props.data.leaveRange !== 'ALL' ? `(${converstType(props.data.leaveRange)})`:''}` }}</div>
|
||||||
{{ props.data.leaveDateStart }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveRange && props.data.leaveRange !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRange)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateEnd }} {{ `${props.data.leaveDateStart !== props.data.leaveDateEnd ? `${props.data.leaveRangeEnd && props.data.leaveRangeEnd !== 'ALL' ? `(${converstType(props.data.leaveRangeEnd)})`:''}` :''}` }}</div>
|
||||||
{{ props.data.leaveDateEnd }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveDateStart !== props.data.leaveDateEnd
|
|
||||||
? `${
|
|
||||||
props.data.leaveRangeEnd && props.data.leaveRangeEnd !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRangeEnd)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
||||||
|
|
@ -115,12 +91,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip
|
|
||||||
>
|
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-md q-gutter-md">
|
<div class="q-pa-md q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}</div>
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -98,12 +98,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip
|
|
||||||
>
|
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}</div>
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -77,12 +77,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip
|
|
||||||
>
|
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useLeaveStore } from "@/modules/05_leave/store";
|
import { useLeaveStore } from '@/modules/05_leave/store'
|
||||||
|
|
||||||
const store = useLeaveStore();
|
const store = useLeaveStore()
|
||||||
const { converstType } = store;
|
const { converstType } = store
|
||||||
/**
|
/**
|
||||||
* รับ prop จาก component
|
* รับ prop จาก component
|
||||||
*/
|
*/
|
||||||
|
|
@ -18,9 +18,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -32,33 +30,11 @@ const props = defineProps({
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateStart }} {{ `${props.data.leaveRange && props.data.leaveRange !== 'ALL' ? `(${converstType(props.data.leaveRange)})`:''}` }}</div>
|
||||||
{{ props.data.leaveDateStart }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveRange && props.data.leaveRange !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRange)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateEnd }} {{ `${props.data.leaveDateStart !== props.data.leaveDateEnd ? `${props.data.leaveRangeEnd && props.data.leaveRangeEnd !== 'ALL' ? `(${converstType(props.data.leaveRangeEnd)})`:''}` :''}` }}</div>
|
||||||
{{ props.data.leaveDateEnd }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveDateStart !== props.data.leaveDateEnd
|
|
||||||
? `${
|
|
||||||
props.data.leaveRangeEnd && props.data.leaveRangeEnd !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRangeEnd)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
||||||
|
|
@ -111,12 +87,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip
|
|
||||||
>
|
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useLeaveStore } from "@/modules/05_leave/store";
|
import { useLeaveStore } from '@/modules/05_leave/store'
|
||||||
|
|
||||||
const store = useLeaveStore();
|
const store = useLeaveStore()
|
||||||
const { converstType } = store;
|
const { converstType } = store
|
||||||
/**
|
/**
|
||||||
* รับ prop จาก component
|
* รับ prop จาก component
|
||||||
*/
|
*/
|
||||||
|
|
@ -18,9 +18,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -32,33 +30,11 @@ const props = defineProps({
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาตั้งแต่วันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateStart }} {{ `${props.data.leaveRange && props.data.leaveRange !== 'ALL' ? `(${converstType(props.data.leaveRange)})`:''}` }}</div>
|
||||||
{{ props.data.leaveDateStart }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveRange && props.data.leaveRange !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRange)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">ลาถึงวันที่</div>
|
||||||
<div class="col-xs-12 col-md-6">
|
<div class="col-xs-12 col-md-6">{{ props.data.leaveDateEnd }} {{ `${props.data.leaveDateStart !== props.data.leaveDateEnd ? `${props.data.leaveRangeEnd && props.data.leaveRangeEnd !== 'ALL' ? `(${converstType(props.data.leaveRangeEnd)})`:''}` :''}` }}</div>
|
||||||
{{ props.data.leaveDateEnd }}
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
props.data.leaveDateStart !== props.data.leaveDateEnd
|
|
||||||
? `${
|
|
||||||
props.data.leaveRangeEnd && props.data.leaveRangeEnd !== "ALL"
|
|
||||||
? `(${converstType(props.data.leaveRangeEnd)})`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">จำนวนวันที่ลา</div>
|
||||||
|
|
@ -135,12 +111,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip
|
|
||||||
>
|
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}</div>
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -132,10 +132,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip>
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}</div>
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -80,10 +80,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip>
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}</div>
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -145,10 +145,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip>
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ const props = defineProps({
|
||||||
<div class="q-pa-sm q-gutter-md">
|
<div class="q-pa-sm q-gutter-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">วันที่ยื่นใบลา</div>
|
||||||
<div class="col-xs-12 col-md-6">{{ props.data.status === "DRAFT" ? "-" : props.data.dateSendLeave }}</div>
|
<div class="col-xs-12 col-md-6">{{ props.data.dateSendLeave }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
<div class="col-xs-12 col-md-6 text-grey-8">เรื่อง</div>
|
||||||
|
|
@ -80,10 +80,10 @@ const props = defineProps({
|
||||||
target="_blank"
|
target="_blank"
|
||||||
outline
|
outline
|
||||||
color="blue"
|
color="blue"
|
||||||
:label="`ดาวน์โหลดเอกสารแนบที่ ${Number(index) + 1}`"
|
:label="`ดาวน์โหลดเอกสารแนบที่ ${index + 1}`"
|
||||||
size="12px"
|
size="12px"
|
||||||
>
|
>
|
||||||
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ Number(index) + 1 }}</q-tooltip>
|
<q-tooltip>ดาวน์โหลดเอกสารแนบที่ {{ index + 1 }}</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ interface LeaveItem {
|
||||||
all: number;
|
all: number;
|
||||||
use: number;
|
use: number;
|
||||||
remain: number;
|
remain: number;
|
||||||
leaveCountApproveCount: number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MainList {
|
interface MainList {
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ export const useLeaveStore = defineStore("Leave", () => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* function เรียกข้อมูลรายการลา Table
|
* function เรียกข้อมูลรายการลา Table
|
||||||
* @param data ข้อมูลรายการลา TableleaveWaitingSummary
|
* @param data ข้อมูลรายการลา Table
|
||||||
*/
|
*/
|
||||||
async function fetchListLeave(data: ListLeave[]) {
|
async function fetchListLeave(data: ListLeave[]) {
|
||||||
let datalist: ListLeaveTable[] = data.map((e: ListLeave) => ({
|
let datalist: ListLeaveTable[] = data.map((e: ListLeave) => ({
|
||||||
|
|
@ -66,6 +66,7 @@ export const useLeaveStore = defineStore("Leave", () => {
|
||||||
isDelete: e.isDelete,
|
isDelete: e.isDelete,
|
||||||
}));
|
}));
|
||||||
rows.value = datalist;
|
rows.value = datalist;
|
||||||
|
console.log(datalist);
|
||||||
}
|
}
|
||||||
|
|
||||||
//ฟังก์ชั่นแปลง Status
|
//ฟังก์ชั่นแปลง Status
|
||||||
|
|
@ -308,7 +309,6 @@ export const useLeaveStore = defineStore("Leave", () => {
|
||||||
|
|
||||||
const telephoneNumber = ref<string>("");
|
const telephoneNumber = ref<string>("");
|
||||||
const currentAddress = ref<string>("");
|
const currentAddress = ref<string>("");
|
||||||
const leaveWaitingSummary = ref<number>(0);
|
|
||||||
|
|
||||||
//ดึงข้อมูล profile จาก API
|
//ดึงข้อมูล profile จาก API
|
||||||
async function fetchProfile() {
|
async function fetchProfile() {
|
||||||
|
|
@ -347,7 +347,6 @@ export const useLeaveStore = defineStore("Leave", () => {
|
||||||
: "-";
|
: "-";
|
||||||
restDayCurrentTotal.value =
|
restDayCurrentTotal.value =
|
||||||
Number(data.leaveLimit) - Number(data.restDayTotalOld);
|
Number(data.leaveLimit) - Number(data.restDayTotalOld);
|
||||||
leaveWaitingSummary.value = data.leaveWaitingSummary || 0;
|
|
||||||
})
|
})
|
||||||
.catch((e: any) => {
|
.catch((e: any) => {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|
@ -410,7 +409,6 @@ export const useLeaveStore = defineStore("Leave", () => {
|
||||||
salaryText.value = "";
|
salaryText.value = "";
|
||||||
leaveLast.value = undefined;
|
leaveLast.value = undefined;
|
||||||
restDayCurrentTotal.value = 0;
|
restDayCurrentTotal.value = 0;
|
||||||
leaveWaitingSummary.value = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** ฟังก์ชันเรียกข้อมูลประเภทการลา */
|
/** ฟังก์ชันเรียกข้อมูลประเภทการลา */
|
||||||
|
|
@ -482,7 +480,6 @@ export const useLeaveStore = defineStore("Leave", () => {
|
||||||
currentAddress,
|
currentAddress,
|
||||||
rangeOptions,
|
rangeOptions,
|
||||||
converstType,
|
converstType,
|
||||||
leaveWaitingSummary,
|
|
||||||
|
|
||||||
fetchLeaveTypeData,
|
fetchLeaveTypeData,
|
||||||
isLoadingProfile,
|
isLoadingProfile,
|
||||||
|
|
|
||||||
|
|
@ -141,14 +141,12 @@ async function fetchStatsTable() {
|
||||||
value:
|
value:
|
||||||
el.leaveLimit > 0
|
el.leaveLimit > 0
|
||||||
? Math.round(
|
? Math.round(
|
||||||
(Number(el.leaveCountApprove) / Number(el.leaveLimit)) *
|
(Number(el.leaveCountApprove) / Number(el.leaveLimit)) * 100
|
||||||
100,
|
|
||||||
)
|
)
|
||||||
: 0,
|
: 0,
|
||||||
all: Number(el.leaveLimit),
|
all: Number(el.leaveLimit),
|
||||||
use: el.leaveCountApprove,
|
use: el.leaveCountApprove,
|
||||||
remain: Number(el.leaveLimit) - Number(el.leaveCountApprove),
|
remain: Number(el.leaveLimit) - Number(el.leaveCountApprove),
|
||||||
leaveCountApproveCount: el.leaveCountApproveCount,
|
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
stat.forEach((item) => itemPie.value.push(...item));
|
stat.forEach((item) => itemPie.value.push(...item));
|
||||||
|
|
@ -256,7 +254,7 @@ onMounted(async () => {
|
||||||
</q-knob>
|
</q-knob>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 text-center text-weight-medium">
|
<div class="col-12 text-center text-weight-medium">
|
||||||
{{ item.text }}
|
ลาพักผ่อน
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row gt-xs"><q-separator vertical /></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 text-dark text-body2 items-center">
|
||||||
<div class="col-12 row q-pa-xs q-px-md row">
|
<div class="col-12 row q-pa-xs q-px-md row">
|
||||||
<span class="text-grey-7 col-6">ได้รับ</span>
|
<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>
|
||||||
<div class="col-12"><q-separator /></div>
|
<div class="col-12"><q-separator /></div>
|
||||||
<div class="col-12 row q-pa-xs q-px-md">
|
<div class="col-12 row q-pa-xs q-px-md">
|
||||||
<span class="text-grey-7 col-6">ใช้ไป</span>
|
<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>
|
||||||
<div class="col-12"><q-separator /></div>
|
<div class="col-12"><q-separator /></div>
|
||||||
<div class="col-12 row q-pa-xs q-px-md">
|
<div class="col-12 row q-pa-xs q-px-md">
|
||||||
<span class="text-grey-7 col-6">คงเหลือ</span>
|
<span class="text-grey-7 col-6">คงเหลือ</span>
|
||||||
<span class="text-weight-bold"
|
<span class="text-weight-bold">{{ item.remain }}</span>
|
||||||
>{{ item.remain }} วัน</span
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -298,11 +294,11 @@ onMounted(async () => {
|
||||||
flat
|
flat
|
||||||
class="shadow-0 col-12 fit row items-center q-px-lg"
|
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">
|
<div class="text-subtitle2 col-8">
|
||||||
<span class="text-grey-7 q-pr-md">ใช้ไป</span>
|
<span class="text-grey-7 q-pr-md">ใช้ไป</span>
|
||||||
<span class="text-weight-bold">{{ item.use }} วัน </span>
|
<span class="text-weight-bold">{{ item.use }}</span>
|
||||||
({{ item.leaveCountApproveCount }} ครั้ง)
|
<!-- <span class="text-grey-7 q-pl-md">ลา</span> -->
|
||||||
</div>
|
</div>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -321,11 +317,11 @@ onMounted(async () => {
|
||||||
flat
|
flat
|
||||||
class="shadow-0 col-12 fit row items-center q-px-lg"
|
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">
|
<div class="text-subtitle2 col-8">
|
||||||
<span class="text-grey-7 q-pr-md">ใช้ไป</span>
|
<span class="text-grey-7 q-pr-md">ใช้ไป</span>
|
||||||
<span class="text-weight-bold">{{ item.use }} วัน </span>
|
<span class="text-weight-bold">{{ item.use }}</span>
|
||||||
({{ item.leaveCountApproveCount }} ครั้ง)
|
<!-- <span class="text-grey-7 q-pl-md">ลา</span> -->
|
||||||
</div>
|
</div>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useKpiDataStore } from "@/modules/08_KPI/store";
|
import { useKpiDataStore } from "@/modules/08_KPI/store";
|
||||||
import avatar from "@/assets/avatar_user.jpg";
|
|
||||||
|
|
||||||
import type { FormProfile } from "@/modules/08_KPI/interface/request/index";
|
import type { FormProfile } from "@/modules/08_KPI/interface/request/index";
|
||||||
import type {
|
import type {
|
||||||
|
|
@ -108,13 +107,11 @@ async function getAvatar(id: string) {
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
const data = await res.data.result;
|
const data = await res.data.result;
|
||||||
if (data.avatarName) {
|
if (data.avatarName) {
|
||||||
fetchProfile(id, data.avatarName);
|
await fetchProfile(id, data.avatarName);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
imgProfile.value = avatar;
|
|
||||||
store.dataEvaluation.avartar = avatar;
|
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
isLoadAvatar.value = false;
|
isLoadAvatar.value = false;
|
||||||
|
|
@ -122,16 +119,12 @@ async function getAvatar(id: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** ดึงข้อมูล เพื่อเก็บรูปโปรไฟล์ */
|
/** ดึงข้อมูล เพื่อเก็บรูปโปรไฟล์ */
|
||||||
function fetchProfile(id: string, avatarName: string) {
|
async function fetchProfile(id: string, avatarName: string) {
|
||||||
http
|
await http
|
||||||
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, avatarName))
|
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, avatarName))
|
||||||
.then((res) => {
|
.then(async (res) => {
|
||||||
store.dataEvaluation.avartar = res.data.downloadUrl;
|
store.dataEvaluation.avartar = res.data.downloadUrl;
|
||||||
imgProfile.value = res.data.downloadUrl;
|
imgProfile.value = res.data.downloadUrl;
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
imgProfile.value = avatar;
|
|
||||||
store.dataEvaluation.avartar = avatar;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -215,7 +208,7 @@ async function getOrgOp() {
|
||||||
name: `${i.prefix}${i.firstName} ${i.lastName}`,
|
name: `${i.prefix}${i.firstName} ${i.lastName}`,
|
||||||
}))
|
}))
|
||||||
.find(
|
.find(
|
||||||
(i: EvaOptionType) => i.id == store.dataEvaluation.commanderHighId,
|
(i: EvaOptionType) => i.id == store.dataEvaluation.commanderHighId
|
||||||
);
|
);
|
||||||
isLoadCommander.value = false;
|
isLoadCommander.value = false;
|
||||||
})
|
})
|
||||||
|
|
@ -232,21 +225,21 @@ function filterOption(val: string, update: Function, refData: string) {
|
||||||
case "evaluatorIdOp":
|
case "evaluatorIdOp":
|
||||||
update(() => {
|
update(() => {
|
||||||
evaluatorIdOp.value = evaluatorIdMainOp.value.filter(
|
evaluatorIdOp.value = evaluatorIdMainOp.value.filter(
|
||||||
(v: DataOptions) => v.name.indexOf(val) > -1,
|
(v: DataOptions) => v.name.indexOf(val) > -1
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case "commanderIdOp":
|
case "commanderIdOp":
|
||||||
update(() => {
|
update(() => {
|
||||||
commanderIdOp.value = commanderIdMainOp.value.filter(
|
commanderIdOp.value = commanderIdMainOp.value.filter(
|
||||||
(v: DataOptions) => v.name.indexOf(val) > -1,
|
(v: DataOptions) => v.name.indexOf(val) > -1
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case "commanderHighOp":
|
case "commanderHighOp":
|
||||||
update(() => {
|
update(() => {
|
||||||
commanderHighOp.value = commanderHighMainOp.value.filter(
|
commanderHighOp.value = commanderHighMainOp.value.filter(
|
||||||
(v: DataOptions) => v.name.indexOf(val) > -1,
|
(v: DataOptions) => v.name.indexOf(val) > -1
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
@ -285,7 +278,7 @@ function sendToEvaluatore() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ยืนยันการส่งข้อตกลงให้ผู้ประเมินอนุมัติ",
|
"ยืนยันการส่งข้อตกลงให้ผู้ประเมินอนุมัติ",
|
||||||
"ต้องการยืนยันส่งข้อตกลงนี้ให้ผู้ประเมินอนุมัติใช่หรือไม่?",
|
"ต้องการยืนยันส่งข้อตกลงนี้ให้ผู้ประเมินอนุมัติใช่หรือไม่?"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -315,7 +308,7 @@ function sendToEvaluateEvaluatore() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ยืนยันการส่งให้ผู้ประเมินรายงานผลสำเร็จของงาน",
|
"ยืนยันการส่งให้ผู้ประเมินรายงานผลสำเร็จของงาน",
|
||||||
"ต้องการยืนยันส่งให้ผู้ประเมินรายงานผลสำเร็จของงานใช่หรือไม่?",
|
"ต้องการยืนยันส่งให้ผู้ประเมินรายงานผลสำเร็จของงานใช่หรือไม่?"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -345,7 +338,7 @@ function requireEdit() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ยืนยันการขอแก้ไขข้อตกลง",
|
"ยืนยันการขอแก้ไขข้อตกลง",
|
||||||
"ต้องการยืนยันการขอแก้ไขข้อตกลงนี้ใช่หรือไม่?",
|
"ต้องการยืนยันการขอแก้ไขข้อตกลงนี้ใช่หรือไม่?"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -418,7 +411,7 @@ async function goToSummary() {
|
||||||
store.excusiveIndicator2ScoreVal +
|
store.excusiveIndicator2ScoreVal +
|
||||||
store.competencyScoreVal
|
store.competencyScoreVal
|
||||||
).toFixed(2),
|
).toFixed(2),
|
||||||
},
|
}
|
||||||
)
|
)
|
||||||
.then((res) => {});
|
.then((res) => {});
|
||||||
|
|
||||||
|
|
@ -434,7 +427,7 @@ async function goToSummary() {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
"ยืนยันการส่งไปสรุปผลการประเมิน",
|
"ยืนยันการส่งไปสรุปผลการประเมิน",
|
||||||
"ต้องการยืนยันส่งไปสรุปผลการประเมินใช่หรือไม่?",
|
"ต้องการยืนยันส่งไปสรุปผลการประเมินใช่หรือไม่?"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -524,7 +517,7 @@ async function downloadReport() {
|
||||||
store.dataEvaluation.prefix +
|
store.dataEvaluation.prefix +
|
||||||
store.dataEvaluation.firstName +
|
store.dataEvaluation.firstName +
|
||||||
" " +
|
" " +
|
||||||
store.dataEvaluation.lastName,
|
store.dataEvaluation.lastName
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
|
|
@ -563,7 +556,7 @@ async function clickUpload(file: any) {
|
||||||
const foundKey: string | undefined = Object.keys(res.data).find(
|
const foundKey: string | undefined = Object.keys(res.data).find(
|
||||||
(key) =>
|
(key) =>
|
||||||
res.data[key]?.fileName !== undefined &&
|
res.data[key]?.fileName !== undefined &&
|
||||||
res.data[key]?.fileName !== "",
|
res.data[key]?.fileName !== ""
|
||||||
);
|
);
|
||||||
foundKey &&
|
foundKey &&
|
||||||
uploadFileDoc(res.data[foundKey]?.uploadUrl, fileUpload.value);
|
uploadFileDoc(res.data[foundKey]?.uploadUrl, fileUpload.value);
|
||||||
|
|
@ -573,7 +566,7 @@ async function clickUpload(file: any) {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
"ยืนยันการอัปโหลดไฟล์",
|
"ยืนยันการอัปโหลดไฟล์",
|
||||||
"ต้องการยืนยันการอัปโหลดไฟล์นี้หรือไม่ ?",
|
"ต้องการยืนยันการอัปโหลดไฟล์นี้หรือไม่ ?"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -630,7 +623,7 @@ function deleteFile(fileName: string) {
|
||||||
showLoader();
|
showLoader();
|
||||||
http
|
http
|
||||||
.delete(
|
.delete(
|
||||||
config.API.file("แบบกำหนดข้อตกลง", "KPI", id.value) + `/${fileName}`,
|
config.API.file("แบบกำหนดข้อตกลง", "KPI", id.value) + `/${fileName}`
|
||||||
)
|
)
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { ref, onMounted } from "vue";
|
||||||
|
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
import http from "@/plugins/http";
|
import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
|
|
||||||
|
|
@ -115,7 +114,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -133,15 +132,12 @@ async function onDownloadFile(id: string, profileId: string) {
|
||||||
"ประวัติการเปลี่ยนชื่อ-นามสกุล",
|
"ประวัติการเปลี่ยนชื่อ-นามสกุล",
|
||||||
profileId,
|
profileId,
|
||||||
id,
|
id,
|
||||||
"เอกสารหลักฐาน",
|
"เอกสารหลักฐาน"
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
const downloadUrl = res.data.downloadUrl;
|
const data = res.data.downloadUrl;
|
||||||
await downloadBlobFile({
|
window.open(data, "_blank");
|
||||||
downloadUrl: downloadUrl,
|
|
||||||
fileName: `ประวัติการเปลี่ยนชื่อ-นามสกุล`,
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
messageError($q, err);
|
messageError($q, err);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
/** import type */
|
/** import type */
|
||||||
import type { AbilityRows } from "@/modules/10_registry/interface/index/Main";
|
import type { AbilityRows } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
@ -241,7 +240,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -259,15 +258,12 @@ async function onDownloadFile(id: string, profileId: string) {
|
||||||
"เอกสารความสามารถพิเศษ",
|
"เอกสารความสามารถพิเศษ",
|
||||||
profileId,
|
profileId,
|
||||||
id,
|
id,
|
||||||
"เอกสารหลักฐาน",
|
"เอกสารหลักฐาน"
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
const downloadUrl = res.data.downloadUrl;
|
const data = res.data;
|
||||||
await downloadBlobFile({
|
window.open(data.downloadUrl, "_blank");
|
||||||
downloadUrl: downloadUrl,
|
|
||||||
fileName: `เอกสารความสามารถพิเศษ`,
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
messageError($q, err);
|
messageError($q, err);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { DisciplineDetail } from "@/modules/10_registry/interface/index/Main";
|
import type { DisciplineDetail } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -195,11 +194,8 @@ async function getHistory() {
|
||||||
async function onDownloadFile(id: string, profileId: string) {
|
async function onDownloadFile(id: string, profileId: string) {
|
||||||
showLoader();
|
showLoader();
|
||||||
try {
|
try {
|
||||||
const res = await getPathUploadFlie(fileGroup.value, profileId, id);
|
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
||||||
await downloadBlobFile({
|
window.open(data.downloadUrl, "_blank");
|
||||||
downloadUrl: res.downloadUrl,
|
|
||||||
fileName: `เอกสารวินัย`,
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -212,7 +208,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { DutyFormType } from "@/modules/10_registry/interface/index/Main";
|
import type { DutyFormType } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -298,11 +297,8 @@ async function getHistory() {
|
||||||
async function onDownloadFile(id: string, profileId: string) {
|
async function onDownloadFile(id: string, profileId: string) {
|
||||||
showLoader();
|
showLoader();
|
||||||
try {
|
try {
|
||||||
const res = await getPathUploadFlie(fileGroup.value, profileId, id);
|
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
||||||
await downloadBlobFile({
|
window.open(data.downloadUrl, "_blank");
|
||||||
downloadUrl: res.downloadUrl,
|
|
||||||
fileName: `เอกสารปฏิบัติราชการพิเศษ`,
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -315,7 +311,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { DutyFormType } from "@/modules/10_registry/interface/index/Main";
|
import type { DutyFormType } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -303,15 +302,12 @@ async function onDownloadFile(id: string, profileId: string) {
|
||||||
"ช่วยราชการ",
|
"ช่วยราชการ",
|
||||||
profileId,
|
profileId,
|
||||||
id,
|
id,
|
||||||
"เอกสารหลักฐาน",
|
"เอกสารหลักฐาน"
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
const downloadUrl = res.data.downloadUrl;
|
const data = res.data;
|
||||||
await downloadBlobFile({
|
window.open(data.downloadUrl, "_blank");
|
||||||
downloadUrl: downloadUrl,
|
|
||||||
fileName: `เอกสารช่วยราชการ`,
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
messageError($q, err);
|
messageError($q, err);
|
||||||
|
|
@ -326,7 +322,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { NopaidFormType } from "@/modules/10_registry/interface/index/Main";
|
import type { NopaidFormType } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -256,7 +255,7 @@ async function getHistory() {
|
||||||
rowsHistoryData.value = [];
|
rowsHistoryData.value = [];
|
||||||
await http
|
await http
|
||||||
.get(
|
.get(
|
||||||
config.API.dataUserSalaryNopaidHistoryByType(link.value, idByRow.value),
|
config.API.dataUserSalaryNopaidHistoryByType(link.value, idByRow.value)
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data.result;
|
const data = res.data.result;
|
||||||
|
|
@ -279,12 +278,8 @@ async function getHistory() {
|
||||||
async function onDownloadFile(id: string, profileId: string) {
|
async function onDownloadFile(id: string, profileId: string) {
|
||||||
showLoader();
|
showLoader();
|
||||||
try {
|
try {
|
||||||
const res = await getPathUploadFlie(fileGroup.value, profileId, id);
|
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
||||||
const downloadUrl = res.downloadUrl;
|
window.open(data.downloadUrl, "_blank");
|
||||||
await downloadBlobFile({
|
|
||||||
downloadUrl: downloadUrl,
|
|
||||||
fileName: `บันทึกวันที่ไม่ได้รับ${salaryText.value}ฯ`,
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -297,7 +292,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { CertificateDetail } from "@/modules/10_registry/interface/index/Main";
|
import type { CertificateDetail } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -254,8 +253,8 @@ async function getHistory() {
|
||||||
config.API.dataUserCertificateHistoryByType(
|
config.API.dataUserCertificateHistoryByType(
|
||||||
link.value,
|
link.value,
|
||||||
"certificate",
|
"certificate",
|
||||||
idByRow.value,
|
idByRow.value
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data.result;
|
const data = res.data.result;
|
||||||
|
|
@ -279,10 +278,7 @@ async function onDownloadFile(id: string, profileId: string) {
|
||||||
showLoader();
|
showLoader();
|
||||||
try {
|
try {
|
||||||
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
||||||
await downloadBlobFile({
|
window.open(data.downloadUrl, "_blank");
|
||||||
downloadUrl: data.downloadUrl,
|
|
||||||
fileName: `เอกสารใบอนุญาตประกอบวิชาชีพ`,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
messageError($q, error);
|
messageError($q, error);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -295,7 +291,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { InsigniaFormType } from "@/modules/10_registry/interface/index/Main";
|
import type { InsigniaFormType } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -470,8 +469,8 @@ async function getHistory() {
|
||||||
config.API.dataUserCertificateHistoryByType(
|
config.API.dataUserCertificateHistoryByType(
|
||||||
link.value,
|
link.value,
|
||||||
"insignia",
|
"insignia",
|
||||||
idByRow.value,
|
idByRow.value
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data.result;
|
const data = res.data.result;
|
||||||
|
|
@ -495,10 +494,7 @@ async function onDownloadFile(id: string, profileId: string) {
|
||||||
showLoader();
|
showLoader();
|
||||||
try {
|
try {
|
||||||
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
||||||
await downloadBlobFile({
|
window.open(data.downloadUrl, "_blank");
|
||||||
downloadUrl: data.downloadUrl,
|
|
||||||
fileName: `เอกสารเครื่องราชอิสริยาภรณ์`,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
messageError($q, error);
|
messageError($q, error);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -511,7 +507,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -651,6 +647,7 @@ onMounted(async () => {
|
||||||
dense
|
dense
|
||||||
round
|
round
|
||||||
size="14px"
|
size="14px"
|
||||||
|
class="absolute_button"
|
||||||
@click="onHistory(props.row.id)"
|
@click="onHistory(props.row.id)"
|
||||||
>
|
>
|
||||||
<q-tooltip>ประวัติแก้ไขเครื่องราชอิสริยาภรณ์</q-tooltip>
|
<q-tooltip>ประวัติแก้ไขเครื่องราชอิสริยาภรณ์</q-tooltip>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import config from "@/app.config";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useDataStore } from "@/stores/data";
|
import { useDataStore } from "@/stores/data";
|
||||||
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
import { useRegistryDataStore } from "@/modules/10_registry/store/Main";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { HonorFormData } from "@/modules/10_registry/interface/index/Main";
|
import type { HonorFormData } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -279,10 +278,7 @@ async function onDownloadFile(id: string, profileId: string) {
|
||||||
showLoader();
|
showLoader();
|
||||||
try {
|
try {
|
||||||
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
const data = await getPathUploadFlie(fileGroup.value, profileId, id);
|
||||||
await downloadBlobFile({
|
window.open(data.downloadUrl, "_blank");
|
||||||
downloadUrl: data.downloadUrl,
|
|
||||||
fileName: `เอกสารประกาศเกียรติคุณ`,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
messageError($q, error);
|
messageError($q, error);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -295,7 +291,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -433,6 +429,7 @@ onMounted(async () => {
|
||||||
dense
|
dense
|
||||||
round
|
round
|
||||||
size="14px"
|
size="14px"
|
||||||
|
class="absolute_button"
|
||||||
@click="onHistory(props.row.id)"
|
@click="onHistory(props.row.id)"
|
||||||
>
|
>
|
||||||
<q-tooltip>ประวัติแก้ไขประกาศเกียรติคุณ</q-tooltip>
|
<q-tooltip>ประวัติแก้ไขประกาศเกียรติคุณ</q-tooltip>
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useQuasar } from "quasar";
|
import { is, useQuasar } from "quasar";
|
||||||
import { ref, onMounted, watch } from "vue";
|
import { ref, onMounted } from "vue";
|
||||||
|
|
||||||
import http from "@/plugins/http";
|
import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
import { useRegistryInFormationStore } from "@/modules/10_registry/store/registry";
|
import { useRegistryInFormationStore } from "@/modules/10_registry/store/registry";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { FileFormType } from "@/modules/10_registry/interface/index/Main";
|
import type { FileFormType } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -19,15 +18,14 @@ const fileList = ref<FileFormType[]>([]);
|
||||||
|
|
||||||
/** ฟังก์ชันดึงข้อมูลไฟล์ */
|
/** ฟังก์ชันดึงข้อมูลไฟล์ */
|
||||||
async function getData() {
|
async function getData() {
|
||||||
if (!store.profileId) return;
|
|
||||||
isLoading.value = true;
|
isLoading.value = true;
|
||||||
await http
|
await http
|
||||||
.get(
|
.get(
|
||||||
config.API.fileByFileUser(
|
config.API.fileByFileUser(
|
||||||
"ระบบทะเบียนประวัติ",
|
"ระบบทะเบียนประวัติ",
|
||||||
"เอกสารหลักฐาน",
|
"เอกสารหลักฐาน",
|
||||||
store.profileId,
|
store.profileId
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
|
@ -53,15 +51,12 @@ async function downloadFile(fileName: string) {
|
||||||
"ระบบทะเบียนประวัติ",
|
"ระบบทะเบียนประวัติ",
|
||||||
"เอกสารหลักฐาน",
|
"เอกสารหลักฐาน",
|
||||||
store.profileId,
|
store.profileId,
|
||||||
fileName,
|
fileName
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then(async (res) => {
|
.then((res) => {
|
||||||
const downloadUrl = res.data.downloadUrl;
|
const data = res.data.downloadUrl;
|
||||||
await downloadBlobFile({
|
window.open(data, "_blank");
|
||||||
downloadUrl: downloadUrl,
|
|
||||||
fileName: fileName,
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
|
|
@ -74,15 +69,6 @@ async function downloadFile(fileName: string) {
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getData();
|
getData();
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
|
||||||
() => store.profileId,
|
|
||||||
(newVal) => {
|
|
||||||
if (newVal) {
|
|
||||||
getData();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, watch } from "vue";
|
import { ref, onMounted } from "vue";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import { useQuasar } from "quasar";
|
import { useQuasar } from "quasar";
|
||||||
|
|
||||||
import http from "@/plugins/http";
|
import http from "@/plugins/http";
|
||||||
import config from "@/app.config";
|
import config from "@/app.config";
|
||||||
import { useRegistryInFormationStore } from "@/modules/10_registry/store/registry";
|
import { useRegistryInFormationStore } from "@/modules/10_registry/store/registry";
|
||||||
import { downloadBlobFile } from "@/modules/10_registry/utils/downloadFile";
|
|
||||||
|
|
||||||
import type { FileFormType } from "@/modules/10_registry/interface/index/Main";
|
import type { FileFormType } from "@/modules/10_registry/interface/index/Main";
|
||||||
|
|
||||||
|
|
@ -19,15 +18,14 @@ const fileList = ref<FileFormType[]>([]);
|
||||||
|
|
||||||
/** ฟังก์ชันดึงข้อมูลไฟล์ */
|
/** ฟังก์ชันดึงข้อมูลไฟล์ */
|
||||||
async function getData() {
|
async function getData() {
|
||||||
if (!store.citizenId) return;
|
|
||||||
isLoading.value = true;
|
isLoading.value = true;
|
||||||
await http
|
await http
|
||||||
.get(
|
.get(
|
||||||
config.API.fileByFileUser(
|
config.API.fileByFileUser(
|
||||||
"ระบบทะเบียนประวัติ",
|
"ระบบทะเบียนประวัติ",
|
||||||
"เอกสารหลักฐานเพิ่มเติม",
|
"เอกสารหลักฐานเพิ่มเติม",
|
||||||
store.citizenId,
|
store.citizenId
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
|
@ -53,15 +51,12 @@ async function downloadFile(fileName: string) {
|
||||||
"ระบบทะเบียนประวัติ",
|
"ระบบทะเบียนประวัติ",
|
||||||
"เอกสารหลักฐานเพิ่มเติม",
|
"เอกสารหลักฐานเพิ่มเติม",
|
||||||
store.citizenId,
|
store.citizenId,
|
||||||
fileName,
|
fileName
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
.then(async (res) => {
|
.then((res) => {
|
||||||
const downloadUrl = res.data.downloadUrl;
|
const data = res.data.downloadUrl;
|
||||||
await downloadBlobFile({
|
window.open(data, "_blank");
|
||||||
downloadUrl: downloadUrl,
|
|
||||||
fileName: fileName,
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
|
|
@ -74,15 +69,6 @@ async function downloadFile(fileName: string) {
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getData();
|
getData();
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
|
||||||
() => store.citizenId,
|
|
||||||
(newVal) => {
|
|
||||||
if (newVal) {
|
|
||||||
getData();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
export interface DownloadFileOptions {
|
|
||||||
downloadUrl: string;
|
|
||||||
fileName: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const isMobile =
|
|
||||||
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
||||||
navigator.userAgent,
|
|
||||||
);
|
|
||||||
|
|
||||||
export async function downloadBlobFile({
|
|
||||||
downloadUrl,
|
|
||||||
fileName,
|
|
||||||
}: DownloadFileOptions): Promise<void> {
|
|
||||||
// Use window.open for desktop, blob download for mobile
|
|
||||||
if (!isMobile) {
|
|
||||||
window.open(downloadUrl, "_blank");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const response = await fetch(downloadUrl);
|
|
||||||
const blob = await response.blob();
|
|
||||||
|
|
||||||
const contentType: string | null = response.headers.get("Content-Type");
|
|
||||||
|
|
||||||
const extensionMap: Record<string, string> = {
|
|
||||||
"application/pdf": "pdf",
|
|
||||||
"image/jpeg": "jpg",
|
|
||||||
"image/png": "png",
|
|
||||||
"image/gif": "gif",
|
|
||||||
"application/zip": "zip",
|
|
||||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document":
|
|
||||||
"docx",
|
|
||||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xlsx",
|
|
||||||
};
|
|
||||||
|
|
||||||
let extension = contentType ? extensionMap[contentType] : undefined;
|
|
||||||
|
|
||||||
if (!extension) {
|
|
||||||
const urlWithoutQuery = downloadUrl.split("?")[0];
|
|
||||||
extension = urlWithoutQuery.includes(".")
|
|
||||||
? urlWithoutQuery.split(".").pop()
|
|
||||||
: "pdf";
|
|
||||||
}
|
|
||||||
|
|
||||||
const blobForDownload = new Blob([blob], {
|
|
||||||
type: "application/octet-stream",
|
|
||||||
});
|
|
||||||
const url = URL.createObjectURL(blobForDownload);
|
|
||||||
const link = document.createElement("a");
|
|
||||||
link.href = url;
|
|
||||||
const downloadFileName = fileName.includes(".") ? fileName : `${fileName}.${extension}`;
|
|
||||||
link.download = downloadFileName;
|
|
||||||
document.body.appendChild(link);
|
|
||||||
link.click();
|
|
||||||
setTimeout(() => {
|
|
||||||
document.body.removeChild(link);
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
}, 100);
|
|
||||||
}
|
|
||||||
|
|
@ -151,7 +151,6 @@ async function getAvatar(id: string) {
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
messageError($q, e);
|
messageError($q, e);
|
||||||
profileImg.value = avatar;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,15 +168,14 @@ function getList(id: string) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getImg(id: string, pathName: string) {
|
async function getImg(id: string, pathName: string) {
|
||||||
http
|
await http
|
||||||
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, pathName))
|
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, pathName))
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
profileImg.value = res.data.downloadUrl;
|
profileImg.value = res.data.downloadUrl;
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
profileImg.value = avatar;
|
messageError($q, e);
|
||||||
// messageError($q, e);
|
|
||||||
hideLoader();
|
hideLoader();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -190,7 +188,7 @@ function onSearch() {
|
||||||
rows.value = onSearchDataTable(
|
rows.value = onSearchDataTable(
|
||||||
filter.value,
|
filter.value,
|
||||||
rowsData.value,
|
rowsData.value,
|
||||||
columns.value ? columns.value : [],
|
columns.value ? columns.value : []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ async function genReport(data: any, fileName: string, type: string = "docx") {
|
||||||
},
|
},
|
||||||
responseType: "arraybuffer",
|
responseType: "arraybuffer",
|
||||||
})
|
})
|
||||||
.then(async (res) => {
|
.then((res) => {
|
||||||
const responseData = res.data;
|
const responseData = res.data;
|
||||||
if (responseData) {
|
if (responseData) {
|
||||||
const mimeType =
|
const mimeType =
|
||||||
|
|
@ -32,11 +32,13 @@ async function genReport(data: any, fileName: string, type: string = "docx") {
|
||||||
|
|
||||||
const baseName = fileName.trim();
|
const baseName = fileName.trim();
|
||||||
const extension = type === "docx" ? "docx" : "pdf";
|
const extension = type === "docx" ? "docx" : "pdf";
|
||||||
|
|
||||||
const link = document.createElement("a");
|
const link = document.createElement("a");
|
||||||
link.href = url;
|
link.href = url;
|
||||||
link.download = `${baseName}.${extension}`;
|
link.download = `${baseName}.${extension}`;
|
||||||
document.body.appendChild(link);
|
document.body.appendChild(link);
|
||||||
link.click();
|
link.click();
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
document.body.removeChild(link);
|
document.body.removeChild(link);
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
const calAge = (
|
const calAge = (
|
||||||
srcDate: Date,
|
srcDate: Date,
|
||||||
birthCal: Date = new Date(),
|
birthCal: Date = new Date(),
|
||||||
eng: boolean = false,
|
eng: boolean = false
|
||||||
) => {
|
) => {
|
||||||
const year = eng ? "years" : "ปี";
|
const year = eng ? "years" : "ปี";
|
||||||
const month = eng ? "months" : "เดือน";
|
const month = eng ? "months" : "เดือน";
|
||||||
|
|
@ -82,7 +82,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
function date2Thai(
|
function date2Thai(
|
||||||
srcDate: Date | null,
|
srcDate: Date | null,
|
||||||
isFullMonth: boolean = false,
|
isFullMonth: boolean = false,
|
||||||
isTime: boolean = false,
|
isTime: boolean = false
|
||||||
) {
|
) {
|
||||||
if (srcDate == null || !moment(srcDate).isValid()) return "";
|
if (srcDate == null || !moment(srcDate).isValid()) return "";
|
||||||
|
|
||||||
|
|
@ -98,7 +98,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
function dateThai(
|
function dateThai(
|
||||||
srcDate: Date,
|
srcDate: Date,
|
||||||
isFullMonth: boolean = true,
|
isFullMonth: boolean = true,
|
||||||
isTime: boolean = false,
|
isTime: boolean = false
|
||||||
) {
|
) {
|
||||||
if (srcDate == null) {
|
if (srcDate == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -490,7 +490,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
color: string | undefined,
|
color: string | undefined,
|
||||||
ok?: Function | undefined,
|
ok?: Function | undefined,
|
||||||
cancel?: Function | undefined,
|
cancel?: Function | undefined,
|
||||||
onlycancel: Boolean = false,
|
onlycancel: Boolean = false
|
||||||
) => {
|
) => {
|
||||||
q.dialog({
|
q.dialog({
|
||||||
component: CustomComponent,
|
component: CustomComponent,
|
||||||
|
|
@ -529,7 +529,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
title: string,
|
title: string,
|
||||||
message: string,
|
message: string,
|
||||||
ok: Function,
|
ok: Function,
|
||||||
cancel?: Function,
|
cancel?: Function
|
||||||
) {
|
) {
|
||||||
q.dialog({
|
q.dialog({
|
||||||
title: `<span class="text-red">${title}</span>`,
|
title: `<span class="text-red">${title}</span>`,
|
||||||
|
|
@ -559,7 +559,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
title: string,
|
title: string,
|
||||||
message: string,
|
message: string,
|
||||||
ok: Function,
|
ok: Function,
|
||||||
cancel?: Function,
|
cancel?: Function
|
||||||
) {
|
) {
|
||||||
q.dialog({
|
q.dialog({
|
||||||
title: `<span class="text-primary">${title}</span>`,
|
title: `<span class="text-primary">${title}</span>`,
|
||||||
|
|
@ -795,7 +795,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
ok?: Function,
|
ok?: Function,
|
||||||
title?: string, // ถ้ามี cancel action ใส่เป็น null
|
title?: string, // ถ้ามี cancel action ใส่เป็น null
|
||||||
desc?: string, // ถ้ามี cancel action ใส่เป็น null
|
desc?: string, // ถ้ามี cancel action ใส่เป็น null
|
||||||
cancel?: Function,
|
cancel?: Function
|
||||||
) => {
|
) => {
|
||||||
q.dialog({
|
q.dialog({
|
||||||
component: CustomComponent,
|
component: CustomComponent,
|
||||||
|
|
@ -824,7 +824,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
ok?: Function,
|
ok?: Function,
|
||||||
title?: string, // ถ้ามี cancel action ใส่เป็น null
|
title?: string, // ถ้ามี cancel action ใส่เป็น null
|
||||||
desc?: string, // ถ้ามี cancel action ใส่เป็น null
|
desc?: string, // ถ้ามี cancel action ใส่เป็น null
|
||||||
cancel?: Function,
|
cancel?: Function
|
||||||
) => {
|
) => {
|
||||||
q.dialog({
|
q.dialog({
|
||||||
component: CustomComponent,
|
component: CustomComponent,
|
||||||
|
|
@ -851,7 +851,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
const dialogMessageNotify = (
|
const dialogMessageNotify = (
|
||||||
q: any,
|
q: any,
|
||||||
desc?: string, // ถ้ามี cancel action ใส่เป็น null
|
desc?: string, // ถ้ามี cancel action ใส่เป็น null
|
||||||
cancel?: Function,
|
cancel?: Function
|
||||||
) => {
|
) => {
|
||||||
q.dialog({
|
q.dialog({
|
||||||
component: CustomComponent,
|
component: CustomComponent,
|
||||||
|
|
@ -973,7 +973,7 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
* @returns ผลการคำนวน ปี เดือน วัน ในรูปแบบ 1 ปี 10 เดือน 5 วัน
|
* @returns ผลการคำนวน ปี เดือน วัน ในรูปแบบ 1 ปี 10 เดือน 5 วัน
|
||||||
*/
|
*/
|
||||||
function calculateDurationYmd(startDate: any, endDate: any) {
|
function calculateDurationYmd(startDate: any, endDate: any) {
|
||||||
if (!startDate || !endDate) return "";
|
if (!startDate || !endDate) return "";
|
||||||
|
|
||||||
let start = moment(startDate).startOf("day");
|
let start = moment(startDate).startOf("day");
|
||||||
let end = moment(endDate).startOf("day").add(1, "day");
|
let end = moment(endDate).startOf("day").add(1, "day");
|
||||||
|
|
@ -1252,15 +1252,9 @@ export const useCounterMixin = defineStore("mixin", () => {
|
||||||
|
|
||||||
// กรณีมีเฉพาะ date
|
// กรณีมีเฉพาะ date
|
||||||
function convertDateToAPI(date: Date | null) {
|
function convertDateToAPI(date: Date | null) {
|
||||||
if (!date) return null;
|
return date
|
||||||
|
? format(utcToZonedTime(date, "Asia/Bangkok"), "yyyy-MM-dd")
|
||||||
const parsedDate = new Date(date);
|
: null;
|
||||||
|
|
||||||
if (parsedDate) {
|
|
||||||
return format(parsedDate, "yyyy-MM-dd");
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// กรณี datetime
|
// กรณี datetime
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ async function checkUser() {
|
||||||
await dataStore.getProFileType();
|
await dataStore.getProFileType();
|
||||||
kpiDataStore.dataProfile = data; // Set dataProfile in kpiDataStore
|
kpiDataStore.dataProfile = data; // Set dataProfile in kpiDataStore
|
||||||
if (data.avatarName) {
|
if (data.avatarName) {
|
||||||
getImg(data.profileId, data.avatarName);
|
await getImg(data.profileId, data.avatarName);
|
||||||
} else {
|
} else {
|
||||||
dataStore.profileImg = avatar;
|
dataStore.profileImg = avatar;
|
||||||
}
|
}
|
||||||
|
|
@ -106,9 +106,6 @@ function getImg(id: string, pathName: string) {
|
||||||
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, pathName))
|
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, pathName))
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
dataStore.profileImg = res.data.downloadUrl;
|
dataStore.profileImg = res.data.downloadUrl;
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
dataStore.profileImg = avatar;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -175,13 +172,13 @@ const doLogout = () => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const clickDelete = async (id: string, index: number | string) => {
|
const clickDelete = async (id: string, index: number) => {
|
||||||
dialogRemove($q, async () => {
|
dialogRemove($q, async () => {
|
||||||
// showLoader();
|
// showLoader();
|
||||||
await http
|
await http
|
||||||
.delete(config.API.msgId(id))
|
.delete(config.API.msgId(id))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
notiList.value.splice(Number(index), 1);
|
notiList.value.splice(index, 1);
|
||||||
totalInbox.value--;
|
totalInbox.value--;
|
||||||
totalNoti.value--;
|
totalNoti.value--;
|
||||||
success($q, "ลบข้อมูลสำเร็จ");
|
success($q, "ลบข้อมูลสำเร็จ");
|
||||||
|
|
@ -775,10 +772,10 @@ watch(
|
||||||
<q-footer class="bg-grey-1 text-dark q-pa-md">
|
<q-footer class="bg-grey-1 text-dark q-pa-md">
|
||||||
<FooterContact />
|
<FooterContact />
|
||||||
</q-footer>
|
</q-footer>
|
||||||
|
|
||||||
<DialogResetPass v-model="modalResetPass" />
|
|
||||||
<DialogDebug v-model:modal="modalDebug" />
|
|
||||||
</q-layout>
|
</q-layout>
|
||||||
|
|
||||||
|
<DialogResetPass v-model="modalResetPass" />
|
||||||
|
<DialogDebug v-model:modal="modalDebug" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue