modal-detail

This commit is contained in:
setthawutttty 2023-06-07 13:42:11 +07:00
parent fa6d916e36
commit ca91efbaa5
6 changed files with 634 additions and 433 deletions

View file

@ -0,0 +1,90 @@
<template>
<q-card-actions class="text-primary">
<q-space />
<q-btn
v-if="!editvisible"
flat
round
:disabled="editvisible"
:color="editvisible ? 'grey-7' : 'primary'"
@click="edit"
icon="mdi-pencil-outline"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<div v-else>
<!-- <q-btn
flat
round
:disabled="!editvisible"
:outline="!editvisible"
:color="!editvisible ? 'grey-7' : 'red'"
@click="cancel()"
icon="mdi-undo"
v-if="modalEdit == true"
>
<q-tooltip>ยกเล</q-tooltip>
</q-btn> -->
<q-btn
flat
round
:disabled="!editvisible"
:color="!editvisible ? 'grey-7' : 'public'"
@click="checkSave"
icon="mdi-content-save-outline"
>
<q-tooltip>นท</q-tooltip>
</q-btn>
</div>
</q-card-actions>
</template>
<script setup lang="ts">
import { ref, useAttrs } from "vue";
const props = defineProps({
editvisible: Boolean,
modalEdit: Boolean,
cancel: {
type: Function,
default: () => console.log("not function"),
},
edit: {
type: Function,
default: () => console.log("not function"),
},
save: {
type: Function,
default: () => console.log("not function"),
},
validate: {
type: Function,
default: () => console.log("not function"),
},
});
const emit = defineEmits([
"update:editvisible",
"update:next",
"update:previous",
]);
const updateEdit = (value: Boolean) => {
emit("update:editvisible", value);
};
const cancel = async () => {
props.cancel();
};
const edit = async () => {
updateEdit(!props.editvisible);
props.edit();
};
const checkSave = () => {
props.validate();
props.save();
// if (myForm.value !== null) {
// myForm.value.validate().then((success) => {
// if (success) {
// }
// });
// }
};
</script>

View file

@ -0,0 +1,27 @@
<template>
<q-toolbar>
<q-toolbar-title class="text-subtitle2 text-bold">{{ tittle }}</q-toolbar-title>
<q-btn
icon="close"
unelevated
round
dense
@click="close"
style="color: #ff8080; background-color: #ffdede"
/>
</q-toolbar>
</template>
<script setup lang="ts">
import { ref, useAttrs } from "vue";
const props = defineProps({
tittle: String,
close: {
type: Function,
default: () => console.log("not function"),
},
});
const close = async () => {
props.close();
};
</script>

View file

