Compare commits

..

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

19 changed files with 95 additions and 293 deletions

View file

@ -8,7 +8,6 @@ import config from "@/app.config";
import type { PropType } from "vue"; import type { PropType } from "vue";
import type { FormProfile } from "@/interface/main"; import type { FormProfile } from "@/interface/main";
import type { DataProfile } from "@/modules/05_placement/interface/index/Main"; import type { DataProfile } from "@/modules/05_placement/interface/index/Main";
import avatarMain from "@/assets/avatar_user.jpg";
/** importComponents*/ /** importComponents*/
import PopupPersonal from "@/components/Dialogs/PopupPersonalNew.vue"; import PopupPersonal from "@/components/Dialogs/PopupPersonalNew.vue";
@ -92,11 +91,8 @@ function fetchProfile(id: string, name: string) {
if (profile.avatar === "") { if (profile.avatar === "") {
http http
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, `${name}`)) .get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, `${name}`))
.then((res) => { .then(async (res) => {
profile.avatar = res.data.downloadUrl; profile.avatar = res.data.downloadUrl;
})
.catch(() => {
profile.avatar = avatarMain;
}); });
} }
} }

View file

@ -9,8 +9,6 @@
round round
dense dense
@click="close" @click="close"
@keydown.enter.prevent
@keydown.space.prevent
style="color: #ff8080; background-color: #ffdede" style="color: #ff8080; background-color: #ffdede"
/> />
</q-toolbar> </q-toolbar>

View file

@ -14,7 +14,6 @@ import type {
GovermentEmpTemp, GovermentEmpTemp,
} from "@/components/information/interface/response/Government"; } from "@/components/information/interface/response/Government";
import type { Avatar } from "@/components/information/interface/response/avatar"; import type { Avatar } from "@/components/information/interface/response/avatar";
import avatarMain from "@/assets/avatar_user.jpg";
/** importStore*/ /** importStore*/
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
@ -168,9 +167,9 @@ async function fetchInformation(id: string) {
avatar.position = data.position ? data.position : "-"; avatar.position = data.position ? data.position : "-";
// Function fetchProfile // Function fetchProfile
if (data.avatarName) { if (data.avatarName) {
fetchProfile(data.id as string, data.avatarName); await fetchProfile(data.id as string, data.avatarName);
} else { } else {
avatar.avatar = avatarMain; avatar.avatar = "";
} }
if (props.id) { if (props.id) {
@ -261,14 +260,11 @@ async function fetchProfileGovTemp(id: string) {
* @param id profileID * @param id profileID
* @param avatarName อไฟล * @param avatarName อไฟล
*/ */
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) => {
avatar.avatar = res.data.downloadUrl; avatar.avatar = await res.data.downloadUrl;
})
.catch(() => {
avatar.avatar = avatarMain;
}); });
} }

View file

