เพิ่มปุ่มลบ/refactor

This commit is contained in:
AnandaTon 2024-01-12 17:45:20 +07:00
parent 01b550520e
commit aa76e7d030
30 changed files with 8420 additions and 7699 deletions

View file

@ -16,13 +16,24 @@ import Table from "@/modules/05_leave/components/Table.vue";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
/**ตัวแปรที่ใช้ */
const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError, date2Thai, monthYear2Thai } =
mixin;
const {
showLoader,
hideLoader,
messageError,
date2Thai,
monthYear2Thai,
dialogRemove,
} = mixin;
const LeaveData = useLeaveStore();
const router = useRouter();
const route = useRoute();
const $q = useQuasar();
const leaveType = ref<LeaveType[]>();
const modal = ref<boolean>(false);
const leaveId = ref<string>("");
const leaveStatus = ref<string>("");
/** filter */
const year = ref<number>(new Date().getFullYear());
@ -37,66 +48,85 @@ const pageSize = ref<number>(10);
/** function เรียกข้อมูลการลา*/
async function fetchDataTable() {
showLoader();
const body = {
year: year.value, //*( .)
type: type.value, //*Id
status: status.value, //*
page: page.value.toString(), //*
pageSize: pageSize.value.toString(), //*
keyword: filter.value, //keyword
};
await http
.post(config.API.leaveTableList(), body)
.then((res) => {
const data = res.data.result.data;
LeaveData.fetchListLeave(data);
maxPage.value = Math.ceil(res.data.result.total / pageSize.value);
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
showLoader();
const body = {
year: year.value, //*( .)
type: type.value, //*Id
status: status.value, //*
page: page.value.toString(), //*
pageSize: pageSize.value.toString(), //*
keyword: filter.value, //keyword
};
await http
.post(config.API.leaveTableList(), body)
.then((res) => {
const data = res.data.result.data;
LeaveData.fetchListLeave(data);
maxPage.value = Math.ceil(res.data.result.total / pageSize.value);
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
const leaveType = ref<LeaveType[]>();
/** function เรียกประเภทการลา */
async function fectOptionType() {
await http
.get(config.API.leaveType())
.then(async (res) => {
leaveType.value = res.data.result;
LeaveData.fetchLeaveType(res.data.result);
})
.catch((err) => {
messageError($q, err);
});
await http
.get(config.API.leaveType())
.then(async (res) => {
leaveType.value = res.data.result;
LeaveData.fetchLeaveType(res.data.result);
})
.catch((err) => {
messageError($q, err);
});
}
const modal = ref<boolean>(false);
const leaveId = ref<string>("");
const leaveStatus = ref<string>("");
/**
* function openPopupDateail
* @param id การลา
* @param status การลา
*/
const onClickView = async (id: string, status: string) => {
modal.value = true;
leaveId.value = id;
leaveStatus.value = status;
modal.value = true;
leaveId.value = id;
leaveStatus.value = status;
};
/**
* function ไปหน edit
* @param id
*/
const onClickEdit = async (id: string) => {
router.push(`/leave/edit/${id}`);
router.push(`/leave/edit/${id}`);
};
//
const clickDelete = (id: string) => {
dialogRemove($q, () => onClickDelete(id));
};
/**
* function ลบรายการ
* @param id
*/
const onClickDelete = async (id: string) => {
await http
.delete(config.API.leaveUserId(id))
.then(async (res) => {
console.log("delete");
})
.catch((err) => {
messageError($q, err);
});
};
/** function closePopup*/
async function onClickClose() {
modal.value = false;
modal.value = false;
}
/**
@ -107,13 +137,13 @@ async function onClickClose() {
* @param k คำคนหา
*/
async function updateFilterTable(y: number, t: string, s: string, k: string) {
if (t && s) {
year.value = await y;
type.value = await t;
status.value = await s;
filter.value = await k;
await fetchDataTable();
}
if (t && s) {
year.value = await y;
type.value = await t;
status.value = await s;
filter.value = await k;
await fetchDataTable();
}
}
/**
@ -122,164 +152,174 @@ async function updateFilterTable(y: number, t: string, s: string, k: string) {
* @param ps แถวตอหน
*/
async function updatePagination(p: number, ps: number) {
(page.value = await p), (pageSize.value = await ps);
await fetchDataTable();
(page.value = await p), (pageSize.value = await ps);
await fetchDataTable();
}
/**
* เรยกฟงกนทงหมดตอนเรยกใชไฟล
*/
onMounted(async () => {
await fetchDataTable();
await fectOptionType();
await fetchDataTable();
await fectOptionType();
});
</script>
<template>
<Table
:rows="LeaveData.rows"
:columns="LeaveData.columns"
:visible-columns="LeaveData.visibleColumns"
v-model:inputfilter="filter"
v-model:inputvisible="LeaveData.visibleColumns"
:inputShow="true"
:grid="$q.screen.gt.xs ? false : true"
@update:filter="updateFilterTable"
@update:Pagination="updatePagination"
:maxPage="maxPage"
:pageSize="pageSize"
:leaveType="leaveType"
>
<template #columns="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
key="no"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ (page - 1) * pageSize + props.rowIndex + 1 }}
</q-td>
<q-td
key="leaveTypeName"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ props.row.leaveTypeName }}
</q-td>
<q-td
key="dateLeave"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ props.row.dateLeave }}
</q-td>
<q-td
key="dateSendLeave"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ props.row.dateSendLeave }}
</q-td>
<Table
:rows="LeaveData.rows"
:columns="LeaveData.columns"
:visible-columns="LeaveData.visibleColumns"
v-model:inputfilter="filter"
v-model:inputvisible="LeaveData.visibleColumns"
:inputShow="true"
:grid="$q.screen.gt.xs ? false : true"
@update:filter="updateFilterTable"
@update:Pagination="updatePagination"
:maxPage="maxPage"
:pageSize="pageSize"
:leaveType="leaveType"
>
<template #columns="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
key="no"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ (page - 1) * pageSize + props.rowIndex + 1 }}
</q-td>
<q-td
key="leaveTypeName"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ props.row.leaveTypeName }}
</q-td>
<q-td
key="dateLeave"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ props.row.dateLeave }}
</q-td>
<q-td
key="dateSendLeave"
:props="props"
@click="onClickView(props.row.id, props.row.status)"
>
{{ props.row.dateSendLeave }}
</q-td>
<q-td key="status" :props="props">
<div class="col-12 row items-center">
<div @click="onClickView(props.row.id, props.row.status)">
<q-icon
v-if="props.row.status == 'DRAFT'"
size="10px"
color="light-grey"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-if="props.row.status == 'APPROVE'"
size="10px"
color="light-green"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-else-if="props.row.status == 'REJECT'"
size="10px"
color="red-6"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-else-if="props.row.status == 'PENDING'"
size="10px"
color="light-blue-14"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-else-if="props.row.status == 'NEW'"
size="10px"
color="orange"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-if="props.row.status == 'DELETE'"
size="10px"
color="grey-10"
name="mdi-circle"
class="q-mr-sm"
/>
<q-td key="status" :props="props">
<div class="col-12 row items-center">
<div @click="onClickView(props.row.id, props.row.status)">
<q-icon
v-if="props.row.status == 'DRAFT'"
size="10px"
color="light-grey"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-if="props.row.status == 'APPROVE'"
size="10px"
color="light-green"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-else-if="props.row.status == 'REJECT'"
size="10px"
color="red-6"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-else-if="props.row.status == 'PENDING'"
size="10px"
color="light-blue-14"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-else-if="props.row.status == 'NEW'"
size="10px"
color="orange"
name="mdi-circle"
class="q-mr-sm"
/>
<q-icon
v-if="props.row.status == 'DELETE'"
size="10px"
color="grey-10"
name="mdi-circle"
class="q-mr-sm"
/>
<span class="q-pr-md">{{ props.row.statusConvert }}</span>
</div>
<q-space />
<span class="q-pr-md">{{ props.row.statusConvert }}</span>
</div>
<q-space />
<q-btn
v-if="
props.row.status != 'DELETE' &&
props.row.status != 'REJECT' &&
props.row.status != 'CANCEL'
"
flat
icon="mdi-dots-vertical"
color="grey-8"
for="#cancel"
dense
round
unelevated
>
<q-menu>
<q-list>
<q-item
clickable
v-close-popup
@click="onClickView(props.row.id, 'CANCEL')"
>
<q-item-section>
<q-item-label>ขอยกเล</q-item-label>
</q-item-section>
</q-item>
<q-item
v-if="props.row.status == 'DRAFT'"
clickable
v-close-popup
@click="onClickEdit(props.row.id)"
>
<q-item-section>
<q-item-label>แกไข</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>
</div>
</q-td>
</q-tr>
</template>
</Table>
<q-btn
v-if="
props.row.status != 'DELETE' &&
props.row.status != 'REJECT' &&
props.row.status != 'CANCEL'
"
flat
icon="mdi-dots-vertical"
color="grey-8"
for="#cancel"
dense
round
unelevated
>
<q-menu>
<q-list>
<q-item
clickable
v-close-popup
@click="onClickView(props.row.id, 'CANCEL')"
>
<q-item-section>
<q-item-label>ขอยกเล</q-item-label>
</q-item-section>
</q-item>
<q-item
v-if="props.row.status == 'DRAFT'"
clickable
v-close-popup
@click="onClickEdit(props.row.id)"
>
<q-item-section>
<q-item-label>แกไข</q-item-label>
</q-item-section>
</q-item>
<q-item
v-if="props.row.status == 'DRAFT'"
clickable
v-close-popup
@click="clickDelete(props.row.id)"
>
<q-item-section>
<q-item-label>ลบรายการการลา</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>
</div>
</q-td>
</q-tr>
</template>
</Table>
<DialogDetail
:modal="modal"
:leaveId="leaveId"
:leaveStatus="leaveStatus"
:onClickClose="onClickClose"
:leaveType="leaveType"
:fetchDataTable="fetchDataTable"
/>
<DialogDetail
:modal="modal"
:leaveId="leaveId"
:leaveStatus="leaveStatus"
:onClickClose="onClickClose"
:leaveType="leaveType"
:fetchDataTable="fetchDataTable"
/>
</template>