@ -3,11 +3,65 @@ import { ref, defineComponent, h } from "vue";
import Table from "@/modules/05_placement/components/PlacementTableView.vue"; import Table from "@/modules/05_placement/components/PlacementTableView.vue";
import { useQuasar, QForm } from "quasar"; import { useQuasar, QForm } from "quasar";
import type { TableName } from "@/modules/05_placement/interface/request/placement"; import type { TableName } from "@/modules/05_placement/interface/request/placement";
import { usePlacementDataStore } from "@/modules/05_placement/store";
import type { QTableProps } from "quasar"; import type { QTableProps } from "quasar";
import DialogHeader from "@/modules/05_placement/components/DialogHeader.vue";
import DialogFooter from "@/modules/05_placement/components/DialogFooter.vue";
const editvisible = ref<boolean>(false); const editvisible = ref<boolean>(false);
const myForm = ref<QForm | null>(null); const myForm = ref<QForm | null>(null);
const edit = ref<boolean>(false); const edit = ref<boolean>(false);
const visibleColumns = ref<String[]>([]);
const store = usePlacementDataStore();
const filter = ref<string>("");
const { placementData } = store;
const editRow = ref<boolean>(false); //
const modal = ref<boolean>(false); //modal add detail
const modalEdit = ref<boolean>(false); //modal
const position = ref<number>();
const Name = ref<string>();
const ExamOrder = ref<number>();
const Unit = ref<string>();
const ReportingDate = ref<string>();
const BMAOfficer = ref<boolean>();
const Status = ref<string>();
const checkList = ref<string>();
const $q = useQuasar(); // show dialog
const selectData = (props: TableName) => {
if (editvisible.value == true) {
editRow.value = false;
modalEdit.value = true;
modal.value = false;
edit.value = true;
position.value = props.position;
Name.value = props.Name;
ExamOrder.value = props.ExamOrder;
Unit.value = props.Unit;
ReportingDate.value = props.ReportingDate;
BMAOfficer.value = props.BMAOfficer;
Status.value = props.Status;
checkList.value = props.checkList;
}else{
editRow.value = false;
modalEdit.value = true;
modal.value = true;
edit.value = true;
}
};
placementData.mappingPosition.columns.length == 0
? (visibleColumns.value = [
"position",
"Name",
"ExamOrder",
"Unit",
"ReportingDate",
"BMAOfficer",
"Status",
"checkList",
])
: (visibleColumns.value = placementData.mappingPosition.columns);
const columns = ref<QTableProps["columns"]>([ const columns = ref<QTableProps["columns"]>([
{ {
name: "position", name: "position",
@ -66,7 +120,7 @@ const columns = ref<QTableProps["columns"]>([
}, },
{ {
name: "BMAOfficer", name: "BMAOfficer",
align: "center", align: "left",
label: "ข้าราชการฯ กทม.", label: "ข้าราชการฯ กทม.",
sortable: true, sortable: true,
field: "BMAOfficer", field: "BMAOfficer",
@ -77,7 +131,7 @@ const columns = ref<QTableProps["columns"]>([
}, },
{ {
name: "Status", name: "Status",
align: "center", align: "left",
label: "สถานะการบรรจุ", label: "สถานะการบรรจุ",
sortable: true, sortable: true,
field: "Status", field: "Status",
@ -87,7 +141,7 @@ const columns = ref<QTableProps["columns"]>([
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
}, },
]); ]);
const rows = [ const rows = ref<TableName[]>([
{ {
position: 1, position: 1,
Name: "setthawut", Name: "setthawut",
@ -96,6 +150,7 @@ const rows = [
ReportingDate: "30 พ.ค. 2566", // ReportingDate: "30 พ.ค. 2566", //
BMAOfficer: true, BMAOfficer: true,
Status: "บรรจุเเล้ว", Status: "บรรจุเเล้ว",
checkList:null
}, },
{ {
position: 1, position: 1,
@ -105,6 +160,7 @@ const rows = [
ReportingDate: "30 พ.ค. 2566", // ReportingDate: "30 พ.ค. 2566", //
BMAOfficer: true, BMAOfficer: true,
Status: "ยังไม่บรรจุ", Status: "ยังไม่บรรจุ",
checkList:null
}, },
{ {
position: 1, position: 1,
@ -114,8 +170,9 @@ const rows = [
ReportingDate: "30 พ.ค. 2566", // ReportingDate: "30 พ.ค. 2566", //
BMAOfficer: true, BMAOfficer: true,
Status: "เตรียมบรรจุ", Status: "เตรียมบรรจุ",
checkList:null
}, },
{ {
position: 1, position: 1,
Name: "setthawut", Name: "setthawut",
@ -124,17 +181,20 @@ const rows = [
ReportingDate: "30 พ.ค. 2566", // ReportingDate: "30 พ.ค. 2566", //
BMAOfficer: true, BMAOfficer: true,
Status: "เตรียมบรรจุ", Status: "เตรียมบรรจุ",
checkList:null
}, },
{ {
position: 1, position: 1,
Name: "setthawut", Name: "tee",
ExamOrder: 1, ExamOrder: 1,
Unit: "chamomind", Unit: "chamomind",
ReportingDate: "30 พ.ค. 2566", // ReportingDate: "30 พ.ค. 2566", //
BMAOfficer: true, BMAOfficer: true,
Status: "เตรียมบรรจุ", Status: "เตรียมบรรจุ",
},{ checkList:null
},
{
position: 1, position: 1,
Name: "setthawut", Name: "setthawut",
ExamOrder: 1, ExamOrder: 1,
@ -142,18 +202,37 @@ const rows = [
ReportingDate: "30 พ.ค. 2566", // ReportingDate: "30 พ.ค. 2566", //
BMAOfficer: true, BMAOfficer: true,
Status: "บรรจุเเล้ว", Status: "บรรจุเเล้ว",
checkList:null
}, },
]);
];
const clickCancel = async () => { const clickCancel = async () => {
editvisible.value = false; editvisible.value = false;
}; };
const clickClose = async () => {
if (editRow.value == true) {
$q.dialog({
title: `ข้อมูลมีการแก้ไข`,
message: `ยืนยันที่จะปิดโดยไม่บันทึกใช่หรือไม่?`,
cancel: "ยกเลิก",
ok: "ยืนยัน",
persistent: true,
}).onOk(async () => {
modal.value = false;
});
} else {
modal.value = false;
}
};
</script> </script>
<template> <template>
<q-form ref="myForm"> <q-form ref="myForm">
<Table <Table
:rows="rows" :rows="rows"
:columns="columns" :columns="columns"
:filter="filter"
:visible-columns="visibleColumns"
v-model:inputfilter="filter"
v-model:inputvisible="visibleColumns"
v-model:editvisible="editvisible" v-model:editvisible="editvisible"
:cancel="clickCancel" :cancel="clickCancel"
:history="true" :history="true"
@ -208,7 +287,7 @@ const clickCancel = async () => {
</q-td> </q-td>
<q-td auto-width> <q-td auto-width>
<div v-if="props.row.Status === 'บรรจุเเล้ว'"> <div v-if="props.row.Status === 'บรรจุเเล้ว'">
<div></div> <div></div>
</div> </div>
<div v-else-if="props.row.Status === 'ยังไม่บรรจุ'"> <div v-else-if="props.row.Status === 'ยังไม่บรรจุ'">
<q-btn <q-btn
@ -218,7 +297,6 @@ const clickCancel = async () => {
round round
size="14px" size="14px"
icon="mdi-account-alert" icon="mdi-account-alert"
/> />
<q-btn <q-btn
color="red" color="red"
@ -227,11 +305,9 @@ const clickCancel = async () => {
round round
size="14px" size="14px"
icon="mdi-account-remove" icon="mdi-account-remove"
/> />
</div> </div>
<div v-else align="right"> <div v-else align="right">
<q-btn <q-btn
color="red" color="red"
flat flat
@ -239,7 +315,6 @@ const clickCancel = async () => {
round round
size="14px" size="14px"
icon="mdi-account-remove" icon="mdi-account-remove"
/> />
</div> </div>
</q-td> </q-td>
@ -247,4 +322,25 @@ const clickCancel = async () => {
</template> </template>
</Table> </Table>
</q-form> </q-form>
<q-dialog v-model="modal" persistent>
<q-card style="width: 800px">
<q-form ref="myForm">
<!-- :tittle="`${modalEdit ? 'แก้ไข' : 'สร้าง'}รายละเอียดของ...`" -->
<DialogHeader
:tittle="`รายละเอียดของ`"
:close="clickClose"
/>
<q-separator />
<q-card-section class="q-p-sm">
text
</q-card-section>
<q-separator />
<DialogFooter
:save="clickSave"
v-model:editvisible="edit"
v-model:modalEdit="modalEdit"
/>
</q-form>
</q-card>
</q-dialog>
</template> </template>

View file

@ -1,425 +1,398 @@
<template> <template>
<div class="q-px-md q-pb-md"> <div class="q-px-md q-pb-md">
<div class="col-12 row q-py-sm" v-if="nornmalData == false"> <div class="col-12 row q-py-sm" v-if="nornmalData == false">
<q-btn
size="12px"
v-if="!editvisible"
flat
round
:disabled="editvisible"
:color="editvisible ? 'grey-7' : 'primary'"
@click="clickEdit"
icon="mdi-pencil-outline"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<q-btn
size="12px"
flat
round
v-if="editvisible"
:disabled="!editvisible"
:color="!editvisible ? 'grey-7' : 'red'"
@click="clickCancel"
icon="mdi-undo"
>
<q-tooltip>ยกเล</q-tooltip>
</q-btn>
<div class="q-px-sm">
<q-btn <q-btn
v-if="!editvisible == true && publicNoBtn == false"
flat
round
:disabled="editvisible == true"
:color="editvisible == true ? 'grey-7' : 'primary'"
@click="edit"
icon="mdi-pencil-outline"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<q-btn
v-else
flat flat
round round
:disabled="editvisible == false" :disabled="editvisible == false"
:outline="editvisible == false" :color="editvisible == false ? 'grey-7' : 'public'"
:color="editvisible == false ? 'grey-7' : 'red'" @click="add"
@click="cancel()" icon="mdi-content-save-outline"
icon="mdi-undo"
> >
<q-tooltip>ยกเล</q-tooltip> <q-tooltip>นทกขอม</q-tooltip>
</q-btn> </q-btn>
<div class="q-px-sm">
<q-btn
flat
round
:disabled="editvisible == false"
:color="editvisible == false ? 'grey-7' : 'public'"
@click="add"
icon="mdi-content-save-outline"
>
<q-tooltip>นทกขอม</q-tooltip>
</q-btn>
</div>
<q-space />
<div class="items-center" style="display: flex">
<div
class="row items-center"
style="display: flex"
v-if="publicData == false && publicNoBtn == false"
>
</div>
<q-input
standout
dense
:model-value="inputfilter"
ref="filterRef"
@update:model-value="updateInput"
outlined
debounce="300"
placeholder="ค้นหา"
style="max-width: 200px"
class="q-ml-sm"
>
<template v-slot:append>
<q-icon v-if="inputfilter == ''" name="search" />
<q-icon
v-if="inputfilter !== ''"
name="clear"
class="cursor-pointer"
@click="resetFilter"
/>
</template>
</q-input>
<!-- แสดง table ใน คอลมน -->
<q-select
:model-value="inputvisible"
@update:model-value="updateVisible"
:display-value="$q.lang.table.columns"
multiple
outlined
dense
:options="attrs.columns"
options-dense
option-value="name"
map-options
emit-value
style="min-width: 150px"
class="gt-xs q-ml-sm"
/>
</div>
</div> </div>
<!-- header บน table นหา แสดงคอลมน (status nornmalData true) -->
<div class="col-12 row q-py-sm items-center" v-if="nornmalData == true"> <q-space />
<span class="text-subtitle1">{{ titleText }}</span> <div class="items-center" style="display: flex">
<!-- <q-select <div
:model-value="inputvisibleFilter" class="row items-center"
:options="optionsFilter" style="display: flex"
style="min-width: 150px" v-if="publicData == false && publicNoBtn == false"
class="gt-xs q-ml-sm" ></div>
/> -->
<q-select <q-input
standout
dense dense
:model-value="inputfilter"
ref="filterRef"
@update:model-value="updateInput"
outlined outlined
:model-value="inputvisibleFilter" debounce="300"
:options="optionsFilter" placeholder="ค้นหา"
class="col-xs-12 col-sm-4 col-md-3" style="max-width: 200px"
option-value="id" class="q-ml-sm"
option-label="name" >
<template v-slot:append>
<q-icon v-if="inputfilter == ''" name="search" />
<q-icon
v-if="inputfilter !== ''"
name="clear"
class="cursor-pointer"
@click="resetFilter"
/>
</template>
</q-input>
<!-- แสดง table ใน คอลมน -->
<q-select
:model-value="inputvisible"
@update:model-value="updateVisible"
:display-value="$q.lang.table.columns"
multiple
outlined
dense
:options="attrs.columns"
options-dense
option-value="name"
map-options map-options
emit-value emit-value
@update:model-value="updateVisibleFilter" style="min-width: 150px"
v-if="optionsFilter != undefined && optionsFilter.length > 0" class="gt-xs q-ml-sm"
/> />
<q-space />
<div class="items-center" style="display: flex">
<!-- นหาขอความใน table -->
<q-input
standout
dense
:model-value="inputfilter"
ref="filterRef"
@update:model-value="updateInput"
outlined
debounce="300"
placeholder="ค้นหา"
style="max-width: 200px"
class="q-ml-sm"
>
<template v-slot:append>
<q-icon v-if="inputfilter == ''" name="search" />
<q-icon
v-if="inputfilter !== ''"
name="clear"
class="cursor-pointer"
@click="resetFilter"
/>
</template>
</q-input>
<!-- แสดงคอลมนใน table -->
<q-select
:model-value="inputvisible"
@update:model-value="updateVisible"
:display-value="$q.lang.table.columns"
multiple
outlined
dense
:options="attrs.columns"
options-dense
option-value="name"
map-options
emit-value
style="min-width: 150px"
class="gt-xs q-ml-sm"
/>
</div>
</div> </div>
<q-table
ref="table"
flat
bordered
class="custom-header-table"
v-bind="attrs"
virtual-scroll
:virtual-scroll-sticky-size-start="48"
dense
:pagination-label="paginationLabel"
:pagination="initialPagination"
:rows-per-page-options="paging == true ? [25, 50, 100, 500] : []"
>
<!-- :pagination="initialPagination" -->
<!-- :rows-per-page-options="[0]" -->
<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
v-if="
editvisible == true || nextPageVisible == true || history == true
"
/>
</q-tr>
</template>
<!-- สำหรบเรยกใช template วขางนอก -->
<template #body="props" >
<slot v-bind="props" name="columns"></slot>
</template>
</q-table>
</div> </div>
</template> <div class="col-12 row q-py-sm items-center" v-if="nornmalData == true">
<script setup lang="ts"> <span class="text-subtitle1">{{ titleText }}</span>
import { ref, useAttrs } from "vue";
import { useCounterMixin } from "@/stores/mixin"; <q-space />
import { useQuasar } from "quasar"; <div class="items-center" style="display: flex">
<!-- นหาขอความใน table -->
const $q = useQuasar(); <q-input
const mixin = useCounterMixin(); // standout
const { dialogMessage } = mixin; dense
:model-value="inputfilter"
const attrs = ref<any>(useAttrs()); ref="filterRef"
const table = ref<any>(null); @update:model-value="updateInput"
const filterRef = ref<any>(null); outlined
const modalPublish = ref<boolean>(false); debounce="300"
const modalDelete = ref<boolean>(false); placeholder="ค้นหา"
const props = defineProps({ style="max-width: 200px"
inputfilter: String, class="q-ml-sm"
inputvisible: Array, >
inputvisibleFilter: String, <template v-slot:append>
editvisible: Boolean, <q-icon v-if="inputfilter == ''" name="search" />
titleText: String, <q-icon
optionsFilter: { v-if="inputfilter !== ''"
type: Array, name="clear"
defualt: [], class="cursor-pointer"
}, @click="resetFilter"
boss: { />
type: Boolean, </template>
defualt: false, </q-input>
}, <!-- แสดงคอลมนใน table -->
saveNoDraft: { <q-select
type: Boolean, :model-value="inputvisible"
defualt: false, @update:model-value="updateVisible"
}, :display-value="$q.lang.table.columns"
history: { multiple
type: Boolean, outlined
defualt: false, dense
}, :options="attrs.columns"
paging: { options-dense
type: Boolean, option-value="name"
defualt: false, map-options
}, emit-value
nornmalData: { style="min-width: 150px"
type: Boolean, class="gt-xs q-ml-sm"
defualt: false, />
}, </div>
nextPageVisible: { </div>
type: Boolean, <q-table
defualt: false, ref="table"
}, flat
publicData: { bordered
type: Boolean, class="custom-header-table"
defualt: true, v-bind="attrs"
required: false, virtual-scroll
}, :virtual-scroll-sticky-size-start="48"
updateData: { dense
type: Boolean, :pagination-label="paginationLabel"
defualt: true, :pagination="initialPagination"
required: false, :rows-per-page-options="[0]"
}, >
publicNoBtn: { <template v-slot:header="props">
type: Boolean, <q-tr :props="props">
defualt: false, <q-th v-for="col in props.cols" :key="col.name" :props="props">
}, <span class="text-weight-medium">{{ col.label }}</span>
add: { </q-th>
type: Function, <q-th auto-width v-if="history == true" />
default: () => console.log("not function"), </q-tr>
}, </template>
edit: { <template #body="props">
type: Function, <slot v-bind="props" name="columns"></slot>
default: () => console.log("not function"), </template>
}, </q-table>
save: { </div>
type: Function, </template>
default: () => console.log("not function"), <script setup lang="ts">
}, import { ref, useAttrs } from "vue";
deleted: { import { useCounterMixin } from "@/stores/mixin";
type: Function, import { useQuasar } from "quasar";
default: () => console.log("not function"),
}, const $q = useQuasar();
cancel: { const mixin = useCounterMixin(); //
type: Function, const { dialogMessage } = mixin;
default: () => console.log("not function"), const editvisible = ref<boolean>(false);
}, const attrs = ref<any>(useAttrs());
publish: { const table = ref<any>(null);
type: Function, const filterRef = ref<any>(null);
default: () => console.log("not function"), const modalPublish = ref<boolean>(false);
}, const modalDelete = ref<boolean>(false);
validate: { const props = defineProps({
type: Function, inputfilter: String,
default: () => console.log("not function"), inputvisible: Array,
}, inputvisibleFilter: String,
}); editvisible: Boolean,
const initialPagination = ref<any>({ titleText: String,
// descending: false, optionsFilter: {
rowsPerPage: props.paging == true ? 25 : 0, type: Array,
}); defualt: [],
},
const emit = defineEmits([ boss: {
"update:inputfilter", type: Boolean,
"update:inputvisible", defualt: false,
"update:editvisible", },
"update:titleText", saveNoDraft: {
"update:inputvisibleFilter", type: Boolean,
]); defualt: false,
},
const updateEdit = (value: any) => { history: {
emit("update:editvisible", value); type: Boolean,
}; defualt: false,
const updateInput = (value: any) => { },
emit("update:inputfilter", value); paging: {
}; type: Boolean,
const updateVisible = (value: any) => { defualt: false,
emit("update:inputvisible", value); },
}; nornmalData: {
const updateVisibleFilter = (value: any) => { type: Boolean,
emit("update:inputvisibleFilter", value); defualt: false,
}; },
nextPageVisible: {
const paginationLabel = (start: string, end: string, total: string) => { type: Boolean,
if (props.paging == true) defualt: false,
return " " + start + " ใน " + end + " จากจำนวน " + total + " รายการ"; },
else return start + "-" + end + " ใน " + total; publicData: {
}; type: Boolean,
defualt: true,
const checkSave = () => { required: false,
props.validate(); },
props.save(); updateData: {
// if (myForm.value !== null) { type: Boolean,
// myForm.value.validate().then((success) => { defualt: true,
// if (success) { required: false,
// } },
// }); publicNoBtn: {
// } type: Boolean,
}; defualt: false,
},
const publishModal = () => { add: {
props.validate(); type: Function,
const filter = attrs.value.rows.filter((r: any) => r.name == ""); default: () => console.log("not function"),
},
if (filter.length == 0 || attrs.value.rows.length == 0) { edit: {
// modalPublish.value = true; type: Function,
dialogMessage( default: () => console.log("not function"),
$q, },
"ต้องการเผยแพร่ข้อมูลนี้หรือไม่?", save: {
"ข้อมูลที่กำลังถูกเผยแพร่นี้จะมีผลใช้งานทันที", type: Function,
"public", default: () => console.log("not function"),
"เผยแพร่", },
"public", deleted: {
props.publish, type: Function,
undefined default: () => console.log("not function"),
); },
} cancel: {
}; type: Function,
default: () => console.log("not function"),
const DeleteModal = () => { },
// modalDelete.value = true; publish: {
type: Function,
default: () => console.log("not function"),
},
validate: {
type: Function,
default: () => console.log("not function"),
},
});
const initialPagination = ref<any>({
// descending: false,
rowsPerPage: props.paging == true ? 25 : 0,
});
const emit = defineEmits([
"update:inputfilter",
"update:inputvisible",
"update:editvisible",
"update:titleText",
"update:inputvisibleFilter",
]);
const updateEdit = (value: any) => {
emit("update:editvisible", value);
};
const updateInput = (value: any) => {
emit("update:inputfilter", value);
};
const updateVisible = (value: any) => {
emit("update:inputvisible", value);
};
const updateVisibleFilter = (value: any) => {
emit("update:inputvisibleFilter", value);
};
const paginationLabel = (start: string, end: string, total: string) => {
if (props.paging == true)
return " " + start + " ใน " + end + " จากจำนวน " + total + " รายการ";
else return start + "-" + end + " ใน " + total;
};
const checkSave = () => {
props.validate();
props.save();
// if (myForm.value !== null) {
// myForm.value.validate().then((success) => {
// if (success) {
// }
// });
// }
};
const clickEdit = () => {
updateEdit(!props.editvisible);
editvisible.value = !editvisible.value;
props.edit();
};
const clickCancel = () => {
updateEdit(!props.editvisible);
editvisible.value = !editvisible.value;
props.cancel();
};
const publishModal = () => {
props.validate();
const filter = attrs.value.rows.filter((r: any) => r.name == "");
if (filter.length == 0 || attrs.value.rows.length == 0) {
// modalPublish.value = true;
dialogMessage( dialogMessage(
$q, $q,
"ต้องการลบข้อมูลบันทึกร่างนี้หรือไม่?", "ต้องการเผยแพร่ข้อมูลนี้หรือไม่?",
"ข้อมูลบันทึกร่างที่กำลังถูกลบนี้จะมีผลใช้งานทันที", "ข้อมูลที่กำลังถูกเผยแพร่นี้จะมีผลใช้งานทันที",
"mdi-file-remove-outline", "public",
"ลบบันทึก", "เผยแพร่",
"red", "public",
props.deleted, props.publish,
undefined undefined
); );
};
const edit = async () => {
updateEdit(!props.editvisible);
props.edit();
};
const add = async () => {
// if (myForm.value !== null) {
// myForm.value.validate();
// }
props.validate();
props.add();
await table.value.lastPage();
await table.value.scrollTo(attrs.value.rows.length - 1);
};
const deleted = async () => {
// const deletedF = () => {
if (props.publicNoBtn === false) {
updateEdit(false);
}
props.deleted();
};
const resetFilter = () => {
// reset X
emit("update:inputfilter", "");
filterRef.value.focus();
};
</script>
<style lang="scss">
.icon-color {
color: #4154b3;
} }
.custom-header-table { };
max-height: 64vh;
.q-table tr:nth-child(odd) td { const DeleteModal = () => {
background: white; // modalDelete.value = true;
} dialogMessage(
.q-table tr:nth-child(even) td { $q,
background: #f8f8f8; "ต้องการลบข้อมูลบันทึกร่างนี้หรือไม่?",
} "ข้อมูลบันทึกร่างที่กำลังถูกลบนี้จะมีผลใช้งานทันที",
"mdi-file-remove-outline",
.q-table thead tr { "ลบบันทึก",
background: #ecebeb; "red",
} props.deleted,
undefined
.q-table thead tr th { );
position: sticky; };
z-index: 1;
} const edit = async () => {
/* this will be the loading indicator */ updateEdit(!props.editvisible);
.q-table thead tr:last-child th { props.edit();
/* height of all previous header rows */ };
top: 48px;
} const add = async () => {
.q-table thead tr:first-child th { // if (myForm.value !== null) {
top: 0; // myForm.value.validate();
} // }
props.validate();
props.add();
await table.value.lastPage();
await table.value.scrollTo(attrs.value.rows.length - 1);
};
const deleted = async () => {
// const deletedF = () => {
if (props.publicNoBtn === false) {
updateEdit(false);
} }
</style> props.deleted();
};
const resetFilter = () => {
// reset X
emit("update:inputfilter", "");
filterRef.value.focus();
};
</script>
<style lang="scss">
.icon-color {
color: #4154b3;
}
.custom-header-table {
max-height: 64vh;
.q-table tr:nth-child(odd) td {
background: white;
}
.q-table tr:nth-child(even) td {
background: #f8f8f8;
}
.q-table thead tr {
background: #ecebeb;
}
.q-table thead tr th {
position: sticky;
z-index: 1;
}
/* this will be the loading indicator */
.q-table thead tr:last-child th {
/* height of all previous header rows */
top: 48px;
}
.q-table thead tr:first-child th {
top: 0;
}
}
</style>

View file

@ -1,5 +1,5 @@
interface TableName { interface TableName {
position: string; position: number;
Name: string; Name: string;
ExamOrder: number; ExamOrder: number;
Unit: string; Unit: string;
@ -10,20 +10,8 @@ interface TableName {
} }
interface RequestReport2 {
organizationShortNameId: string;
organizationOrganizationId: string;
positionNumId: string;
positionTypeId: string;
positionExecutiveId: string;
positionExecutiveSideId: string;
positionPathId: string;
positionPathSideId: string;
positionLevelId: string;
status: string | null;
}
export type { export type {
TableName, TableName,
RequestReport2,
}; };

View file

@ -1,5 +1,32 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { ref, computed } from "vue";
export const useProfileDataStore = defineStore("placement", () => { export const useProfileDataStore = defineStore("placement", () => {
return {}; return {};
}); });
export const usePlacementDataStore = defineStore("placement", () => {
interface placement {
mappingPosition: { columns: String[] };
}
const placementData = ref<placement>({
mappingPosition: { columns: [] },
});
const changePlacementColumns = (system: String, val: String[]) => {
if (system == "mappingPosition")
placementData.value.mappingPosition.columns = val;
localStorage.setItem(
"placement",
JSON.stringify(placementData.value)
);
};
if (localStorage.getItem("placement") !== null) {
placementData.value = JSON.parse(
localStorage.getItem("placement") || "{}"
);
}
return {
placementData,
changePlacementColumns,
};
});