filter ==> retirement

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-12-10 15:35:34 +07:00
parent 22b18736a8
commit a7848ea6dc
3 changed files with 81 additions and 34 deletions

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watchEffect, computed } from "vue"; import { ref, computed, watch } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
@ -30,7 +30,7 @@ const dataMapToSend = computed(() => {
})); }));
}); });
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { dialogConfirm, date2Thai } = mixin; const { dialogConfirm, date2Thai, onSearchDataTable } = mixin;
/** props*/ /** props*/
const props = defineProps({ const props = defineProps({
@ -43,6 +43,8 @@ const props = defineProps({
}); });
//Table //Table
const rowsData = ref<ResponseItems[]>([]);
const rowsDataMain = ref<ResponseItems[]>([]);
const columns = ref<QTableProps["columns"]>([ const columns = ref<QTableProps["columns"]>([
{ {
name: "no", name: "no",
@ -60,7 +62,10 @@ const columns = ref<QTableProps["columns"]>([
align: "left", align: "left",
label: "ชื่อ-นามสกุล", label: "ชื่อ-นามสกุล",
sortable: true, sortable: true,
field: (row) => `${row.prefix}${row.firstName} ${row.lastName}`, field: "fullname",
format(val, row) {
return `${row.prefix}${row.firstName} ${row.lastName}`;
},
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -129,7 +134,10 @@ const columns = ref<QTableProps["columns"]>([
align: "left", align: "left",
label: "สถานะ", label: "สถานะ",
sortable: true, sortable: true,
field: (row) => statusText(row.status), field: "status",
format(val, row) {
return statusText(row.status);
},
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -166,20 +174,31 @@ function updateInput(value: any) {
emit("update:filterKeyword2", value); emit("update:filterKeyword2", value);
} }
/** รีเซ็ตค่าในช่องค้นหา */ async function onSearch() {
function Reset() { rowsData.value = onSearchDataTable(
emit("update:filterKeyword2", ""); props.filterKeyword2 ? props.filterKeyword2 : "",
rowsDataMain.value,
columns.value ? columns.value : []
);
} }
watchEffect(() => { watch(
if (props.modal === true) { () => props.modal,
selected.value = []; (val) => {
if (val) {
selected.value = [];
rowsData.value = props.rows ? props.rows : [];
rowsDataMain.value = props.rows ? props.rows : [];
} else {
rowsData.value = [];
rowsDataMain.value = [];
}
} }
}); );
</script> </script>
<template> <template>
<q-dialog v-model="props.modal" persistent> <q-dialog v-model="props.modal" persistent>
<q-card style="width: 1200px; max-width: 80vw"> <q-card style="min-width: 80%">
<DialogHeader tittle="ส่งไปออกคำสั่งลาออก" :close="closeModal" /> <DialogHeader tittle="ส่งไปออกคำสั่งลาออก" :close="closeModal" />
<q-separator /> <q-separator />
<q-card-section> <q-card-section>
@ -192,6 +211,7 @@ watchEffect(() => {
dense dense
:model-value="filterKeyword2" :model-value="filterKeyword2"
@update:model-value="updateInput" @update:model-value="updateInput"
@keydown.enter="onSearch"
placeholder="ค้นหา" placeholder="ค้นหา"
> >
<template v-slot:append> <template v-slot:append>
@ -217,8 +237,7 @@ watchEffect(() => {
<div class="col-12"> <div class="col-12">
<d-table <d-table
:columns="columns" :columns="columns"
:rows="rows" :rows="rowsData"
:filter="filterKeyword2?.trim()"
row-key="id" row-key="id"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
selection="multiple" selection="multiple"

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watchEffect, computed } from "vue"; import { ref, watch, computed } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
@ -30,7 +30,7 @@ const dataMapToSend = computed(() => {
})); }));
}); });
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { dialogConfirm, date2Thai } = mixin; const { dialogConfirm, date2Thai, onSearchDataTable } = mixin;
/** props*/ /** props*/
const props = defineProps({ const props = defineProps({
@ -43,6 +43,8 @@ const props = defineProps({
}); });
//Table //Table
const rowsData = ref<ResponseItems[]>([]);
const rowsDataMain = ref<ResponseItems[]>([]);
const columns = ref<QTableProps["columns"]>([ const columns = ref<QTableProps["columns"]>([
{ {
name: "no", name: "no",
@ -60,7 +62,10 @@ const columns = ref<QTableProps["columns"]>([
align: "left", align: "left",
label: "ชื่อ-นามสกุล", label: "ชื่อ-นามสกุล",
sortable: true, sortable: true,
field: (row) => `${row.prefix}${row.firstName} ${row.lastName}`, field: "fullname",
format(val, row) {
return `${row.prefix}${row.firstName} ${row.lastName}`;
},
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -129,7 +134,10 @@ const columns = ref<QTableProps["columns"]>([
align: "left", align: "left",
label: "สถานะ", label: "สถานะ",
sortable: true, sortable: true,
field: (row) => statusText(row.status), field: "status",
format(val, row) {
return statusText(row.status);
},
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
@ -166,15 +174,31 @@ function updateInput(value: any) {
emit("update:filterKeyword2", value); emit("update:filterKeyword2", value);
} }
watchEffect(() => { async function onSearch() {
if (props.modal === true) { rowsData.value = onSearchDataTable(
selected.value = []; props.filterKeyword2 ? props.filterKeyword2 : "",
rowsDataMain.value,
columns.value ? columns.value : []
);
}
watch(
() => props.modal,
(val) => {
if (val) {
selected.value = [];
rowsData.value = props.rows ? props.rows : [];
rowsDataMain.value = props.rows ? props.rows : [];
} else {
rowsData.value = [];
rowsDataMain.value = [];
}
} }
}); );
</script> </script>
<template> <template>
<q-dialog v-model="props.modal" persistent> <q-dialog v-model="props.modal" persistent>
<q-card style="width: 1200px; max-width: 80vw"> <q-card style="min-width: 80%">
<DialogHeader tittle="ส่งไปออกคำสั่งลาออก" :close="closeModal" /> <DialogHeader tittle="ส่งไปออกคำสั่งลาออก" :close="closeModal" />
<q-separator /> <q-separator />
<q-card-section> <q-card-section>
@ -188,6 +212,7 @@ watchEffect(() => {
:model-value="filterKeyword2" :model-value="filterKeyword2"
@update:model-value="updateInput" @update:model-value="updateInput"
placeholder="ค้นหา" placeholder="ค้นหา"
@keydown.enter="onSearch"
> >
<template v-slot:append> <template v-slot:append>
<q-icon name="search" /> <q-icon name="search" />
@ -212,8 +237,7 @@ watchEffect(() => {
<div class="col-12"> <div class="col-12">
<d-table <d-table
:columns="columns" :columns="columns"
:rows="rows" :rows="rowsData"
:filter="filterKeyword2?.trim()"
row-key="id" row-key="id"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
selection="multiple" selection="multiple"

View file

@ -28,6 +28,7 @@ const {
hideLoader, hideLoader,
success, success,
dialogConfirm, dialogConfirm,
onSearchDataTable,
} = mixin; } = mixin;
/** props*/ /** props*/
@ -52,6 +53,7 @@ const modalSelectOrg = ref<boolean>(false);
const selectedModal = ref<any[]>([]); const selectedModal = ref<any[]>([]);
const rows = ref<DataCopyOrder[]>([]); const rows = ref<DataCopyOrder[]>([]);
const rowsMain = ref<DataCopyOrder[]>([]);
const editRows = ref<DataCopyOrder[]>([]); const editRows = ref<DataCopyOrder[]>([]);
/** selcet OPtion */ /** selcet OPtion */
@ -59,7 +61,6 @@ const optionSelect = ref<any>([
{ id: 1, name: "อีเมล" }, { id: 1, name: "อีเมล" },
{ id: 2, name: "กล่องข้อความ" }, { id: 2, name: "กล่องข้อความ" },
]); ]);
/** คอลัมน์ที่แสดง */ /** คอลัมน์ที่แสดง */
const visibleColumns = ref<String[]>([ const visibleColumns = ref<String[]>([
"no", "no",
@ -158,6 +159,7 @@ async function getData() {
}); });
} }
rows.value = list; rows.value = list;
rowsMain.value = list;
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
@ -189,12 +191,6 @@ async function saveData() {
}); });
} }
function resetFilter() {
// reset X
filter.value = "";
filterRef.value!.focus();
}
/** /**
* class ดรปแบบแสดงระหวางขอมลทแกไขหรอแสดงเฉยๆ * class ดรปแบบแสดงระหวางขอมลทแกไขหรอแสดงเฉยๆ
* @param val อม input สำหรบแกไขหรอไม * @param val อม input สำหรบแกไขหรอไม
@ -257,7 +253,7 @@ async function saveDataCopyOrder() {
// Save // Save
async function fetchSaveCopyOrder() { async function fetchSaveCopyOrder() {
let list: requestSendNoti[] = []; let list: requestSendNoti[] = [];
rows.value.map((r: DataCopyOrder) => { rowsMain.value.map((r: DataCopyOrder) => {
list.push({ list.push({
profileId: r.personalId, profileId: r.personalId,
isSendMail: r.mutiselect.includes(1), isSendMail: r.mutiselect.includes(1),
@ -285,6 +281,14 @@ function updateData(row: DataCopyOrder) {
editRows.value.push(row); editRows.value.push(row);
} }
async function onSearch() {
rows.value = onSearchDataTable(
filter.value,
rowsMain.value,
columns.value ? columns.value : []
);
}
/** Hook */ /** Hook */
onMounted(async () => { onMounted(async () => {
await getData(); await getData();
@ -322,6 +326,7 @@ onMounted(async () => {
outlined outlined
placeholder="ค้นหา" placeholder="ค้นหา"
class="q-ml-sm" class="q-ml-sm"
@keydown.enter="onSearch"
> >
<template v-slot:append> <template v-slot:append>
<q-icon name="search" /> <q-icon name="search" />
@ -349,7 +354,6 @@ onMounted(async () => {
:rows="rows" :rows="rows"
:columns="columns" :columns="columns"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
:filter="filter.trim()"
row-key="idCard" row-key="idCard"
> >
<template v-slot:header="props"> <template v-slot:header="props">