เพิ่ม filter ค้นหาและคอลัมน์

This commit is contained in:
AnandaTon 2023-09-28 14:16:57 +07:00
parent e8e4b001f5
commit 2175c11ad4

View file

@ -35,7 +35,7 @@ const {
} = mixin; // } = mixin; //
const router = useRouter(); const router = useRouter();
const filterRef = ref<QInput>(); const filterRef = ref<any>(null);
const filter = ref<string>(""); const filter = ref<string>("");
const id = ref<string>(""); const id = ref<string>("");
@ -241,8 +241,8 @@ const checkNull = (text: string) =>
text == null text == null
? "" ? ""
: text == "00000000-0000-0000-0000-000000000000" : text == "00000000-0000-0000-0000-000000000000"
? "" ? ""
: text; : text;
// icon ( dialog) // icon ( dialog)
const modaladdOrder = ref<boolean>(false); // dialog const modaladdOrder = ref<boolean>(false); // dialog
@ -255,10 +255,22 @@ const clickCloseSendModal = () => {
modaladdOrder.value = false; modaladdOrder.value = false;
}; };
const emit = defineEmits(["update:filterKeyword2", "update:selected"]);
//
const Reset = () => {
emit("update:filterKeyword2", "");
};
const updateInput = (value: any) => {
emit("update:filterKeyword2", value);
};
const resetFilter = () => { const resetFilter = () => {
// reset X // reset X
filter.value = ""; filter.value = "";
filterRef.value!.focus(); filterRef.value!.focus();
filterKeyword2.value = "";
}; };
// //
@ -298,6 +310,7 @@ const deleteData = async (id: string) => {
// **** ***// // **** ***//
const rowsPosition = ref<any>([]); // const rowsPosition = ref<any>([]); //
const filters = ref<FormRegistryEmployee[]>([]); const filters = ref<FormRegistryEmployee[]>([]);
const filterKeyword2 = ref<string>("");
const modal = ref<boolean>(false); // - dialod const modal = ref<boolean>(false); // - dialod
const selectedPosition = ref<any>([]); // const selectedPosition = ref<any>([]); //
@ -425,10 +438,7 @@ const checkSave = () => {
// //
const saveData = async () => { const saveData = async () => {
if (selectedPosition.value.length == 0) { if (selectedPosition.value.length == 0) {
dialogMessageNotify( dialogMessageNotify($q, "ไม่สามารถบันทึกข้อมูลได้ กรุณาเลือกตำแหน่ง");
$q,
"ไม่สามารถบันทึกข้อมูลได้ กรุณาเลือกตำแหน่ง"
);
return; return;
} else { } else {
await savePosition(); await savePosition();
@ -550,7 +560,7 @@ const getPosition = async (id: string) => {
}); });
}; };
// (root tree) // (root tree)
const selected = ref([]); const selected = ref([]);
const nodeTree = async () => { const nodeTree = async () => {
showLoader(); showLoader();
@ -577,14 +587,16 @@ const rows = ref<FormRegistryEmployee[]>([]);
const showEmployeeTemp = async () => { const showEmployeeTemp = async () => {
showLoader(); showLoader();
let cirteria = [{ let cirteria = [
criteriaType: "employee_class", {
criteriaValue: "temp", criteriaType: "employee_class",
}, criteriaValue: "temp",
{ },
criteriaType: "is_retire", {
criteriaValue: "false", criteriaType: "is_retire",
}]; criteriaValue: "false",
},
];
if (selected.value == null) return; if (selected.value == null) return;
await http await http
@ -652,28 +664,64 @@ const showEmployeeTemp = async () => {
<q-btn flat round color="primary" @click="clickAdd" icon="mdi-plus"> <q-btn flat round color="primary" @click="clickAdd" icon="mdi-plus">
<q-tooltip>เพมขอม</q-tooltip> <q-tooltip>เพมขอม</q-tooltip>
</q-btn> </q-btn>
<q-btn flat round color="primary" icon="mdi-account-arrow-right" @click="clickAddOrder"> <q-btn
flat
round
color="primary"
icon="mdi-account-arrow-right"
@click="clickAddOrder"
>
<q-tooltip>งรายชอไปออกคำส</q-tooltip> <q-tooltip>งรายชอไปออกคำส</q-tooltip>
</q-btn> </q-btn>
<q-space /> <q-space />
<div class="items-center" style="display: flex"> <div class="items-center" style="display: flex">
<!-- นหาขอความใน table --> <!-- นหาขอความใน table -->
<q-input standout dense v-model="filter" ref="filterRef" outlined debounce="300" placeholder="ค้นหา" <q-input
style="max-width: 200px" class="q-ml-sm"> standout
dense
v-model="filter"
ref="filterRef"
outlined
debounce="300"
placeholder="ค้นหา"
style="max-width: 200px"
class="q-ml-sm"
>
<template v-slot:append> <template v-slot:append>
<q-icon v-if="filter == ''" name="search" /> <q-icon v-if="filter == ''" name="search" />
<q-icon v-if="filter !== ''" name="clear" class="cursor-pointer" @click="resetFilter" /> <q-icon
v-if="filter !== ''"
name="clear"
class="cursor-pointer"
@click="resetFilter"
/>
</template> </template>
</q-input> </q-input>
<!-- แสดงคอลมนใน table --> <!-- แสดงคอลมนใน table -->
<q-select v-model="visibleColumnsEmployeeTemp" :display-value="$q.lang.table.columns" multiple outlined dense <q-select
:options="columns" options-dense option-value="name" map-options emit-value style="min-width: 150px" v-model="visibleColumnsEmployeeTemp"
class="gt-xs q-ml-sm" /> :display-value="$q.lang.table.columns"
multiple
outlined
dense
:options="columns"
options-dense
option-value="name"
map-options
emit-value
style="min-width: 150px"
class="gt-xs q-ml-sm"
/>
</div> </div>
</div> </div>
<div class="col-12 q-pt-sm"> <div class="col-12 q-pt-sm">
<d-table :rows="rows" :columns="columns" :visible-columns="visibleColumnsEmployeeTemp" :filter="filter" <d-table
row-key="id"> :rows="rows"
:columns="columns"
:visible-columns="visibleColumnsEmployeeTemp"
:filter="filter"
row-key="id"
>
<template v-slot:header="props"> <template v-slot:header="props">
<q-tr :props="props"> <q-tr :props="props">
<q-th v-for="col in props.cols" :key="col.name" :props="props"> <q-th v-for="col in props.cols" :key="col.name" :props="props">
@ -684,16 +732,32 @@ const showEmployeeTemp = async () => {
</template> </template>
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer"> <q-tr :props="props" class="cursor-pointer">
<q-td key="no" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="no"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.rowIndex + 1 }} {{ props.rowIndex + 1 }}
</q-td> </q-td>
<q-td key="fullname" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="fullname"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.fullname }} {{ props.row.fullname }}
</q-td> </q-td>
<q-td key="newAgency" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
<div class="col-12" v-if="props.row.draftOrganizationOrganization == null && key="newAgency"
props.row.draftPositionEmployee == null :props="props"
"> @click="redirectToPage(props.row.id, props.row.status)"
>
<div
class="col-12"
v-if="
props.row.draftOrganizationOrganization == null &&
props.row.draftPositionEmployee == null
"
>
<div class="text-weight-medium"> <div class="text-weight-medium">
{{ "-" }} {{ "-" }}
</div> </div>
@ -707,8 +771,15 @@ const showEmployeeTemp = async () => {
</div> </div>
</div> </div>
</q-td> </q-td>
<q-td key="currentAgency" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
<div class="col-12" v-if="props.row.oc == null && props.row.position == null"> key="currentAgency"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
<div
class="col-12"
v-if="props.row.oc == null && props.row.position == null"
>
<div class="text-weight-medium"> <div class="text-weight-medium">
{{ "-" }} {{ "-" }}
</div> </div>
@ -722,69 +793,154 @@ const showEmployeeTemp = async () => {
</div> </div>
</div> </div>
</q-td> </q-td>
<q-td key="amount" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="amount"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.amount }} {{ props.row.amount }}
</q-td> </q-td>
<q-td key="govAge" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="govAge"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.govAge }} {{ props.row.govAge }}
</q-td> </q-td>
<q-td key="dateAppoint" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="dateAppoint"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.dateAppoint }} {{ props.row.dateAppoint }}
</q-td> </q-td>
<q-td key="dateStart" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="dateStart"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.dateStart }} {{ props.row.dateStart }}
</q-td> </q-td>
<q-td key="salaryDate" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="salaryDate"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.salaryDate }} {{ props.row.salaryDate }}
</q-td> </q-td>
<q-td key="refSalary" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="refSalary"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.refSalary }} {{ props.row.refSalary }}
</q-td> </q-td>
<q-td key="age" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="age"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.age }} {{ props.row.age }}
</q-td> </q-td>
<q-td key="fullnameOld" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="fullnameOld"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.fullnameOld }} {{ props.row.fullnameOld }}
</q-td> </q-td>
<q-td key="createdAt" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="createdAt"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.createdAt }} {{ props.row.createdAt }}
</q-td> </q-td>
<q-td key="isLeave" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="isLeave"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.isLeave }} {{ props.row.isLeave }}
</q-td> </q-td>
<q-td key="leaveDateOrder" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="leaveDateOrder"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.leaveDateOrder }} {{ props.row.leaveDateOrder }}
</q-td> </q-td>
<q-td key="statustext" :props="props" @click="redirectToPage(props.row.id, props.row.status)"> <q-td
key="statustext"
:props="props"
@click="redirectToPage(props.row.id, props.row.status)"
>
{{ props.row.statustext }} {{ props.row.statustext }}
</q-td> </q-td>
<q-td auto-width> <q-td auto-width>
<q-btn icon="mdi-dots-vertical" size="12px" color="grey-7" flat round dense> <q-btn
icon="mdi-dots-vertical"
size="12px"
color="grey-7"
flat
round
dense
>
<q-menu transition-show="jump-down" transition-hide="jump-up"> <q-menu transition-show="jump-down" transition-hide="jump-up">
<q-list dense style="min-width: 160px"> <q-list dense style="min-width: 160px">
<q-item clickable v-close-popup @click="editDetail(props.row)" :disable="props.row.status == 'REPORT' || <q-item
props.row.status == 'DONE' clickable
"> v-close-popup
<q-item-section style="min-width: 0px" avatar class="q-py-sm"> @click="editDetail(props.row)"
<q-icon :color="props.row.status == 'REPORT' || :disable="
props.row.status == 'DONE' props.row.status == 'REPORT' ||
? 'grey' props.row.status == 'DONE'
: 'blue' "
" size="xs" name="mdi-account-settings" /> >
<q-item-section
style="min-width: 0px"
avatar
class="q-py-sm"
>
<q-icon
:color="
props.row.status == 'REPORT' ||
props.row.status == 'DONE'
? 'grey'
: 'blue'
"
size="xs"
name="mdi-account-settings"
/>
</q-item-section> </q-item-section>
<q-item-section>กำหนดตำแหน</q-item-section> <q-item-section>กำหนดตำแหน</q-item-section>
</q-item> </q-item>
<q-separator /> <q-separator />
<q-item clickable v-close-popup @click="clickDelete(props.row.id)" :disable="props.row.status == 'REPORT' || <q-item
props.row.status == 'DONE' clickable
"> v-close-popup
<q-item-section style="min-width: 0px" avatar class="q-py-sm"> @click="clickDelete(props.row.id)"
<q-icon :color="props.row.status == 'REPORT' || :disable="
props.row.status == 'DONE' props.row.status == 'REPORT' ||
? 'grey' props.row.status == 'DONE'
: 'red-7' "
" size="xs" name="mdi-delete" /> >
<q-item-section
style="min-width: 0px"
avatar
class="q-py-sm"
>
<q-icon
:color="
props.row.status == 'REPORT' ||
props.row.status == 'DONE'
? 'grey'
: 'red-7'
"
size="xs"
name="mdi-delete"
/>
</q-item-section> </q-item-section>
<q-item-section>ลบ</q-item-section> <q-item-section>ลบ</q-item-section>
</q-item> </q-item>
@ -805,20 +961,85 @@ const showEmployeeTemp = async () => {
<DialogHeader tittle="กำหนดตำแหน่ง" :close="modalOpenClose" /> <DialogHeader tittle="กำหนดตำแหน่ง" :close="modalOpenClose" />
<q-separator /> <q-separator />
<q-card-section class="q-pa-sm"> <q-card-section class="q-pa-sm">
<d-table :rows="rowsPosition" :columns="columnsPosition" row-key="id" selection="single" <div class="row justify-end">
v-model:selected="selectedPosition" :visible-columns="visibleColumnsPosition"> <div class="col-5">
<q-toolbar style="padding: 0">
<q-input
borderless
outlined
dense
ref="filterRef"
debounce="300"
:model-value="filterKeyword2"
placeholder="ค้นหา"
style="width: 850px; max-width: auto"
>
<template v-slot:append>
<q-icon v-if="filterKeyword2 == ''" name="search" />
<q-icon
v-if="filterKeyword2 !== ''"
name="clear"
class="cursor-pointer"
@click="resetFilter"
/>
</template>
</q-input>
<q-select
v-model="visibleColumnsPosition"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="columnsPosition"
option-value="name"
options-cover
style="min-width: 150px"
class="gt-xs q-ml-sm"
/>
</q-toolbar>
</div>
</div>
<d-table
:rows="rowsPosition"
:columns="columnsPosition"
:filter="filterKeyword2"
row-key="id"
selection="single"
v-model:selected="selectedPosition"
:visible-columns="visibleColumnsPosition"
>
<template v-slot:body-selection="scope"> <template v-slot:body-selection="scope">
<q-checkbox keep-color color="primary" dense v-model="scope.selected" /> <q-checkbox
keep-color
color="primary"
dense
v-model="scope.selected"
/>
</template> </template>
</d-table> </d-table>
</q-card-section> </q-card-section>
<q-separator /> <q-separator />
<q-card-actions align="right"> <q-card-actions align="right">
<q-btn dense unelevated label="บันทึก" color="public" @click="checkSave" class="q-px-md"> <q-btn
dense
unelevated
label="บันทึก"
color="public"
@click="checkSave"
class="q-px-md"
>
</q-btn> </q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>
<DialogSendToCommand :modal="modaladdOrder" :closeDialog="clickCloseSendModal" :rows="rows" :fetch-new-list="showEmployeeTemp"/> <DialogSendToCommand
</template> :modal="modaladdOrder"
:closeDialog="clickCloseSendModal"
:rows="rows"
:fetch-new-list="showEmployeeTemp"
/>
</template>