@ -866,8 +866,7 @@ onMounted(() => {
outlined outlined
dense dense
:model-value="date2Thai(formData.dateEnd)" :model-value="date2Thai(formData.dateEnd)"
clearable :rules="[(val:string) => !!val || `${'กรุณาเลือก วันที่สิ้นสุด'}`]"
@clear="formData.dateEnd = null"
hide-bottom-space hide-bottom-space
:label="`${'วันที่สิ้นสุด'}`" :label="`${'วันที่สิ้นสุด'}`"
> >

View file

@ -408,8 +408,7 @@ function calculateMinDate() {
function prefixRankRule() { function prefixRankRule() {
return [ return [
() => () => !!formData.rank || !!formData.prefix || "กรุณาเลือกคำนำหน้าชื่อ หรือยศ",
!!formData.rank || !!formData.prefix || "กรุณาเลือกคำนำหน้าชื่อ หรือยศ",
]; ];
} }
@ -589,7 +588,6 @@ onMounted(() => {
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-select <q-select
:readonly="checkPermission($route)?.attrOwnership !== 'OWNER'"
dense dense
outlined outlined
use-input use-input
@ -604,6 +602,7 @@ onMounted(() => {
option-value="name" option-value="name"
v-model="formData.prefix" v-model="formData.prefix"
clearable clearable
class="inputgreen"
:options="store.Ops.prefixOps" :options="store.Ops.prefixOps"
:label="dataLabel.prefix" :label="dataLabel.prefix"
:rules="prefixRankRule()" :rules="prefixRankRule()"
@ -641,24 +640,24 @@ onMounted(() => {
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-input <q-input
:readonly="checkPermission($route)?.attrOwnership !== 'OWNER'"
dense dense
outlined outlined
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
v-model="formData.firstName" v-model="formData.firstName"
class="inputgreen"
:label="dataLabel.firstName" :label="dataLabel.firstName"
:rules="[(val: string) => !!val || `${'กรุณากรอก ชื่อ'}`]" :rules="[(val: string) => !!val || `${'กรุณากรอก ชื่อ'}`]"
/> />
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-input <q-input
:readonly="checkPermission($route)?.attrOwnership !== 'OWNER'"
dense dense
outlined outlined
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
v-model="formData.lastName" v-model="formData.lastName"
class="inputgreen"
:label="dataLabel.lastName" :label="dataLabel.lastName"
:rules="[(val: string) => !!val || `${'กรุณากรอก นามสกุล'}`]" :rules="[(val: string) => !!val || `${'กรุณากรอก นามสกุล'}`]"
/> />
@ -722,7 +721,6 @@ onMounted(() => {
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-select <q-select
:readonly="checkPermission($route)?.attrOwnership !== 'OWNER'"
dense dense
outlined outlined
use-input use-input
@ -737,6 +735,7 @@ onMounted(() => {
option-label="name" option-label="name"
option-value="name" option-value="name"
v-model="formData.gender" v-model="formData.gender"
class="inputgreen"
:options="store.Ops.genderOps" :options="store.Ops.genderOps"
:label="dataLabel.gender" :label="dataLabel.gender"
@filter="(inputValue: string, @filter="(inputValue: string,

View file

@ -323,10 +323,10 @@ async function uploadFileURL(uploadUrl: string, file: any) {
* งกนดงขอมลรปโปรไฟล * งกนดงขอมลรปโปรไฟล
* @param id โปรไฟล * @param id โปรไฟล
*/ */
function fetchProfile(id: string) { async function fetchProfile(id: string) {
http await http
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, fileName.value)) .get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, fileName.value))
.then((res) => { .then(async (res) => {
profilePicture.value = res.data.downloadUrl; profilePicture.value = res.data.downloadUrl;
}) })
.catch(() => { .catch(() => {
@ -403,7 +403,7 @@ async function fetchDataPersonal() {
fileName.value = res.data.result.avatarName; fileName.value = res.data.result.avatarName;
if (formDetail.value?.avatarName) { if (formDetail.value?.avatarName) {
fetchProfile(profileId.value); await fetchProfile(profileId.value);
} else { } else {
profilePicture.value = avatar; profilePicture.value = avatar;
} }

View file

@ -889,8 +889,8 @@ function handleSortByDate() {
hideLoader(); hideLoader();
} }
}, },
"ยืนยันการจัดลำดับ", "ยืนยันการเรียงลำดับข้อมูล",
"ต้องการยืนยันการจัดลำดับข้อมูลตามวันที่คำสั่งมีผลใช่หรือไม่?" "ต้องการยืนยันการเรียงลำดับข้อมูลนี้ใช่หรือไม่?"
); );
} }
@ -941,10 +941,10 @@ onMounted(async () => {
flat flat
dense dense
color="indigo-5" color="indigo-5"
icon="mdi-calendar-export" icon="mdi-sort-alphabetical-descending"
@click="handleSortByDate()" @click="handleSortByDate()"
> >
<q-tooltip>ดลำดบตามวนทคำสงม</q-tooltip> <q-tooltip>เรยงลำดบขอม</q-tooltip>
</q-btn> </q-btn>
<q-space /> <q-space />
<div> <div>

View file

@ -316,10 +316,9 @@ onMounted(() => {
:model-value=" :model-value="
dateEnd !== null ? date2Thai(dateEnd) : null dateEnd !== null ? date2Thai(dateEnd) : null
" "
:rules="edit ? [(val:string) => !!val || `${'กรุณาเลือกตั้งแต่วัน'}`]:[]"
hide-bottom-space hide-bottom-space
:label="`${'ถึงวันที่'}`" :label="`${'ถึงวันที่'}`"
clearable
@clear="dateEnd = null"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon <q-icon

View file

@ -10,25 +10,25 @@ import type {
} from "@/modules/05_placement/interface/request/Main"; } from "@/modules/05_placement/interface/request/Main";
import type { FormOrderPlacementMainData } from "@/modules/05_placement/interface/request/Main"; import type { FormOrderPlacementMainData } from "@/modules/05_placement/interface/request/Main";
interface profile {
main: { columns: String[] };
education: { columns: String[] };
certicate: { columns: String[] };
train: { columns: String[] };
insignia: { columns: String[] };
coined: { columns: String[] };
assessment: { columns: String[] };
salary: { columns: String[] };
discipline: { columns: String[] };
leave: { columns: String[] };
talent: { columns: String[] };
work: { columns: String[] };
record: { columns: String[] };
other: { columns: String[] };
document: { columns: String[] };
}
export const useProfileDataStore = defineStore("profilePlacenent", () => { export const useProfileDataStore = defineStore("profilePlacenent", () => {
interface profile {
main: { columns: String[] };
education: { columns: String[] };
certicate: { columns: String[] };
train: { columns: String[] };
insignia: { columns: String[] };
coined: { columns: String[] };
assessment: { columns: String[] };
salary: { columns: String[] };
discipline: { columns: String[] };
leave: { columns: String[] };
talent: { columns: String[] };
work: { columns: String[] };
record: { columns: String[] };
other: { columns: String[] };
document: { columns: String[] };
}
const birthDate = ref<Date>(new Date()); const birthDate = ref<Date>(new Date());
const retireText = ref<string | null>(null); const retireText = ref<string | null>(null);
const changeRetireText = (val: string | null) => { const changeRetireText = (val: string | null) => {
@ -87,15 +87,15 @@ export const useProfileDataStore = defineStore("profilePlacenent", () => {
changeRetireText, changeRetireText,
}; };
}); });
interface placement {
mappingPosition: { columns: String[] };
}
export const usePlacementDataStore = defineStore("placement", () => { export const usePlacementDataStore = defineStore("placement", () => {
const mixin = useCounterMixin(); //เรียกฟังก์ชันกลาง const mixin = useCounterMixin(); //เรียกฟังก์ชันกลาง
const tabsMain = ref<string>("probation"); const tabsMain = ref<string>("probation");
const isOfficer = ref<boolean | null>(null); const isOfficer = ref<boolean | null>(null);
const isStaff = ref<boolean | null>(null); const isStaff = ref<boolean | null>(null);
const { hideLoader } = mixin; const { hideLoader } = mixin;
interface placement {
mappingPosition: { columns: String[] };
}
const placementData = ref<placement>({ const placementData = ref<placement>({
mappingPosition: { columns: [] }, mappingPosition: { columns: [] },
}); });
@ -218,10 +218,10 @@ export const usePlacementDataStore = defineStore("placement", () => {
isStaff, isStaff,
}; };
}); });
interface placementOrder {
mappingPosition: { columns: String[] };
}
export const useOrderPlacementDataStore = defineStore("placementOrder", () => { export const useOrderPlacementDataStore = defineStore("placementOrder", () => {
interface placementOrder {
mappingPosition: { columns: String[] };
}
const placementOrderData = ref<placementOrder>({ const placementOrderData = ref<placementOrder>({
mappingPosition: { columns: [] }, mappingPosition: { columns: [] },
}); });
@ -369,8 +369,6 @@ export const useTransferDataStore = defineStore("transferDataStore", () => {
]); ]);
const statusOp = ref<DataOptions[]>(statusMainOp.value); const statusOp = ref<DataOptions[]>(statusMainOp.value);
const statusDelete = ["REPORT", "WAITING", "DONE"];
const statusText = (val: string) => { const statusText = (val: string) => {
switch (val) { switch (val) {
case "WAITTING": case "WAITTING":
@ -440,6 +438,5 @@ export const useTransferDataStore = defineStore("transferDataStore", () => {
statusOp, statusOp,
statusMainOp, statusMainOp,
filterOption, filterOption,
statusDelete,
}; };
}); });

View file

@ -2,7 +2,7 @@
import { ref, onMounted, computed } from "vue"; import { ref, onMounted, computed } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router"; import { useRouter } from "vue-router";
import { import {
checkPermission, checkPermission,
checkPermissionList, checkPermissionList,
@ -20,19 +20,11 @@ import DialogOrders from "@/modules/05_placement/components/Transfer/DialogOrder
const $q = useQuasar(); const $q = useQuasar();
const router = useRouter(); const router = useRouter();
const route = useRoute();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const store = useTransferDataStore(); const store = useTransferDataStore();
const { statusText, filterOption } = useTransferDataStore(); const { statusText, filterOption } = useTransferDataStore();
const { const { date2Thai, messageError, showLoader, hideLoader, onSearchDataTable } =
date2Thai, mixin;
messageError,
showLoader,
hideLoader,
onSearchDataTable,
dialogRemove,
success,
} = mixin;
const modal = ref<boolean>(false); // const modal = ref<boolean>(false); //
const dataTransfer = ref<ResponseData[]>([]); // const dataTransfer = ref<ResponseData[]>([]); //
@ -149,15 +141,6 @@ const visibleColumns = ref<string[]>([
"createdAt", "createdAt",
]); ]);
const isPermissionDelete = computed(() => {
return (status: string) => {
return (
checkPermission(route)?.attrOwnership === "OWNER" &&
!store.statusDelete.includes(status)
);
};
});
/** ฟังก์ชันดึงข้อมูรายการขอโอน*/ /** ฟังก์ชันดึงข้อมูรายการขอโอน*/
async function fetchData() { async function fetchData() {
showLoader(); showLoader();
@ -211,21 +194,6 @@ function onSearch() {
); );
} }
function handleDelete(id: string) {
dialogRemove($q, async () => {
try {
showLoader();
await http.delete(config.API.transfer + `/admin/${id}`);
await fetchData();
success($q, "ลบข้อมูลสำเร็จ");
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
});
}
/** /**
* ทำงานเม Components กเรยกใชงาน * ทำงานเม Components กเรยกใชงาน
* จะเรยกใช fetchData เพอดงขอมลรายการขอโอน * จะเรยกใช fetchData เพอดงขอมลรายการขอโอน
@ -369,18 +337,6 @@ onMounted(async () => {
> >
<q-tooltip>รายละเอยด</q-tooltip> <q-tooltip>รายละเอยด</q-tooltip>
</q-btn> </q-btn>
<q-btn
v-if="isPermissionDelete(props.row.status)"
flat
round
dense
icon="mdi-delete"
color="red"
@click.prevent="handleDelete(props.row.id)"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.id"> <q-td v-for="col in props.cols" :key="col.id">
<div v-if="col.name === 'no'"> <div v-if="col.name === 'no'">

View file

@ -313,7 +313,7 @@ function openDelete(id: string) {
dialogRemove($q, async () => { dialogRemove($q, async () => {
showLoader(); showLoader();
await http await http
.delete(config.API.receiveData() + `/admin/${id}`) .delete(config.API.receiveDataId(id))
.then(async () => { .then(async () => {
await fecthlistRecevice(); await fecthlistRecevice();
await success($q, "ลบข้อมูลสำเร็จ"); await success($q, "ลบข้อมูลสำเร็จ");
@ -606,10 +606,8 @@ onMounted(async () => {
<q-item <q-item
v-if=" v-if="
checkPermission($route)?.attrOwnership === checkPermission($route)?.attrIsDelete &&
'OWNER' &&
props.row.status !== 'REPORT' && props.row.status !== 'REPORT' &&
props.row.status !== 'WAITING' &&
props.row.status !== 'DONE' props.row.status !== 'DONE'
" "
clickable clickable

View file

@ -236,7 +236,8 @@ function openModalOrder() {
item.status == "APPROVE") && item.status == "APPROVE") &&
item.organizationPositionOld && item.organizationPositionOld &&
item.organization && item.organization &&
item.dateStart item.dateStart &&
item.dateEnd
); );
rows2.value = row; rows2.value = row;
rows2Data.value = row; rows2Data.value = row;

View file

@ -33,8 +33,7 @@ const {
showLoader, showLoader,
hideLoader, hideLoader,
onSearchDataTable, onSearchDataTable,
dialogRemove, findOrgName,
success,
} = mixin; } = mixin;
/** Table */ /** Table */
@ -258,21 +257,6 @@ function onSearch() {
); );
} }
function handleDelete(id: string) {
dialogRemove($q, async () => {
try {
showLoader();
await http.delete(config.API.listResign() + `/admin/${id}`);
await fecthlist();
success($q, "ลบข้อมูลสำเร็จ");
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
});
}
/**Hook */ /**Hook */
onMounted(async () => { onMounted(async () => {
status.value = stroeResign.formQurey.status; status.value = stroeResign.formQurey.status;
@ -324,11 +308,7 @@ onMounted(async () => {
color="primary" color="primary"
icon="mdi-account-arrow-right" icon="mdi-account-arrow-right"
> >
<q-tooltip>{{ <q-tooltip>{{ `ส่งไปออกคำสั่ง${stroeResign.mainTabs == '2'?"ยกเลิกการ":''}ลาออก` }}</q-tooltip>
`ส่งไปออกคำสั่ง${
stroeResign.mainTabs == "2" ? "ยกเลิกการ" : ""
}ลาออก`
}}</q-tooltip>
</q-btn> </q-btn>
</div> </div>
<q-space /> <q-space />
@ -413,26 +393,6 @@ onMounted(async () => {
> >
<q-tooltip>แกไขขอม</q-tooltip> <q-tooltip>แกไขขอม</q-tooltip>
</q-btn> </q-btn>
<q-btn
v-if="
checkPermission($route)?.attrOwnership === 'OWNER' &&
props.row.status !== 'REPORT' &&
props.row.status !== 'WAITING' &&
props.row.status !== 'DONE' &&
props.row.status !== 'CANCELING' &&
props.row.status !== 'CANCEL' &&
stroeResign.mainTabs === '1'
"
flat
dense
round
color="red"
icon="delete"
@click.prevent="handleDelete(props.row.id)"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.id"> <q-td v-for="col in props.cols" :key="col.id">
<div <div

View file

@ -27,15 +27,8 @@ const stroeResign = useDataStore();
const { statusText } = stroe; const { statusText } = stroe;
const router = useRouter(); const router = useRouter();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const { messageError, date2Thai, showLoader, hideLoader, onSearchDataTable } =
messageError, mixin;
date2Thai,
showLoader,
hideLoader,
onSearchDataTable,
dialogRemove,
success,
} = mixin;
/** Table */ /** Table */
const rows = ref<ResponseItems[]>([]); const rows = ref<ResponseItems[]>([]);
@ -136,7 +129,7 @@ const columns = ref<QTableProps["columns"]>([
sortable: true, sortable: true,
field: "status", field: "status",
format(val, row) { format(val, row) {
return stroeResign.mainTabsEMP === "1" return stroeResign.mainTabs === "1"
? statusText(row.status) ? statusText(row.status)
: statusText(row.status, "อนุญาต"); : statusText(row.status, "อนุญาต");
}, },
@ -259,21 +252,6 @@ function onSearch() {
); );
} }
function handleDelete(id: string) {
dialogRemove($q, async () => {
try {
showLoader();
await http.delete(config.API.listResignEMP() + `/admin/${id}`);
await fecthlist();
success($q, "ลบข้อมูลสำเร็จ");
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
});
}
/**Hook */ /**Hook */
onMounted(async () => { onMounted(async () => {
statusEMP.value = stroeResign.formQureyEMP.status; statusEMP.value = stroeResign.formQureyEMP.status;
@ -413,26 +391,6 @@ onMounted(async () => {
> >
<q-tooltip>แกไขขอม</q-tooltip> <q-tooltip>แกไขขอม</q-tooltip>
</q-btn> </q-btn>
<q-btn
v-if="
checkPermission($route)?.attrOwnership === 'OWNER' &&
props.row.status !== 'REPORT' &&
props.row.status !== 'WAITING' &&
props.row.status !== 'DONE' &&
props.row.status !== 'CANCELING' &&
props.row.status !== 'CANCEL' &&
stroeResign.mainTabsEMP === '1'
"
flat
dense
round
color="red"
icon="delete"
@click.prevent="handleDelete(props.row.id)"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.id"> <q-td v-for="col in props.cols" :key="col.id">
<div <div

View file

@ -1,59 +1,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, computed } from "vue"; import { ref, onMounted, watch } from "vue";
import { useQuasar } from "quasar";
import type { QTableProps } from "quasar"; import type { QTableProps } from "quasar";
import { useRouter, useRoute } from "vue-router"; import { useRouter } from "vue-router";
import { checkPermission } from "@/utils/permissions"; import { checkPermission } from "@/utils/permissions";
import { useLeavelistDataStore } from "@/modules/09_leave/stores/LeaveStore"; import { useLeavelistDataStore } from "@/modules/09_leave/stores/LeaveStore";
import { useCounterMixin } from "@/stores/mixin";
import http from "@/plugins/http";
import config from "@/app.config";
const $q = useQuasar();
const leaveStore = useLeavelistDataStore(); const leaveStore = useLeavelistDataStore();
const route = useRoute();
const router = useRouter(); const router = useRouter();
const { showLoader, hideLoader, messageError, dialogRemove, success } =
useCounterMixin();
const total = defineModel<number>("total", { required: true }); const total = defineModel<number>("total", { required: true });
const totalList = defineModel<number>("totalList", { required: true }); const totalList = defineModel<number>("totalList", { required: true });
const pagination = defineModel<any>("pagination", { required: true }); const pagination = defineModel<any>("pagination", { required: true });
const props = defineProps({
getList: Function,
rows: {
type: Object,
require: true,
},
page: {
type: Number,
require: true,
},
rowsPerPage: {
type: Number,
require: true,
},
maxPage: {
type: Number,
require: true,
},
totalList: {
type: Number,
require: true,
},
dataToobar: Object,
});
const isPermissionDelete = computed(() => {
return (status: string) => {
return (
checkPermission(route)?.attrOwnership === "OWNER" &&
!leaveStore.statusDelete.includes(status) &&
leaveStore.tabMenu === "1"
);
};
});
/** ข้อมูลหัวตาราง รายการลา */ /** ข้อมูลหัวตาราง รายการลา */
const columnsLeave = ref<QTableProps["columns"]>([ const columnsLeave = ref<QTableProps["columns"]>([
@ -254,6 +212,31 @@ const visibleReject = ref<string[]>([
"status", "status",
]); ]);
const props = defineProps({
getList: Function,
rows: {
type: Object,
require: true,
},
page: {
type: Number,
require: true,
},
rowsPerPage: {
type: Number,
require: true,
},
maxPage: {
type: Number,
require: true,
},
totalList: {
type: Number,
require: true,
},
dataToobar: Object,
});
/** ไปหน้ารายละเอียด */ /** ไปหน้ารายละเอียด */
function redirectToDetail(id: string) { function redirectToDetail(id: string) {
const routePrefix = leaveStore.tabMenu === "1" ? "/leave" : "/leave-reject"; const routePrefix = leaveStore.tabMenu === "1" ? "/leave" : "/leave-reject";
@ -281,21 +264,6 @@ function getStatusColor(statusText: string) {
return statusMap[statusText.toUpperCase()] ?? ""; return statusMap[statusText.toUpperCase()] ?? "";
} }
function handleDelete(id: string) {
dialogRemove($q, async () => {
try {
showLoader();
await http.delete(config.API.leaveList() + `/${id}`);
await props.getList?.();
success($q, "ลบข้อมูลสำเร็จ");
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
});
}
/** Hook*/ /** Hook*/
onMounted(() => { onMounted(() => {
if (leaveStore.tabMenu === "1") { if (leaveStore.tabMenu === "1") {
@ -345,17 +313,6 @@ onMounted(() => {
> >
<q-tooltip>รายละเอยด</q-tooltip> <q-tooltip>รายละเอยด</q-tooltip>
</q-btn> </q-btn>
<q-btn
v-if="isPermissionDelete(props.row.statusText)"
flat
round
dense
icon="mdi-delete"
color="red"
@click.prevent="handleDelete(props.row.id)"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td> </q-td>
<q-td <q-td
v-for="col in props.cols" v-for="col in props.cols"

View file

@ -44,8 +44,6 @@ export const useLeavelistDataStore = defineStore("leave", () => {
const leaveType = ref<LeaveType[]>([]); const leaveType = ref<LeaveType[]>([]);
const statusDelete = ["APPROVE", "DELETING", "DELETE"];
/** /**
* fetchListLeave * fetchListLeave
* @param data Page * @param data Page
@ -266,6 +264,5 @@ export const useLeavelistDataStore = defineStore("leave", () => {
leaveTypeOption, leaveTypeOption,
leaveTypeList, leaveTypeList,
fetchKeycloakPosition, fetchKeycloakPosition,
statusDelete,
}; };
}); });

View file

@ -52,7 +52,7 @@ function fetchInformation() {
citizenId.value = data.citizenId; citizenId.value = data.citizenId;
if (data.avatarName) { if (data.avatarName) {
fetchProfile(data.id as string, data.avatarName); await fetchProfile(data.id as string, data.avatarName);
} else { } else {
avatar.value = avatarMain; avatar.value = avatarMain;
} }
@ -70,14 +70,11 @@ function fetchInformation() {
* @param id profileId * @param id profileId
* @param avatarName อไฟล * @param avatarName อไฟล
*/ */
function fetchProfile(id: string, avatarName: string) { async function fetchProfile(id: string, avatarName: string) {
http http
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, avatarName)) .get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, avatarName))
.then((res) => { .then(async (res) => {
avatar.value = res.data.downloadUrl; avatar.value = res.data.downloadUrl;
})
.catch(() => {
avatar.value = avatarMain;
}); });
} }

View file

@ -8,7 +8,6 @@ import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useKpiDataStore } from "@/modules/14_KPI/store"; import { useKpiDataStore } from "@/modules/14_KPI/store";
import avatar from "@/assets/avatar_user.jpg";
import DialogHeader from "@/components/DialogHeader.vue"; import DialogHeader from "@/components/DialogHeader.vue";
import type { FormProfile } from "@/modules/14_KPI/interface/request/index"; import type { FormProfile } from "@/modules/14_KPI/interface/request/index";
@ -66,7 +65,7 @@ async function fetchEvaluation() {
await store.checkCompetency(); await store.checkCompetency();
await store.checkCompetencyDefaultCompetencyLevel(); await store.checkCompetencyDefaultCompetencyLevel();
fetchProfile(data.profileId); await fetchProfile(data.profileId);
plannedPoint.value = data.plannedPoint == null ? "" : data.plannedPoint; plannedPoint.value = data.plannedPoint == null ? "" : data.plannedPoint;
rolePoint.value = data.rolePoint == null ? "" : data.rolePoint; rolePoint.value = data.rolePoint == null ? "" : data.rolePoint;
@ -82,8 +81,8 @@ async function fetchEvaluation() {
// }); // });
} }
function fetchProfile(id: string) { async function fetchProfile(id: string) {
http await http
.get( .get(
config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, `profile-${id}`) config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, `profile-${id}`)
) )
@ -91,7 +90,6 @@ function fetchProfile(id: string) {
store.dataEvaluation.avartar = res.data.downloadUrl; store.dataEvaluation.avartar = res.data.downloadUrl;
}) })
.catch(() => { .catch(() => {
store.dataEvaluation.avartar = avatar;
// profilePicture.value = avatar; // profilePicture.value = avatar;
}); });
} }

View file

@ -532,29 +532,25 @@ async function fetchKeycloakPosition() {
await http await http
.get(config.API.keycloakPosition()) .get(config.API.keycloakPosition())
.then(async (res) => { .then(async (res) => {
const data = res.data.result; const data = await res.data.result;
usePositionKeycloakStore().setPositionKeycloak(data); usePositionKeycloakStore().setPositionKeycloak(data);
if (data.avatarName) { if (data.avatarName) {
getImg(data.profileId, data.avatarName); await getImg(data.profileId, data.avatarName);
} else { } else {
profileImg.value = avatar; profileImg.value = avatar;
} }
}) })
.catch((err) => { .catch((err) => {
messageError($q, err); messageError($q, err);
profileImg.value = avatar;
}); });
} }
const profileImg = ref<string>(""); const profileImg = ref<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((err) => {
profileImg.value = avatar;
}); });
} }