Merge branch 'develop' into devTee
# Conflicts: # src/modules/09_leave/components/2_Leave/DetailLeave.vue
This commit is contained in:
commit
5d34c40b41
11 changed files with 257 additions and 148 deletions
|
|
@ -30,7 +30,7 @@ function saveData() {
|
||||||
class="q-mr-sm"
|
class="q-mr-sm"
|
||||||
@click="router.push(`/leave-list`)"
|
@click="router.push(`/leave-list`)"
|
||||||
/>
|
/>
|
||||||
รายละเอียดการลาของ {{ paramsId }}
|
รายละเอียดการลาของ นายปิยรมย์ ศิริธาราฟ
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<q-btn
|
<q-btn
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ const paginationLabel = (start: string, end: string, total: string) => {
|
||||||
v-for="col in props.cols"
|
v-for="col in props.cols"
|
||||||
:key="col.name"
|
:key="col.name"
|
||||||
:props="props"
|
:props="props"
|
||||||
@click.prevent="router.push(`/leave/detail/${props.row.name}`)"
|
@click.prevent="router.push(`/leave/detail/${props.row.id}`)"
|
||||||
>
|
>
|
||||||
<div v-if="col.name == 'no'">
|
<div v-if="col.name == 'no'">
|
||||||
{{ props.rowIndex + 1 }}
|
{{ props.rowIndex + 1 }}
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,6 @@ const { searchDataFn, filterOption } = leaveStore;
|
||||||
<div class="col-xs-12 col-sm-3 col-md-2">
|
<div class="col-xs-12 col-sm-3 col-md-2">
|
||||||
<q-select
|
<q-select
|
||||||
for="selectStatus"
|
for="selectStatus"
|
||||||
v-if="leaveStore.tab == '2'"
|
|
||||||
emit-value
|
emit-value
|
||||||
map-options
|
map-options
|
||||||
outlined
|
outlined
|
||||||
|
|
@ -101,5 +100,3 @@ const { searchDataFn, filterOption } = leaveStore;
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
|
||||||
|
|
|
||||||
10
src/modules/09_leave/interface/request/leave.ts
Normal file
10
src/modules/09_leave/interface/request/leave.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
interface ListsData {
|
||||||
|
id: string;
|
||||||
|
leaveType: string
|
||||||
|
name: string
|
||||||
|
Date: string
|
||||||
|
status: string
|
||||||
|
}
|
||||||
|
export type {
|
||||||
|
ListsData
|
||||||
|
}
|
||||||
12
src/modules/09_leave/interface/request/specialTime.ts
Normal file
12
src/modules/09_leave/interface/request/specialTime.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
interface ListData {
|
||||||
|
id: string;
|
||||||
|
fullname: string | null;
|
||||||
|
date: string | null;
|
||||||
|
dateFix: string | null;
|
||||||
|
startTimeMorning: string | null;
|
||||||
|
endTimeMorning: string | null;
|
||||||
|
startTimeAfternoon: string | null;
|
||||||
|
endTimeAfternoon: string | null;
|
||||||
|
status: string;
|
||||||
|
}
|
||||||
|
export type { ListData };
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
interface DataRows {
|
interface DataRows {
|
||||||
|
id: string;
|
||||||
fullname: string | null;
|
fullname: string | null;
|
||||||
date: string | null;
|
date: string | null;
|
||||||
dateFix: string | null;
|
dateFix: string | null;
|
||||||
type: string;
|
timeMorning: string;
|
||||||
reason: string;
|
timeAfternoon: string;
|
||||||
timeStamp: string;
|
status: string;
|
||||||
unapprove?: string; // Make these properties optional
|
|
||||||
approve?: string;
|
|
||||||
}
|
}
|
||||||
export type { DataRows };
|
export type { DataRows };
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@ import { useCounterMixin } from "@/stores/mixin";
|
||||||
import type { DataOption } from "@/modules/09_leave/interface/index/Main";
|
import type { DataOption } from "@/modules/09_leave/interface/index/Main";
|
||||||
import type { QTableProps } from "quasar";
|
import type { QTableProps } from "quasar";
|
||||||
import type { DataRows } from "@/modules/09_leave/interface/response/leave";
|
import type { DataRows } from "@/modules/09_leave/interface/response/leave";
|
||||||
|
import type { ListsData } from "@/modules/09_leave/interface/request/leave";
|
||||||
|
|
||||||
const mixin = useCounterMixin();
|
const mixin = useCounterMixin();
|
||||||
const { date2Thai, showLoader, hideLoader } = mixin;
|
const { date2Thai, showLoader, hideLoader } = mixin;
|
||||||
export const useLeavelistDataStore = defineStore("leave", () => {
|
export const useLeavelistDataStore = defineStore("leave", () => {
|
||||||
//TABMENU
|
//TABMENU
|
||||||
const tab = ref<string>("1");
|
|
||||||
const amounttab1 = ref<number>(0);
|
const amounttab1 = ref<number>(0);
|
||||||
const amounttab2 = ref<number>(0);
|
const amounttab2 = ref<number>(0);
|
||||||
//ข้อมูลในตาราง
|
//ข้อมูลในตาราง
|
||||||
|
|
@ -19,20 +19,19 @@ export const useLeavelistDataStore = defineStore("leave", () => {
|
||||||
const columns = ref<QTableProps["columns"]>([]);
|
const columns = ref<QTableProps["columns"]>([]);
|
||||||
const visibleColumns = ref<string[]>([]);
|
const visibleColumns = ref<string[]>([]);
|
||||||
const loadTable = ref<boolean>(false);
|
const loadTable = ref<boolean>(false);
|
||||||
async function fetchList(data: DataRows[]) {
|
async function fetchList(data: ListsData[]) {
|
||||||
let datalist = data.map((e: DataRows) => ({
|
let datalist = data.map((e: ListsData) => ({
|
||||||
|
id: e.id,
|
||||||
leaveType: e.leaveType,
|
leaveType: e.leaveType,
|
||||||
name: e.name,
|
name: e.name,
|
||||||
Date: e.Date,
|
Date: date2Thai(e.Date),
|
||||||
status: convertSatatus(e.status),
|
status: convertSatatus(e.status),
|
||||||
}));
|
}));
|
||||||
tab.value !== "1"
|
mainData.value = datalist.filter(
|
||||||
? (mainData.value = datalist)
|
(e) => e.status === "อยู่ระหว่างดำเนินการ"
|
||||||
: (mainData.value = datalist.filter(
|
);
|
||||||
(e) => e.status === "อยู่ระหว่างกำเนินการ"
|
|
||||||
));
|
|
||||||
const filteramounttab1 = datalist.filter(
|
const filteramounttab1 = datalist.filter(
|
||||||
(e) => e.status === "อยู่ระหว่างกำเนินการ"
|
(e) => e.status === "อยู่ระหว่างดำเนินการ"
|
||||||
);
|
);
|
||||||
amounttab1.value = filteramounttab1.length;
|
amounttab1.value = filteramounttab1.length;
|
||||||
amounttab2.value = datalist.length;
|
amounttab2.value = datalist.length;
|
||||||
|
|
@ -162,16 +161,17 @@ export const useLeavelistDataStore = defineStore("leave", () => {
|
||||||
// convertSatatus
|
// convertSatatus
|
||||||
function convertSatatus(val: string) {
|
function convertSatatus(val: string) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case "1":
|
case "NEW":
|
||||||
return "ใหม่";
|
return "ใหม่";
|
||||||
case "2":
|
case "PENDING":
|
||||||
return "อยู่ระหว่างกำเนินการ";
|
return "อยู่ระหว่างดำเนินการ";
|
||||||
case "3":
|
case "APPROVE":
|
||||||
return "อนุมัติ";
|
return "อนุมัติ";
|
||||||
|
case "REJECT":
|
||||||
|
return "ไม่อนุมัติ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
tab,
|
|
||||||
amounttab1,
|
amounttab1,
|
||||||
amounttab2,
|
amounttab2,
|
||||||
//ข้อมูลในตาราง
|
//ข้อมูลในตาราง
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import { defineStore } from "pinia";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import type { QTableProps } from "quasar";
|
import type { QTableProps } from "quasar";
|
||||||
import type { DataRows } from "@/modules/09_leave/interface/response/specialTime";
|
import type { DataRows } from "@/modules/09_leave/interface/response/specialTime";
|
||||||
|
import type { ListData } from "@/modules/09_leave/interface/request/specialTime";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
const mixin = useCounterMixin();
|
const mixin = useCounterMixin();
|
||||||
const { date2Thai } = mixin;
|
const { date2Thai } = mixin;
|
||||||
|
|
@ -11,14 +12,21 @@ export const useSpecialTimeStore = defineStore("LeaveSpecialTime", () => {
|
||||||
const selectDate = ref<Date | null>(new Date());
|
const selectDate = ref<Date | null>(new Date());
|
||||||
const fiscalYear = ref<string | null>("0");
|
const fiscalYear = ref<string | null>("0");
|
||||||
const DataMainOrig = ref<DataRows[]>([]); // ข้อมูลหลักดั้งเดิม
|
const DataMainOrig = ref<DataRows[]>([]); // ข้อมูลหลักดั้งเดิม
|
||||||
async function fecthList(data: DataRows[]) {
|
async function fecthList(data: ListData[]) {
|
||||||
let datalist: DataRows[] = data.map((e: any) => ({
|
let datalist: DataRows[] = data.map((e: ListData) => ({
|
||||||
|
id: e.id,
|
||||||
fullname: e.fullname,
|
fullname: e.fullname,
|
||||||
date: date2Thai(new Date(e.date)),
|
date: date2Thai(new Date(e.date)),
|
||||||
dateFix: date2Thai(new Date(e.dateFix)) + (e.timeStamp || ""),
|
dateFix: date2Thai(new Date(e.dateFix)),
|
||||||
type: e.type,
|
timeMorning:
|
||||||
reason: e.reason,
|
e.startTimeMorning == null
|
||||||
timeStamp: e.timeStamp,
|
? "-"
|
||||||
|
: e.startTimeMorning + " - " + e.endTimeMorning,
|
||||||
|
timeAfternoon:
|
||||||
|
e.startTimeAfternoon == null
|
||||||
|
? "-"
|
||||||
|
: e.startTimeAfternoon + " - " + e.endTimeAfternoon,
|
||||||
|
status: e.status,
|
||||||
}));
|
}));
|
||||||
rows.value = datalist;
|
rows.value = datalist;
|
||||||
DataMainOrig.value = datalist;
|
DataMainOrig.value = datalist;
|
||||||
|
|
@ -77,8 +85,8 @@ export const useSpecialTimeStore = defineStore("LeaveSpecialTime", () => {
|
||||||
"fullname",
|
"fullname",
|
||||||
"date",
|
"date",
|
||||||
"dateFix",
|
"dateFix",
|
||||||
"type",
|
"timeMorning",
|
||||||
"reason",
|
"timeAfternoon",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const columns = ref<QTableProps["columns"]>([
|
const columns = ref<QTableProps["columns"]>([
|
||||||
|
|
@ -108,8 +116,6 @@ export const useSpecialTimeStore = defineStore("LeaveSpecialTime", () => {
|
||||||
field: "date",
|
field: "date",
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
sort: (a: string, b: string) =>
|
|
||||||
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "dateFix",
|
name: "dateFix",
|
||||||
|
|
@ -119,32 +125,27 @@ export const useSpecialTimeStore = defineStore("LeaveSpecialTime", () => {
|
||||||
field: "dateFix",
|
field: "dateFix",
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
sort: (a: string, b: string) =>
|
|
||||||
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "type",
|
name: "timeMorning",
|
||||||
align: "left",
|
align: "left",
|
||||||
label: "ประเภท",
|
label: "ช่วงเช้า",
|
||||||
sortable: true,
|
sortable: true,
|
||||||
field: "type",
|
field: "timeMorning",
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
sort: (a: string, b: string) =>
|
|
||||||
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "reason",
|
name: "timeAfternoon",
|
||||||
align: "left",
|
align: "left",
|
||||||
label: "เหตุผล",
|
label: "ช่วงบ่าย",
|
||||||
sortable: true,
|
sortable: true,
|
||||||
field: "reason",
|
field: "timeAfternoon",
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
style: "font-size: 14px",
|
style: "font-size: 14px",
|
||||||
sort: (a: string, b: string) =>
|
|
||||||
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
|
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fecthList,
|
fecthList,
|
||||||
rows,
|
rows,
|
||||||
|
|
|
||||||
|
|
@ -15,30 +15,34 @@ onMounted(() => {
|
||||||
});
|
});
|
||||||
// เรียกข้อมูลจาก API
|
// เรียกข้อมูลจาก API
|
||||||
function fecthLeaveList() {
|
function fecthLeaveList() {
|
||||||
const data: DataRows = [
|
const data = [
|
||||||
{
|
{
|
||||||
|
id: "00000000-0000-0000-0000-000000000000",
|
||||||
leaveType: "ลาป่วย",
|
leaveType: "ลาป่วย",
|
||||||
name: "นายกัณฐิมา กาฬสินธ์ุ",
|
name: "นายกัณฐิมา กาฬสินธ์ุ",
|
||||||
Date: "",
|
Date: "2023-11-03",
|
||||||
status: "1",
|
status: "NEW",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
id: "00000000-0000-0000-0000-000000000000",
|
||||||
leaveType: "ลากิจส่วนตัว",
|
leaveType: "ลากิจส่วนตัว",
|
||||||
name: "นายนครชัย วันดี",
|
name: "นายนครชัย วันดี",
|
||||||
Date: "",
|
Date: "2023-11-01",
|
||||||
status: "3",
|
status: "APPROVE",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
id: "00000000-0000-0000-0000-000000000000",
|
||||||
leaveType: "ลากิจส่วนตัว",
|
leaveType: "ลากิจส่วนตัว",
|
||||||
name: "นายกัณฐิมา กาฬสินธ์ุ",
|
name: "นายกัณฐิมา กาฬสินธ์ุ",
|
||||||
Date: "",
|
Date: "2023-11-02",
|
||||||
status: "2",
|
status: "PENDING",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
id: "00000000-0000-0000-0000-000000000000",
|
||||||
leaveType: "ลาป่วย",
|
leaveType: "ลาป่วย",
|
||||||
name: "นายปิยรมย์ ศิริธาราฟ",
|
name: "นายปิยรมย์ ศิริธาราฟ",
|
||||||
Date: "",
|
Date: "2023-11-01",
|
||||||
status: "2",
|
status: "PENDING",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
fetchList(data); // ส่งข้อมูลไป stores
|
fetchList(data); // ส่งข้อมูลไป stores
|
||||||
|
|
@ -52,65 +56,9 @@ function changTab() {
|
||||||
<template>
|
<template>
|
||||||
<div class="toptitle text-dark col-12 row items-center">รายการลา</div>
|
<div class="toptitle text-dark col-12 row items-center">รายการลา</div>
|
||||||
<div>
|
<div>
|
||||||
<!-- <q-card flat bordered class="col-12 q-mt-sm"> -->
|
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm q-pa-md">
|
||||||
<q-card bordered flat>
|
<ToolBar />
|
||||||
<q-tabs
|
<TableList />
|
||||||
v-model="leaveStore.tab"
|
|
||||||
dense
|
|
||||||
align="left"
|
|
||||||
inline-label
|
|
||||||
class="rounded-borders"
|
|
||||||
indicator-color="primary"
|
|
||||||
active-bg-color="teal-1"
|
|
||||||
active-class="text-primary"
|
|
||||||
>
|
|
||||||
<q-tab
|
|
||||||
@click="changTab"
|
|
||||||
name="1"
|
|
||||||
label="รายการลาที่อยู่ระหว่างดำเนินการ"
|
|
||||||
>
|
|
||||||
<q-badge
|
|
||||||
color="grey-4"
|
|
||||||
:class="
|
|
||||||
leaveStore.tab == '1'
|
|
||||||
? 'q-px-sm text-weight-medium text-primary q-ml-xl bg-teal-1'
|
|
||||||
: 'q-px-sm text-weight-medium text-black q-ml-xl'
|
|
||||||
"
|
|
||||||
:label="leaveStore.amounttab1"
|
|
||||||
rounded
|
|
||||||
/>
|
|
||||||
</q-tab>
|
|
||||||
<q-tab @click="changTab" name="2" label="รายการลาทั้งหมด">
|
|
||||||
<q-badge
|
|
||||||
color="grey-4"
|
|
||||||
:class="
|
|
||||||
leaveStore.tab == '2'
|
|
||||||
? 'q-px-sm text-weight-medium text-primary q-ml-xl bg-teal-1'
|
|
||||||
: 'q-px-sm text-weight-medium text-black q-ml-xl'
|
|
||||||
"
|
|
||||||
:label="leaveStore.amounttab2"
|
|
||||||
rounded
|
|
||||||
/>
|
|
||||||
</q-tab>
|
|
||||||
</q-tabs>
|
|
||||||
<q-separator />
|
|
||||||
|
|
||||||
<q-tab-panels v-model="leaveStore.tab" animated>
|
|
||||||
<q-tab-panel name="1">
|
|
||||||
<!-- <TableList1 /> -->
|
|
||||||
<ToolBar />
|
|
||||||
<TableList />
|
|
||||||
</q-tab-panel>
|
|
||||||
|
|
||||||
<q-tab-panel name="2">
|
|
||||||
<!-- <TabList2Vue /> -->
|
|
||||||
<ToolBar />
|
|
||||||
<TableList />
|
|
||||||
</q-tab-panel>
|
|
||||||
</q-tab-panels>
|
|
||||||
<!-- </q-card> -->
|
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { onMounted, ref, useAttrs } from "vue";
|
||||||
import { useQuasar } from "quasar";
|
import { useQuasar } from "quasar";
|
||||||
import { useCounterMixin } from "@/stores/mixin";
|
import { useCounterMixin } from "@/stores/mixin";
|
||||||
import type { Pagination } from "@/modules/03_recruiting/interface/index/Main";
|
import type { Pagination } from "@/modules/03_recruiting/interface/index/Main";
|
||||||
import Table from "@/modules/09_leave/components/4_specialTime/Table.vue";
|
|
||||||
import { useSpecialTimeStore } from "@/modules/09_leave/stores/SpecialTimeStore";
|
import { useSpecialTimeStore } from "@/modules/09_leave/stores/SpecialTimeStore";
|
||||||
import DialogReason from "@/components/Dialogs/PopupReason.vue";
|
import DialogReason from "@/components/Dialogs/PopupReason.vue";
|
||||||
|
|
||||||
|
|
@ -14,11 +13,6 @@ const $q = useQuasar(); // show dialog
|
||||||
const mixin = useCounterMixin();
|
const mixin = useCounterMixin();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { hideLoader, monthYear2Thai } = mixin;
|
const { hideLoader, monthYear2Thai } = mixin;
|
||||||
const filter = ref<string>(""); //search data table
|
|
||||||
const initialPagination = ref<Pagination>({
|
|
||||||
rowsPerPage: 0,
|
|
||||||
});
|
|
||||||
const attrs = ref<any>(useAttrs());
|
|
||||||
const modalUnapprove = ref(false);
|
const modalUnapprove = ref(false);
|
||||||
const pagination = ref({
|
const pagination = ref({
|
||||||
// sortBy: "desc",
|
// sortBy: "desc",
|
||||||
|
|
@ -53,38 +47,51 @@ const resetFilter = () => {
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
fecthList([
|
fecthList([
|
||||||
{
|
{
|
||||||
|
id: "00000000-0000-0000-0000-000000000000",
|
||||||
fullname: "นางสาวณัฐกา ชมสิน",
|
fullname: "นางสาวณัฐกา ชมสิน",
|
||||||
date: "2023-10-30",
|
date: "2023-11-01 08:54",
|
||||||
dateFix: "2023-10-30",
|
dateFix: "2023-10-30",
|
||||||
type: "Checkin",
|
startTimeMorning: "08:00",
|
||||||
reason: "ลืม",
|
endTimeMorning: "12:00",
|
||||||
unapprove: "1",
|
startTimeAfternoon: "08:00",
|
||||||
approve: "0",
|
endTimeAfternoon: "12:00",
|
||||||
timeStamp: " 08:00 น.",
|
status: "PENDING",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
id: "00000000-0000-0000-0000-000000000000",
|
||||||
fullname: "นางสาวรัชภรณ์ ภักดี",
|
fullname: "นางสาวรัชภรณ์ ภักดี",
|
||||||
date: "2023-10-30",
|
date: "2023-10-30 08:55",
|
||||||
dateFix: "2023-10-30",
|
dateFix: "2023-10-29",
|
||||||
type: "Checkin",
|
startTimeMorning: "08:00",
|
||||||
reason: "ลืม",
|
endTimeMorning: "12:00",
|
||||||
unapprove: "1",
|
startTimeAfternoon: null,
|
||||||
approve: "0",
|
endTimeAfternoon: null,
|
||||||
timeStamp: " 08:00 น.",
|
status: "APPROVE",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
id: "00000000-0000-0000-0000-000000000000",
|
||||||
fullname: "นางสาวภาพรรณ ลออ",
|
fullname: "นางสาวภาพรรณ ลออ",
|
||||||
date: "2023-10-30",
|
date: "2023-10-31 18:54",
|
||||||
dateFix: "2023-10-30",
|
dateFix: "2023-10-30",
|
||||||
type: "Checkin",
|
startTimeMorning: null,
|
||||||
reason: "ลืม",
|
endTimeMorning: null,
|
||||||
unapprove: "1",
|
startTimeAfternoon: "13:00",
|
||||||
approve: "0",
|
endTimeAfternoon: "16:30",
|
||||||
timeStamp: " 08:00 น.",
|
status: "REJECT",
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
await hideLoader();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const selectedDate = ref<string>("");
|
||||||
|
const dateMonth = ref<any>({
|
||||||
|
month: new Date().getMonth(),
|
||||||
|
year: new Date().getFullYear(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const monthYearThai = (val: any) => {
|
||||||
|
if (val == null) return "";
|
||||||
|
else return monthYear2Thai(val.month, val.year);
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -92,8 +99,139 @@ onMounted(async () => {
|
||||||
รายการลงเวลากรณีพิเศษ
|
รายการลงเวลากรณีพิเศษ
|
||||||
</div>
|
</div>
|
||||||
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm q-pa-md">
|
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm q-pa-md">
|
||||||
<div>
|
<div class="row col-12 q-col-gutter-sm q-mb-sm">
|
||||||
<Table
|
<div class="q-gutter-sm">
|
||||||
|
<datepicker
|
||||||
|
v-model="selectedDate"
|
||||||
|
:locale="'th'"
|
||||||
|
autoApply
|
||||||
|
month-picker
|
||||||
|
:enableTimePicker="false"
|
||||||
|
>
|
||||||
|
<template #year="{ year }">{{ year + 543 }}</template>
|
||||||
|
<template #year-overlay-value="{ value }">{{
|
||||||
|
parseInt(value + 543)
|
||||||
|
}}</template>
|
||||||
|
<template #trigger>
|
||||||
|
<q-input
|
||||||
|
:model-value="monthYearThai(dateMonth)"
|
||||||
|
dense
|
||||||
|
outlined
|
||||||
|
hide-bottom-space
|
||||||
|
style="width: 130px"
|
||||||
|
>
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<q-icon
|
||||||
|
name="event"
|
||||||
|
class="cursor-pointer"
|
||||||
|
style="color: var(--q-primary)"
|
||||||
|
>
|
||||||
|
</q-icon>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
</template>
|
||||||
|
</datepicker>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<q-space />
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
class="col-xs-12 col-sm-3 col-md-2"
|
||||||
|
standout
|
||||||
|
dense
|
||||||
|
v-model="filterKeyword"
|
||||||
|
ref="filterRef"
|
||||||
|
outlined
|
||||||
|
debounce="300"
|
||||||
|
placeholder="ค้นหา"
|
||||||
|
>
|
||||||
|
<template v-slot:append>
|
||||||
|
<q-icon v-if="filterKeyword == ''" name="search" />
|
||||||
|
<q-icon
|
||||||
|
v-if="filterKeyword !== ''"
|
||||||
|
name="clear"
|
||||||
|
class="cursor-pointer"
|
||||||
|
@click="resetFilter"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
|
||||||
|
<q-select
|
||||||
|
v-model="dataSpecialTime.visibleColumns"
|
||||||
|
multiple
|
||||||
|
outlined
|
||||||
|
dense
|
||||||
|
options-dense
|
||||||
|
:display-value="$q.lang.table.columns"
|
||||||
|
emit-value
|
||||||
|
map-options
|
||||||
|
:options="dataSpecialTime.columns"
|
||||||
|
option-value="name"
|
||||||
|
options-cover
|
||||||
|
style="min-width: 150px"
|
||||||
|
class="col-xs-12 col-sm-3 col-md-2"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12">
|
||||||
|
<d-table
|
||||||
|
:columns="dataSpecialTime.columns"
|
||||||
|
:rows="dataSpecialTime.rows"
|
||||||
|
:filter="filterKeyword"
|
||||||
|
row-key="tb-list"
|
||||||
|
flat
|
||||||
|
bordered
|
||||||
|
:paging="true"
|
||||||
|
dense
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
:visible-columns="dataSpecialTime.visibleColumns"
|
||||||
|
>
|
||||||
|
<template v-slot:header="props">
|
||||||
|
<q-tr :props="props">
|
||||||
|
<q-th v-for="col in props.cols" :key="col.name" :props="props">
|
||||||
|
<span class="text-weight-medium">{{ col.label }}</span>
|
||||||
|
</q-th>
|
||||||
|
<q-th auto-width />
|
||||||
|
</q-tr>
|
||||||
|
</template>
|
||||||
|
<template v-slot:body="props">
|
||||||
|
<q-tr :props="props" class="cursor-pointer">
|
||||||
|
<q-td v-for="col in props.cols" :key="col.name" :props="props">
|
||||||
|
<div v-if="col.name == 'no'">
|
||||||
|
{{ props.rowIndex + 1 }}
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
{{ col.value }}
|
||||||
|
</div>
|
||||||
|
</q-td>
|
||||||
|
<q-td auto-width>
|
||||||
|
<q-btn
|
||||||
|
v-if="props.row.status == 'PENDING'"
|
||||||
|
color="orange"
|
||||||
|
class="q-px-md"
|
||||||
|
dense
|
||||||
|
unelevated
|
||||||
|
@click="unapprove(props.row.fullname)"
|
||||||
|
>ไม่อนุมัติ</q-btn
|
||||||
|
>
|
||||||
|
|
||||||
|
<q-btn
|
||||||
|
v-if="props.row.status == 'PENDING'"
|
||||||
|
color="primary"
|
||||||
|
class="q-px-md q-ml-sm"
|
||||||
|
dense
|
||||||
|
unelevated
|
||||||
|
>อนุมัติ</q-btn
|
||||||
|
>
|
||||||
|
|
||||||
|
<q-badge v-if="props.row.status == 'APPROVE'" rounded outline color="green" label="อนุมัติ" />
|
||||||
|
<q-badge v-if="props.row.status == 'REJECT'" rounded outline color="red" label="ไม่อนุมัติ" />
|
||||||
|
</q-td>
|
||||||
|
</q-tr>
|
||||||
|
</template>
|
||||||
|
</d-table>
|
||||||
|
|
||||||
|
<!-- <Table
|
||||||
style="max-height: 80vh"
|
style="max-height: 80vh"
|
||||||
:rows="dataSpecialTime.rows"
|
:rows="dataSpecialTime.rows"
|
||||||
:columns="dataSpecialTime.columns"
|
:columns="dataSpecialTime.columns"
|
||||||
|
|
@ -120,6 +258,7 @@ onMounted(async () => {
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td auto-width>
|
<q-td auto-width>
|
||||||
<q-btn
|
<q-btn
|
||||||
|
v-if="props.row.status == 'PENDING'"
|
||||||
color="orange"
|
color="orange"
|
||||||
class="q-px-md"
|
class="q-px-md"
|
||||||
dense
|
dense
|
||||||
|
|
@ -130,14 +269,19 @@ onMounted(async () => {
|
||||||
<span>{{ props.row.unapprove }}</span>
|
<span>{{ props.row.unapprove }}</span>
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td auto-width>
|
<q-td auto-width>
|
||||||
<q-btn color="primary" class="q-px-md" dense unelevated
|
<q-btn
|
||||||
|
v-if="props.row.status == 'PENDING'"
|
||||||
|
color="primary"
|
||||||
|
class="q-px-md"
|
||||||
|
dense
|
||||||
|
unelevated
|
||||||
>อนุมัติ</q-btn
|
>อนุมัติ</q-btn
|
||||||
>
|
>
|
||||||
<span>{{ props.row.approve }}</span>
|
<span>{{ props.row.approve }}</span>
|
||||||
</q-td>
|
</q-td>
|
||||||
</q-tr>
|
</q-tr>
|
||||||
</template>
|
</template>
|
||||||
</Table>
|
</Table> -->
|
||||||
</div>
|
</div>
|
||||||
</q-card>
|
</q-card>
|
||||||
<DialogReason
|
<DialogReason
|
||||||
|
|
|
||||||
|
|
@ -561,7 +561,6 @@ function onSubmit() {
|
||||||
lazy-rules
|
lazy-rules
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-12"></div>
|
|
||||||
<div class="col-xs-12 col-sm-12" id="petitioner">
|
<div class="col-xs-12 col-sm-12" id="petitioner">
|
||||||
<q-input
|
<q-input
|
||||||
for="inputPetitioner"
|
for="inputPetitioner"
|
||||||
|
|
@ -576,7 +575,6 @@ function onSubmit() {
|
||||||
rows="5"
|
rows="5"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-6"></div>
|
|
||||||
<div class="col-xs-12 col-sm-6" id="files">
|
<div class="col-xs-12 col-sm-6" id="files">
|
||||||
<q-file
|
<q-file
|
||||||
for="inputFiles"
|
for="inputFiles"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue