ปรับ css ทะเบียนประวัติใหม่แท็บที่เหลือ

This commit is contained in:
Tanyalak 2024-04-24 17:26:12 +07:00
parent 15d174a98c
commit 0fa8d6ace1
15 changed files with 2153 additions and 2366 deletions

View file

@ -338,12 +338,13 @@ onMounted(async () => {
</script> </script>
<template> <template>
<q-toolbar style="padding: 0px" class="q-mb-xs"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn <q-btn
round round
flat flat
color="primary" color="primary"
icon="add" icon="add"
dense
@click=" @click="
dialogStatus = 'create'; dialogStatus = 'create';
clearForm(); clearForm();
@ -354,7 +355,7 @@ onMounted(async () => {
> >
<q-space /> <q-space />
<q-input dense outlined v-model="keyword" label="ค้นหา" class="q-mr-sm"> <q-input dense outlined v-model="keyword" label="ค้นหา">
<template v-slot:append> <template v-slot:append>
<q-icon name="search" /> <q-icon name="search" />
</template> </template>
@ -373,7 +374,6 @@ onMounted(async () => {
option-value="name" option-value="name"
options-cover options-cover
style="min-width: 150px" style="min-width: 150px"
class="q-mr-sm"
/> />
<q-btn-toggle <q-btn-toggle
@ -406,7 +406,7 @@ onMounted(async () => {
/> />
</template> </template>
</q-btn-toggle> </q-btn-toggle>
</q-toolbar> </div>
<d-table <d-table
:grid="mode === 'card'" :grid="mode === 'card'"
ref="table" ref="table"
@ -536,30 +536,20 @@ onMounted(async () => {
</d-table> </d-table>
<q-dialog v-model="dialog" class="dialog" persistent> <q-dialog v-model="dialog" class="dialog" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 300px"
class="bg-white"
>
<q-form @submit.prevent greedy @validation-success="onSubmit()"> <q-form @submit.prevent greedy @validation-success="onSubmit()">
<q-header> <dialog-header
<q-toolbar> :tittle="
<dialog-header dialogStatus == 'edit'
:tittle=" ? 'แก้ไขข้อมูลใบอนุญาตประกอบวิชาชีพ'
dialogStatus == 'edit' : 'เพิ่มข้อมูลใบอนุญาตประกอบวิชาชีพ'
? 'แก้ไขข้อมูลใบอนุญาตประกอบวิชาชีพ' "
: 'เพิ่มข้อมูลใบอนุญาตประกอบวิชาชีพ' :close="closeDialog"
" />
:close="closeDialog" <q-separator color="grey-4" />
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 55vh" class="scroll">
<q-page> <div class="row q-gutter-sm q-pb-sm">
<div class="row q-gutter-sm q-px-md q-pb-sm q-mt-sm">
<div class="col"> <div class="col">
<q-input <q-input
outlined outlined
@ -587,7 +577,7 @@ onMounted(async () => {
/> />
</div> </div>
</div> </div>
<div class="row q-gutter-sm q-px-md q-pb-sm"> <div class="row q-gutter-sm q-pb-sm">
<div class="col"> <div class="col">
<q-input <q-input
outlined outlined
@ -645,7 +635,7 @@ onMounted(async () => {
</datepicker> </datepicker>
</div> </div>
</div> </div>
<div class="row q-gutter-sm q-px-md q-pb-sm"> <div class="row q-gutter-sm q-pb-sm">
<div class="col"> <div class="col">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
@ -689,48 +679,35 @@ onMounted(async () => {
</datepicker> </datepicker>
</div> </div>
</div> </div>
</q-page> </q-card-section>
</q-page-container> <q-separator color="grey-4" />
<q-footer> <q-card-actions align="right">
<q-separator color="grey-4" /> <q-btn
<q-toolbar class="fit row wrap justify-end items-start content-start"> dense
<q-btn unelevated
dense label="บันทึก"
unelevated id="onSubmit"
label="บันทึก" type="submit"
id="onSubmit" color="public"
type="submit" class="q-px-md"
color="public" >
class="q-px-md" <q-tooltip>นทกขอม</q-tooltip>
> </q-btn>
<q-tooltip>นทกขอม</q-tooltip> </q-card-actions>
</q-btn>
</q-toolbar>
</q-footer>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="historyDialog" class="dialog" persistent> <q-dialog v-model="historyDialog" class="dialog" persistent>
<q-layout <q-card style="min-width: 80%">
view="lHh lpr lFf" <dialog-header
container tittle="ประวัติแก้ไขใบอนุญาตประกอบวิชาชีพ"
style="height: 500px; min-width: 80%" :close="closeHistoryDialog"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header>
<q-toolbar>
<dialog-header
tittle="ประวัติแก้ไขใบอนุญาตประกอบวิชาชีพ"
:close="closeHistoryDialog"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 60vh" class="scroll">
<q-page class="q-pa-md"> <div class="row q-gutter-sm q-mb-sm">
<q-toolbar style="padding: 0px" class="text-primary q-mb-sm">
<q-space /> <q-space />
<q-input <q-input
dense dense
@ -738,7 +715,6 @@ onMounted(async () => {
bg-color="white" bg-color="white"
v-model="historyKeyword" v-model="historyKeyword"
label="ค้นหา" label="ค้นหา"
class="q-mr-sm"
> >
<template v-slot:append> <template v-slot:append>
<q-icon name="search" /> <q-icon name="search" />
@ -760,7 +736,7 @@ onMounted(async () => {
options-cover options-cover
style="min-width: 150px" style="min-width: 150px"
/> />
</q-toolbar> </div>
<d-table <d-table
ref="table" ref="table"
:columns="historyColumns" :columns="historyColumns"
@ -794,9 +770,8 @@ onMounted(async () => {
</q-tr> </q-tr>
</template> </template>
</d-table> </d-table>
</q-page> </q-card-section>
</q-page-container> </q-card>
</q-layout>
</q-dialog> </q-dialog>
</template> </template>

View file

@ -496,9 +496,10 @@ onMounted(async () => {
</script> </script>
<template> <template>
<q-toolbar style="padding: 0px"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn <q-btn
round round
dense
flat flat
color="primary" color="primary"
icon="add" icon="add"
@ -514,7 +515,7 @@ onMounted(async () => {
> >
<q-space /> <q-space />
<q-input dense outlined v-model="keyword" label="ค้นหา" class="q-mr-sm"> <q-input dense outlined v-model="keyword" label="ค้นหา">
<template v-slot:append> <template v-slot:append>
<q-icon name="search" /> <q-icon name="search" />
</template> </template>
@ -533,7 +534,6 @@ onMounted(async () => {
option-value="name" option-value="name"
options-cover options-cover
style="min-width: 150px" style="min-width: 150px"
class="q-mr-sm"
/> />
<q-btn-toggle <q-btn-toggle
@ -566,7 +566,7 @@ onMounted(async () => {
/> />
</template> </template>
</q-btn-toggle> </q-btn-toggle>
</q-toolbar> </div>
<d-table <d-table
:grid="mode === 'card'" :grid="mode === 'card'"
@ -685,280 +685,87 @@ onMounted(async () => {
</d-table> </d-table>
<q-dialog v-model="dialog" class="dialog" persistent> <q-dialog v-model="dialog" class="dialog" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 450px"
class="bg-white"
>
<q-form @submit.prevent greedy @validation-success="onSubmit()"> <q-form @submit.prevent greedy @validation-success="onSubmit()">
<q-header> <dialog-header
<q-toolbar> :tittle="
<dialog-header dialogStatus == 'edit'
:tittle=" ? 'แก้ไขการฝึกอบรม/ดูงาน'
dialogStatus == 'edit' : 'เพิ่มการฝึกอบรม/ดูงาน'
? 'แก้ไขการฝึกอบรม/ดูงาน' "
: 'เพิ่มการฝึกอบรม/ดูงาน' :close="closeDialog"
" />
:close="closeDialog" <q-separator color="grey-4" />
/> <q-card-section style="max-height: 55vh" class="scroll">
</q-toolbar> <div class="row q-mb-sm q-gutter-sm">
<q-separator color="grey-4" /> <div class="col">
</q-header> <q-input
outlined
<q-page-container> v-model="trainData.name"
<q-page> label="ชื่อโครงการ/หลักสูตรการฝึกอบรม"
<div class="row q-px-md q-mt-sm q-mb-sm q-gutter-sm"> bg-color="white"
<div class="col"> dense
<q-input class="inputgreen"
outlined :rules="[
v-model="trainData.name" (val) =>
label="ชื่อโครงการ/หลักสูตรการฝึกอบรม" !!val || `${'กรุณากรอกชื่อโครงการ/หลักสูตรการฝึกอบรม'}`,
bg-color="white" ]"
dense hide-bottom-space
class="inputgreen" />
:rules="[
(val) =>
!!val || `${'กรุณากรอกชื่อโครงการ/หลักสูตรการฝึกอบรม'}`,
]"
hide-bottom-space
/>
</div>
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.topic"
label="หัวข้อการฝึกอบรม/ดูงาน"
bg-color="white"
dense
:rules="[
(val) => !!val || `${'กรุณากรอกหัวข้อการฝึกอบรม/ดูงาน'}`,
]"
hide-bottom-space
/>
</div>
</div> </div>
<q-card <div class="col">
flat <q-input
bordered outlined
class="q-px-sm q-mx-md q-my-md q-pb-sm borderCard" class="inputgreen"
> v-model="trainData.topic"
<div class="row col-12 q-gutter-md q-py-sm text-grey-7"> label="หัวข้อการฝึกอบรม/ดูงาน"
<q-radio bg-color="white"
v-model="isDate" dense
checked-icon="task_alt" :rules="[
unchecked-icon="panorama_fish_eye" (val) => !!val || `${'กรุณากรอกหัวข้อการฝึกอบรม/ดูงาน'}`,
val="false" ]"
label="ปี" hide-bottom-space
dense />
/> </div>
<q-radio </div>
v-model="isDate" <q-card
checked-icon="task_alt" flat
unchecked-icon="panorama_fish_eye" bordered
val="true" class="q-px-sm q-my-sm q-pb-sm borderCard"
label="วัน/เดือน/ปี" >
dense <div class="row col-12 q-gutter-md q-py-sm text-grey-7">
/> <q-radio
</div> v-model="isDate"
<div v-if="isDate === 'false'" class="row q-gutter-sm"> checked-icon="task_alt"
<div class="col"> unchecked-icon="panorama_fish_eye"
<datepicker val="false"
menu-class-name="modalfix" label="ปี"
v-model="trainData.startYear" dense
:locale="'th'" />
autoApply <q-radio
year-picker v-model="isDate"
:enableTimePicker="false" checked-icon="task_alt"
@update:modelValue=" unchecked-icon="panorama_fish_eye"
(v:number) => val="true"
(trainData.startDate = new Date( label="วัน/เดือน/ปี"
`${v}-01-01T00:00:02.010+07:00` dense
)) />
" </div>
> <div v-if="isDate === 'false'" class="row q-gutter-sm">
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
lazy-rules
outlined
class="inputgreen"
hide-bottom-space
:model-value="trainData.startYear + 543"
:rules="[
(val) =>
!!val ||
`${'กรุณาเลือกปีที่เริ่มต้นการฝึกอบรม/ดูงาน'}`,
]"
:label="`${'ปีที่เริ่มต้นการฝึกอบรม/ดูงาน'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col">
<datepicker
menu-class-name="modalfix"
v-model="trainData.finishYear"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
@update:modelValue="
(v:number) =>
(trainData.endDate = new Date(
`${v}-01-01T00:00:02.010+07:00`
))
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
lazy-rules
class="inputgreen"
outlined
hide-bottom-space
:model-value="trainData.finishYear + 543"
:rules="[
(val) =>
!!val || `${'กรุณาเลือกปีที่จบการฝึกอบรม/ดูงาน'}`,
]"
:label="`${'ปีที่จบการฝึกอบรม/ดูงาน'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</div>
<div v-if="isDate === 'true'" class="row q-gutter-sm">
<div class="col">
<datepicker
menu-class-name="modalfix"
v-model="trainData.startDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
@update:modelValue="
(v: Date) =>
(trainData.startYear = parseInt(
v.toString().slice(11, 15)
))
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
outlined
dense
lazy-rules
class="inputgreen"
:model-value="date2Thai(trainData.startDate)"
:rules="[
(val) =>
!!val ||
`${'กรุณาเลือกวันที่เริ่มต้นการฝึกอบรม/ดูงาน'}`,
]"
hide-bottom-space
:label="`${'วันที่เริ่มต้นการฝึกอบรม/ดูงาน'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col">
<datepicker
menu-class-name="modalfix"
v-model="trainData.endDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
@update:modelValue="
(v: Date) =>
(trainData.finishYear = parseInt(
v.toString().slice(11, 15)
))
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
outlined
dense
lazy-rules
class="inputgreen"
:model-value="date2Thai(trainData.endDate)"
:rules="[
(val) =>
!!val || `${'กรุณาเลือกวันที่จบการฝึกอบรม/ดูงาน'}`,
]"
hide-bottom-space
:label="`${'วันที่จบการฝึกอบรม/ดูงาน'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</div>
</q-card>
<div class="row q-px-md q-mb-sm q-gutter-sm">
<div class="col"> <div class="col">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="trainData.yearly" v-model="trainData.startYear"
:locale="'th'" :locale="'th'"
autoApply autoApply
year-picker year-picker
:enableTimePicker="false" :enableTimePicker="false"
@update:modelValue="trainData.yearly" @update:modelValue="
(v:number) =>
(trainData.startDate = new Date(
`${v}-01-01T00:00:02.010+07:00`
))
"
> >
<template #year="{ year }">{{ year + 543 }}</template> <template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{ <template #year-overlay-value="{ value }">{{
@ -970,14 +777,14 @@ onMounted(async () => {
lazy-rules lazy-rules
outlined outlined
class="inputgreen" class="inputgreen"
clearable
@clear="() => (trainData.yearly = null)"
hide-bottom-space hide-bottom-space
:model-value=" :model-value="trainData.startYear + 543"
!!trainData.yearly ? trainData.yearly + 543 : null :rules="[
" (val) =>
:label="`${'ปีงบประมาณ'}`" !!val ||
@update:modelValue="trainData.yearly = null" `${'กรุณาเลือกปีที่เริ่มต้นการฝึกอบรม/ดูงาน'}`,
]"
:label="`${'ปีที่เริ่มต้นการฝึกอบรม/ดูงาน'}`"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon <q-icon
@ -992,61 +799,66 @@ onMounted(async () => {
</datepicker> </datepicker>
</div> </div>
<div class="col"> <div class="col">
<q-input <datepicker
outlined menu-class-name="modalfix"
v-model="trainData.place" v-model="trainData.finishYear"
label="สถานที่ฝึกอบรม/ดูงาน" :locale="'th'"
bg-color="white" autoApply
class="inputgreen" year-picker
dense :enableTimePicker="false"
:rules="[ @update:modelValue="
(val) => !!val || `${'กรุณากรอกสถานที่ฝึกอบรม/ดูงาน'}`, (v:number) =>
]" (trainData.endDate = new Date(
hide-bottom-space `${v}-01-01T00:00:02.010+07:00`
/> ))
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
lazy-rules
class="inputgreen"
outlined
hide-bottom-space
:model-value="trainData.finishYear + 543"
:rules="[
(val) =>
!!val || `${'กรุณาเลือกปีที่จบการฝึกอบรม/ดูงาน'}`,
]"
:label="`${'ปีที่จบการฝึกอบรม/ดูงาน'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div> </div>
</div> </div>
<div class="row q-px-md q-mb-sm q-gutter-sm"> <div v-if="isDate === 'true'" class="row q-gutter-sm">
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.duration"
label="รวมระยะเวลาในการฝึกอบรม/ดูงาน"
bg-color="white"
dense
/>
</div>
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.department"
label="หน่วยงานที่รับผิดชอบจัดการฝึกอบรม/ดูงาน"
bg-color="white"
dense
/>
</div>
</div>
<div class="row q-px-md q-mb-sm q-gutter-sm">
<div class="col">
<q-input
class="inputgreen"
outlined
v-model="trainData.numberOrder"
label="เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"
bg-color="white"
dense
/>
</div>
<div class="col"> <div class="col">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="trainData.dateOrder" v-model="trainData.startDate"
:locale="'th'" :locale="'th'"
autoApply autoApply
:enableTimePicker="false" :enableTimePicker="false"
week-start="0" week-start="0"
@update:modelValue="
(v: Date) =>
(trainData.startYear = parseInt(
v.toString().slice(11, 15)
))
"
> >
<template #year="{ year }">{{ year + 543 }}</template> <template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{ <template #year-overlay-value="{ value }">{{
@ -1056,14 +868,61 @@ onMounted(async () => {
<q-input <q-input
outlined outlined
dense dense
class="inputgreen"
lazy-rules lazy-rules
clearable class="inputgreen"
@clear="() => (trainData.dateOrder = null)" :model-value="date2Thai(trainData.startDate)"
@update:modelValue="trainData.dateOrder = null" :rules="[
:model-value="date2Thai(trainData.dateOrder)" (val) =>
!!val ||
`${'กรุณาเลือกวันที่เริ่มต้นการฝึกอบรม/ดูงาน'}`,
]"
hide-bottom-space hide-bottom-space
:label="`${'คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่'}`" :label="`${'วันที่เริ่มต้นการฝึกอบรม/ดูงาน'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col">
<datepicker
menu-class-name="modalfix"
v-model="trainData.endDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
@update:modelValue="
(v: Date) =>
(trainData.finishYear = parseInt(
v.toString().slice(11, 15)
))
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
outlined
dense
lazy-rules
class="inputgreen"
:model-value="date2Thai(trainData.endDate)"
:rules="[
(val) =>
!!val || `${'กรุณาเลือกวันที่จบการฝึกอบรม/ดูงาน'}`,
]"
hide-bottom-space
:label="`${'วันที่จบการฝึกอบรม/ดูงาน'}`"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon <q-icon
@ -1078,114 +937,228 @@ onMounted(async () => {
</datepicker> </datepicker>
</div> </div>
</div> </div>
</q-page> </q-card>
</q-page-container> <div class="row q-mb-sm q-gutter-sm">
<q-footer> <div class="col">
<q-separator color="grey-4" /> <datepicker
<q-toolbar class="fit row wrap justify-end items-start content-start"> menu-class-name="modalfix"
<q-btn v-model="trainData.yearly"
dense :locale="'th'"
unelevated autoApply
label="บันทึก" year-picker
id="onSubmit" :enableTimePicker="false"
type="submit" @update:modelValue="trainData.yearly"
color="public" >
class="q-px-md" <template #year="{ year }">{{ year + 543 }}</template>
> <template #year-overlay-value="{ value }">{{
<q-tooltip>นทกขอม</q-tooltip> parseInt(value + 543)
</q-btn> }}</template>
</q-toolbar> <template #trigger>
</q-footer> <q-input
dense
lazy-rules
outlined
class="inputgreen"
clearable
@clear="() => (trainData.yearly = null)"
hide-bottom-space
:model-value="
!!trainData.yearly ? trainData.yearly + 543 : null
"
:label="`${'ปีงบประมาณ'}`"
@update:modelValue="trainData.yearly = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col">
<q-input
outlined
v-model="trainData.place"
label="สถานที่ฝึกอบรม/ดูงาน"
bg-color="white"
class="inputgreen"
dense
:rules="[
(val) => !!val || `${'กรุณากรอกสถานที่ฝึกอบรม/ดูงาน'}`,
]"
hide-bottom-space
/>
</div>
</div>
<div class="row q-mb-sm q-gutter-sm">
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.duration"
label="รวมระยะเวลาในการฝึกอบรม/ดูงาน"
bg-color="white"
dense
/>
</div>
<div class="col">
<q-input
outlined
class="inputgreen"
v-model="trainData.department"
label="หน่วยงานที่รับผิดชอบจัดการฝึกอบรม/ดูงาน"
bg-color="white"
dense
/>
</div>
</div>
<div class="row q-mb-sm q-gutter-sm">
<div class="col">
<q-input
class="inputgreen"
outlined
v-model="trainData.numberOrder"
label="เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"
bg-color="white"
dense
/>
</div>
<div class="col">
<datepicker
menu-class-name="modalfix"
v-model="trainData.dateOrder"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
outlined
dense
class="inputgreen"
lazy-rules
clearable
@clear="() => (trainData.dateOrder = null)"
@update:modelValue="trainData.dateOrder = null"
:model-value="date2Thai(trainData.dateOrder)"
hide-bottom-space
:label="`${'คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</div>
</q-card-section>
<q-separator color="grey-4" />
<q-card-actions align="right">
<q-btn
dense
unelevated
label="บันทึก"
id="onSubmit"
type="submit"
color="public"
class="q-px-md"
>
<q-tooltip>นทกขอม</q-tooltip>
</q-btn>
</q-card-actions>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="historyDialog" class="dialog" persistent> <q-dialog v-model="historyDialog" class="dialog" persistent>
<q-layout <q-card style="min-width: 80%">
view="lHh lpr lFf" <dialog-header
container tittle="ประวัติแก้ไขการฝึกอบรม/ดูงาน"
style="height: 500px; min-width: 80%" :close="closeHistoryDialog"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header> <q-card-section style="max-height: 60vh" class="scroll">
<q-toolbar> <div class="row q-gutter-sm q-mb-sm">
<dialog-header <q-space />
tittle="ประวัติแก้ไขการฝึกอบรม/ดูงาน" <q-input
:close="closeHistoryDialog"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container>
<q-page class="q-pa-md">
<q-toolbar style="padding: 0px" class="text-primary q-mb-sm">
<q-space />
<q-input
dense
outlined
bg-color="white"
v-model="historyKeyword"
label="ค้นหา"
class="q-mr-sm"
>
<template v-slot:append>
<q-icon name="search" />
</template>
</q-input>
<q-select
v-model="historyVisibleColumns"
multiple
outlined
dense
bg-color="white"
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="historyColumns"
option-value="name"
options-cover
style="min-width: 150px"
/>
</q-toolbar>
<d-table
ref="table"
:columns="historyColumns"
:rows="historyRows"
row-key="name"
flat
:filter="historyKeyword"
v-model:pagination="historyPagination"
bordered
:paging="true"
dense dense
:rows-per-page-options="[10, 25, 50, 100]" outlined
class="custom-header-table" bg-color="white"
:visible-columns="historyVisibleColumns" v-model="historyKeyword"
label="ค้นหา"
> >
<template v-slot:header="props"> <template v-slot:append>
<q-tr :props="props"> <q-icon name="search" />
<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>
<template v-slot:body="props"> </q-input>
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols" :key="col.id"> <q-select
<div> v-model="historyVisibleColumns"
{{ col.value ? col.value : "-" }} multiple
</div> outlined
</q-td> dense
</q-tr> bg-color="white"
</template> options-dense
</d-table> :display-value="$q.lang.table.columns"
</q-page> emit-value
</q-page-container> map-options
</q-layout> :options="historyColumns"
option-value="name"
options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
:columns="historyColumns"
:rows="historyRows"
row-key="name"
flat
:filter="historyKeyword"
v-model:pagination="historyPagination"
bordered
:paging="true"
dense
:rows-per-page-options="[10, 25, 50, 100]"
class="custom-header-table"
:visible-columns="historyVisibleColumns"
>
<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.id">
<div>
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</q-card-section>
</q-card>
</q-dialog> </q-dialog>
</template> </template>

View file

@ -598,8 +598,8 @@ onMounted(async () => {
</script> </script>
<template> <template>
<div class="row items-center q-gutter-x-sm q-py-sm"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn color="teal-5" icon="add" flat round @click="onClickOpenDialog()" <q-btn dense color="primary" icon="add" flat round @click="onClickOpenDialog()"
><q-tooltip>เพมขอม</q-tooltip></q-btn ><q-tooltip>เพมขอม</q-tooltip></q-btn
> >
@ -787,434 +787,409 @@ onMounted(async () => {
</d-table> </d-table>
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 500px"
class="bg-white"
>
<q-form greedy @submit.prevent @validation-success="onSubmit"> <q-form greedy @submit.prevent @validation-success="onSubmit">
<q-header> <DialogHeader
<q-toolbar> :tittle="
<DialogHeader isEdit
:tittle=" ? 'แก้ไขข้อมูลเครื่องราชอิสริยาภรณ์'
isEdit : 'เพิ่มข้อมูลเครื่องราชอิสริยาภรณ์'
? 'แก้ไขข้อมูลเครื่องราชอิสริยาภรณ์' "
: 'เพิ่มข้อมูลเครื่องราชอิสริยาภรณ์' :close="clickClose"
" />
:close="clickClose" <q-separator color="grey-4" />
/> <q-card-section style="max-height: 55vh" class="scroll">
</q-toolbar> <div class="row col-12 q-col-gutter-sm">
<q-separator color="grey-4" /> <div class="col-xs-6 col-sm-6 col-md-6">
</q-header> <datepicker
autoApply
<q-page-container> year-picker
<q-page class="q-pa-md"> v-model="insigniaForm.year"
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> week-start="0"
<div class="col-xs-6 col-sm-6 col-md-6"> menu-class-name="modalfix"
<datepicker :locale="'th'"
autoApply :enableTimePicker="false"
year-picker >
v-model="insigniaForm.year" <template #year="{ year }">{{ year + 543 }}</template>
week-start="0" <template #year-overlay-value="{ value }">{{
menu-class-name="modalfix" parseInt(value + 543)
:locale="'th'" }}</template>
:enableTimePicker="false" <template #trigger>
> <q-input
<template #year="{ year }">{{ year + 543 }}</template> dense
<template #year-overlay-value="{ value }">{{ outlined
parseInt(value + 543) hide-bottom-space
}}</template> class="inputgreen"
<template #trigger> :model-value="insigniaForm.year !== 0 ? (insigniaForm.year as number) + 543 : null"
<q-input :rules="[
dense (val:string) =>
outlined !!val ||
hide-bottom-space `${'กรุณาเลือกปีที่ยื่นขอพระราชทานเครื่องราชฯ'}`,
class="inputgreen" ]"
:model-value="insigniaForm.year !== 0 ? (insigniaForm.year as number) + 543 : null" :label="`${'ปีที่ยื่นขอพระราชทานเครื่องราชฯ'}`"
:rules="[ >
(val:string) => <template v-slot:prepend>
!!val || <q-icon
`${'กรุณาเลือกปีที่ยื่นขอพระราชทานเครื่องราชฯ'}`, name="event"
]" class="cursor-pointer"
:label="`${'ปีที่ยื่นขอพระราชทานเครื่องราชฯ'}`" color="primary"
> />
<template v-slot:prepend> </template>
<q-icon </q-input>
name="event" </template>
class="cursor-pointer" </datepicker>
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
borderless
week-start="0"
menu-class-name="modalfix"
v-model="insigniaForm.receiveDate"
:locale="'th'"
:enableTimePicker="false"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
dense
outlined
hide-bottom-space
class="inputgreen"
for="inputDatereceive"
ref="dateReceivedRef"
:model-value="
insigniaForm.receiveDate != null
? date2Thai(insigniaForm.receiveDate as Date)
: null
"
:label="`${'วันที่ได้รับ'}`"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่ได้รับ'}`]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<selector
dense
outlined
use-input
emit-value
lazy-rules
map-options
hide-bottom-space
option-value="id"
input-debounce="0"
option-label="name"
v-model="insigniaForm.insigniaId"
class="inputgreen"
:label="`${'ชื่อเครื่องราชฯ'}`"
:options="Ops.insigniaOptions"
:rules="[(val:string) => !!val || `${'กรุณาเลือกชื่อเครื่องราชฯ'}`]"
@filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'insigniaOptions'
) "
@update:modelValue="insigniaTypeSelection"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
readonly
outlined
lazy-rules
hide-bottom-space
v-model="insigniaType"
:label="`${'ลำดับชั้น'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.no"
class="inputgreen"
:label="`${'ลำดับที่'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกลำดับที่'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.issue"
class="inputgreen"
:label="`${'ราชกิจจาฯ ฉบับที่'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกราชกิจจาฯ ฉบับที่'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.volumeNo"
class="inputgreen"
:label="`${'เล่มที่'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกเล่มที่'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.volume"
class="inputgreen"
:label="`${'เล่ม'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกเล่ม'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.section"
class="inputgreen"
:label="`${'ตอน'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกตอน'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
lazy-rules
outlined
hide-bottom-space
v-model="insigniaForm.page"
class="inputgreen"
:label="`${'หน้า'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกหน้า'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
week-start="0"
v-model="insigniaForm.dateAnnounce"
menu-class-name="modalfix"
:locale="'th'"
:enableTimePicker="false"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
outlined
hide-bottom-space
class="inputgreen"
:model-value="date2Thai(insigniaForm.dateAnnounce as Date)"
:label="`${'วันที่ประกาศในราชกิจจาฯ'}`"
:rules="[
(val:string) =>
!!val || `${'กรุณาเลือกวันที่ประกาศในราชกิจจาฯ'}`,
]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.refCommandNo"
class="inputgreen"
:label="`${'เลขที่คำสั่ง'}`"
>
<template v-slot:append>
<q-icon name="mdi-file" class="cursor-pointer" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
week-start="0"
v-model="insigniaForm.refCommandDate"
menu-class-name="modalfix"
:locale="'th'"
:enableTimePicker="false"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
outlined
clearable
hide-bottom-space
class="inputgreen"
:label="`${'เอกสารอ้างอิง (ลง วัน/เดือน/ปี)'}`"
:model-value="
date2Thai(insigniaForm.refCommandDate as Date)
"
@clear="insigniaForm.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
hide-bottom-space
v-model="insigniaForm.note"
class="inputgreen"
label="หมายเหตุ"
/>
</div>
</div> </div>
</q-page> <div class="col-xs-6 col-sm-6 col-md-6">
</q-page-container> <datepicker
<q-footer> autoApply
<q-separator color="grey-4" /> borderless
<q-toolbar class="fit row wrap justify-end items-start content-start"> week-start="0"
<q-btn menu-class-name="modalfix"
dense v-model="insigniaForm.receiveDate"
unelevated :locale="'th'"
label="บันทึก" :enableTimePicker="false"
id="onSubmit" >
type="submit" <template #year="{ year }">
color="public" {{ year + 543 }}
class="q-px-md" </template>
> <template #year-overlay-value="{ value }">
<q-tooltip>นทกขอม</q-tooltip> {{ parseInt(value + 543) }}
</q-btn> </template>
</q-toolbar> <template #trigger>
</q-footer> <q-input
dense
outlined
hide-bottom-space
class="inputgreen"
for="inputDatereceive"
ref="dateReceivedRef"
:model-value="
insigniaForm.receiveDate != null
? date2Thai(insigniaForm.receiveDate as Date)
: null
"
:label="`${'วันที่ได้รับ'}`"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่ได้รับ'}`]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<selector
dense
outlined
use-input
emit-value
lazy-rules
map-options
hide-bottom-space
option-value="id"
input-debounce="0"
option-label="name"
v-model="insigniaForm.insigniaId"
class="inputgreen"
:label="`${'ชื่อเครื่องราชฯ'}`"
:options="Ops.insigniaOptions"
:rules="[(val:string) => !!val || `${'กรุณาเลือกชื่อเครื่องราชฯ'}`]"
@filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'insigniaOptions'
) "
@update:modelValue="insigniaTypeSelection"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
readonly
outlined
lazy-rules
hide-bottom-space
v-model="insigniaType"
:label="`${'ลำดับชั้น'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.no"
class="inputgreen"
:label="`${'ลำดับที่'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกลำดับที่'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.issue"
class="inputgreen"
:label="`${'ราชกิจจาฯ ฉบับที่'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกราชกิจจาฯ ฉบับที่'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.volumeNo"
class="inputgreen"
:label="`${'เล่มที่'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกเล่มที่'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.volume"
class="inputgreen"
:label="`${'เล่ม'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกเล่ม'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.section"
class="inputgreen"
:label="`${'ตอน'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกตอน'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
lazy-rules
outlined
hide-bottom-space
v-model="insigniaForm.page"
class="inputgreen"
:label="`${'หน้า'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกหน้า'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
week-start="0"
v-model="insigniaForm.dateAnnounce"
menu-class-name="modalfix"
:locale="'th'"
:enableTimePicker="false"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
outlined
hide-bottom-space
class="inputgreen"
:model-value="date2Thai(insigniaForm.dateAnnounce as Date)"
:label="`${'วันที่ประกาศในราชกิจจาฯ'}`"
:rules="[
(val:string) =>
!!val || `${'กรุณาเลือกวันที่ประกาศในราชกิจจาฯ'}`,
]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
v-model="insigniaForm.refCommandNo"
class="inputgreen"
:label="`${'เลขที่คำสั่ง'}`"
>
<template v-slot:append>
<q-icon name="mdi-file" class="cursor-pointer" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
week-start="0"
v-model="insigniaForm.refCommandDate"
menu-class-name="modalfix"
:locale="'th'"
:enableTimePicker="false"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
outlined
clearable
hide-bottom-space
class="inputgreen"
:label="`${'เอกสารอ้างอิง (ลง วัน/เดือน/ปี)'}`"
:model-value="
date2Thai(insigniaForm.refCommandDate as Date)
"
@clear="insigniaForm.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
hide-bottom-space
v-model="insigniaForm.note"
class="inputgreen"
label="หมายเหตุ"
/>
</div>
</div>
</q-card-section>
<q-separator color="grey-4" />
<q-card-actions align="right">
<q-btn
dense
unelevated
label="บันทึก"
id="onSubmit"
type="submit"
color="public"
class="q-px-md"
>
<q-tooltip>นทกขอม</q-tooltip>
</q-btn>
</q-card-actions>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="modalHistory" persistent> <q-dialog v-model="modalHistory" persistent>
<q-layout <q-card style="min-width: 80%">
view="lHh lpr lFf" <DialogHeader
container tittle="ประวัติแก้ไขเครื่องราชอิสริยาภรณ์"
style="height: 500px; min-width: 80%" :close="() => (modalHistory = false)"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header>
<q-toolbar>
<DialogHeader
tittle="ประวัติแก้ไขเครื่องราชอิสริยาภรณ์"
:close="() => (modalHistory = false)"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 60vh" class="scroll">
<q-page class="q-pa-md"> <div class="row q-gutter-sm q-mb-sm">
<div class="row q-gutter-sm q-mb-sm"> <q-space />
<q-space /> <q-input
<q-input standout
standout
dense
v-model="filterHistory"
ref="filterRef"
outlined
placeholder="ค้นหา"
debounce="300"
>
<template v-slot:append>
<q-icon
v-if="filterHistory == ''"
name="search"
@click.stop.prevent="filterHistory = ''"
class="cursor-pointer"
/>
<q-icon
v-if="filterHistory"
name="cancel"
@click.stop.prevent="filterHistory = ''"
class="cursor-pointer"
/>
</template>
</q-input>
<q-select
v-model="visibleColumnsHistory"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="columnsHistory"
option-value="name"
options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
flat
bordered
v-model:pagination="historyPagination"
dense dense
:columns="columnsHistory" v-model="filterHistory"
:rows="rowsHistory" ref="filterRef"
:paging="true" outlined
:rows-per-page-options="[10, 25, 50, 100]" placeholder="ค้นหา"
:visible-columns="visibleColumnsHistory" debounce="300"
:filter="filterHistory"
> >
> <template v-slot:append>
<template v-slot:header="props"> <q-icon
<q-tr :props="props"> v-if="filterHistory == ''"
<q-th v-for="col in props.cols" :key="col.name" :props="props"> name="search"
<span class="text-weight-medium">{{ col.label }}</span> @click.stop.prevent="filterHistory = ''"
</q-th> class="cursor-pointer"
</q-tr> />
<q-icon
v-if="filterHistory"
name="cancel"
@click.stop.prevent="filterHistory = ''"
class="cursor-pointer"
/>
</template> </template>
<template v-slot:body="props"> </q-input>
<q-tr :props="props" class="cursor-pointer"> <q-select
<q-td v-for="col in props.cols" :key="col.id"> v-model="visibleColumnsHistory"
<div> multiple
{{ col.value ? col.value : "-" }} outlined
</div> dense
</q-td> options-dense
</q-tr> :display-value="$q.lang.table.columns"
</template> emit-value
</d-table> map-options
</q-page> :options="columnsHistory"
</q-page-container> option-value="name"
</q-layout> options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
flat
bordered
v-model:pagination="historyPagination"
dense
:columns="columnsHistory"
:rows="rowsHistory"
:paging="true"
:rows-per-page-options="[10, 25, 50, 100]"
:visible-columns="visibleColumnsHistory"
:filter="filterHistory"
>
>
<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-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols" :key="col.id">
<div>
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</q-card-section>
</q-card>
</q-dialog> </q-dialog>
</template> </template>

View file

@ -328,8 +328,8 @@ onMounted(async () => {
}); });
</script> </script>
<template> <template>
<div class="row items-center q-gutter-x-sm q-py-sm"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn color="teal-5" icon="add" flat round @click="onClickOpenDialog()" <q-btn dense color="primary" icon="add" flat round @click="onClickOpenDialog()"
><q-tooltip>เพมขอม</q-tooltip></q-btn ><q-tooltip>เพมขอม</q-tooltip></q-btn
> >
@ -517,226 +517,211 @@ onMounted(async () => {
</d-table> </d-table>
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 320px"
class="bg-white"
>
<q-form greedy @submit.prevent @validation-success="onSubmit"> <q-form greedy @submit.prevent @validation-success="onSubmit">
<q-header> <DialogHeader
<q-toolbar> :tittle="
<DialogHeader isEdit
:tittle=" ? 'แก้ไขข้อมูลประกาศเกียรติคุณ'
isEdit : 'เพิ่มข้อมูลประกาศเกียรติคุณ'
? 'แก้ไขข้อมูลประกาศเกียรติคุณ' "
: 'เพิ่มข้อมูลประกาศเกียรติคุณ' :close="clickClose"
" />
:close="clickClose" <q-separator color="grey-4" />
/> <q-card-section style="max-height: 55vh" class="scroll">
</q-toolbar> <div class="row col-12 q-col-gutter-sm">
<q-separator color="grey-4" /> <div class="row col-12 q-gutter-md q-py-sm text-grey-7">
</q-header> <q-radio
v-model="(declHonorForm.isDate as string)"
<q-separator /> dense
<q-page-container> checked-icon="task_alt"
<q-page class="q-pa-md"> unchecked-icon="panorama_fish_eye"
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> val="false"
<div class="row col-12 q-gutter-md q-py-sm text-grey-7"> label="ปี"
<q-radio />
v-model="(declHonorForm.isDate as string)" <q-radio
dense v-model="(declHonorForm.isDate as string)"
checked-icon="task_alt" checked-icon="task_alt"
unchecked-icon="panorama_fish_eye" unchecked-icon="panorama_fish_eye"
val="false" val="true"
label="ปี" label="วัน/เดือน/ปี"
/> dense
<q-radio />
v-model="(declHonorForm.isDate as string)"
checked-icon="task_alt"
unchecked-icon="panorama_fish_eye"
val="true"
label="วัน/เดือน/ปี"
dense
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
year-picker
v-model="issueDateYear"
week-start="0"
menu-class-name="modalfix"
:locale="'th'"
:enableTimePicker="false"
@update:modelValue="
(v:number) =>
(declHonorForm.issueDate = new Date(
`${v}-01-01T00:00:02.010+07:00`
))
"
v-if="declHonorForm.isDate === 'false'"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
outlined
hide-bottom-space
class="inputgreen"
:model-value="issueDateYear + 543"
:rules="[
(val:string) =>
!!val ||
`${'กรุณาเลือกปีที่ได้รับ'}`,
]"
:label="`${'ปีที่ได้รับ'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
<datepicker
autoApply
borderless
v-else
week-start="0"
menu-class-name="modalfix"
v-model="declHonorForm.issueDate"
:locale="'th'"
:enableTimePicker="false"
@update:modelValue="
(v: Date) =>
(issueDateYear = parseInt(
v.toString().slice(11, 15)
))
"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
dense
outlined
hide-bottom-space
for="inputDatereceive"
ref="dateReceivedRef"
class="inputgreen"
:model-value="date2Thai(declHonorForm.issueDate)"
:label="`${'วันที่ได้รับ'}`"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่ได้รับ'}`]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="declHonorForm.issuer"
:label="`${'ผู้มีอำนาจลงนาม'}`"
/>
</div>
<div class="col-12">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="declHonorForm.detail"
:label="`${'รายละเอียด'}`"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="declHonorForm.refCommandNo"
:label="`${'เลขที่คำสั่ง'}`"
>
<template v-slot:append>
<q-icon name="mdi-file" class="cursor-pointer" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
borderless
week-start="0"
menu-class-name="modalfix"
v-model="declHonorForm.refCommandDate"
:locale="'th'"
:enableTimePicker="false"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
dense
outlined
clearable
hide-bottom-space
class="inputgreen"
:model-value="
declHonorForm.refCommandDate == null
? null
: date2Thai(declHonorForm.refCommandDate)
"
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="declHonorForm.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
</div> </div>
</q-page> <div class="col-xs-6 col-sm-6 col-md-6">
</q-page-container> <datepicker
autoApply
<q-footer> year-picker
<q-separator color="grey-4" /> v-model="issueDateYear"
<q-toolbar class="fit row wrap justify-end items-start content-start"> week-start="0"
menu-class-name="modalfix"
:locale="'th'"
:enableTimePicker="false"
@update:modelValue="
(v:number) =>
(declHonorForm.issueDate = new Date(
`${v}-01-01T00:00:02.010+07:00`
))
"
v-if="declHonorForm.isDate === 'false'"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
outlined
hide-bottom-space
class="inputgreen"
:model-value="issueDateYear + 543"
:rules="[
(val:string) =>
!!val ||
`${'กรุณาเลือกปีที่ได้รับ'}`,
]"
:label="`${'ปีที่ได้รับ'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
<datepicker
autoApply
borderless
v-else
week-start="0"
menu-class-name="modalfix"
v-model="declHonorForm.issueDate"
:locale="'th'"
:enableTimePicker="false"
@update:modelValue="
(v: Date) =>
(issueDateYear = parseInt(
v.toString().slice(11, 15)
))
"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
dense
outlined
hide-bottom-space
for="inputDatereceive"
ref="dateReceivedRef"
class="inputgreen"
:model-value="date2Thai(declHonorForm.issueDate)"
:label="`${'วันที่ได้รับ'}`"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่ได้รับ'}`]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="declHonorForm.issuer"
:label="`${'ผู้มีอำนาจลงนาม'}`"
/>
</div>
<div class="col-12">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="declHonorForm.detail"
:label="`${'รายละเอียด'}`"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
class="inputgreen"
v-model="declHonorForm.refCommandNo"
:label="`${'เลขที่คำสั่ง'}`"
>
<template v-slot:append>
<q-icon name="mdi-file" class="cursor-pointer" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
autoApply
borderless
week-start="0"
menu-class-name="modalfix"
v-model="declHonorForm.refCommandDate"
:locale="'th'"
:enableTimePicker="false"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
dense
outlined
clearable
hide-bottom-space
class="inputgreen"
:model-value="
declHonorForm.refCommandDate == null
? null
: date2Thai(declHonorForm.refCommandDate)
"
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="declHonorForm.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
</div>
</q-card-section>
<q-separator color="grey-4" />
<q-card-actions align="right">
<q-btn <q-btn
dense dense
unelevated unelevated
@ -748,10 +733,9 @@ onMounted(async () => {
> >
<q-tooltip>นทกขอม</q-tooltip> <q-tooltip>นทกขอม</q-tooltip>
</q-btn> </q-btn>
</q-toolbar> </q-card-actions>
</q-footer>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="modalHistory" persistent> <q-dialog v-model="modalHistory" persistent>

View file

@ -397,8 +397,8 @@ onMounted(async () => {
}); });
</script> </script>
<template> <template>
<div class="row items-center q-gutter-x-sm q-py-sm"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn color="teal-5" icon="add" flat round @click="onClickOpenDialog()" <q-btn dense color="primary" icon="add" flat round @click="onClickOpenDialog()"
><q-tooltip>เพมขอม</q-tooltip></q-btn ><q-tooltip>เพมขอม</q-tooltip></q-btn
> >
@ -586,315 +586,288 @@ onMounted(async () => {
</d-table> </d-table>
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 350px"
class="bg-white"
>
<q-form greedy @submit.prevent @validation-success="onSubmit"> <q-form greedy @submit.prevent @validation-success="onSubmit">
<q-header> <DialogHeader
<q-toolbar> :tittle="
<DialogHeader isEdit
:tittle=" ? 'แก้ไขผลการประเมินการปฏิบัติราชการ'
isEdit : 'เพิ่มผลการประเมินการปฏิบัติราชการ'
? 'แก้ไขผลการประเมินการปฏิบัติราชการ' "
: 'เพิ่มผลการประเมินการปฏิบัติราชการ' :close="clickClose"
" />
:close="clickClose" <q-separator color="grey-4" />
/> <q-card-section style="max-height: 55vh" class="scroll">
</q-toolbar> <div class="row col-12 q-col-gutter-sm">
<q-separator color="grey-4" /> <div class="col-12">
</q-header> <datepicker
autoApply
<q-page-container> borderless
<q-page class="q-pa-md"> week-start="0"
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> menu-class-name="modalfix"
<div class="col-12"> v-model="resPerformForm.date"
<datepicker :locale="'th'"
autoApply :enableTimePicker="false"
borderless >
week-start="0" <template #year="{ year }">
menu-class-name="modalfix" {{ year + 543 }}
v-model="resPerformForm.date" </template>
:locale="'th'" <template #year-overlay-value="{ value }">
:enableTimePicker="false" {{ parseInt(value + 543) }}
> </template>
<template #year="{ year }"> <template #trigger>
{{ year + 543 }} <q-input
</template> dense
<template #year-overlay-value="{ value }"> outlined
{{ parseInt(value + 543) }} for="inputDatereceive"
</template> ref="dateReceivedRef"
<template #trigger> class="inputgreen"
<q-input hide-bottom-space
dense :model-value="date2Thai(resPerformForm.date as Date)"
outlined :label="`${'วันที่ได้รับ'}`"
for="inputDatereceive" :rules="[(val) => !!val || `${'กรุณาเลือกวันที่ได้รับ'}`]"
ref="dateReceivedRef" >
class="inputgreen" <template v-slot:prepend>
hide-bottom-space <q-icon
:model-value="date2Thai(resPerformForm.date as Date)" name="event"
:label="`${'วันที่ได้รับ'}`" class="cursor-pointer"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่ได้รับ'}`]" color="primary"
> />
<template v-slot:prepend> </template>
<q-icon </q-input>
name="event" </template>
class="cursor-pointer" </datepicker>
color="primary"
/>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point1Total"
input-class="text-right "
:label="`${'ส่วนที่1 (คะแนน)'}`"
:rules="[(val) => !!val || `${'กรุณากรอกส่วนที่1 (คะแนน)'}`]"
@update:model-value="
resPerformForm.point1Total > 100
? (resPerformForm.point1Total = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point1"
input-class="text-right"
:label="`${'ผลประเมินส่วนที่1 (คะแนน)'}`"
:rules="[
(val) => !!val || `${'กรุณากรอกผลประเมินส่วนที่1 (คะแนน)'}`,
]"
@update:model-value="
resPerformForm.point1 > 100
? (resPerformForm.point1 = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point2Total"
input-class="text-right"
:label="`${'ส่วนที่2 (คะแนน)'}`"
:rules="[(val) => !!val || `${'กรุณากรอกส่วนที่2 (คะแนน)'}`]"
@update:model-value="
resPerformForm.point2Total > 100
? (resPerformForm.point2Total = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point2"
input-class="text-right"
:label="`${'ผลประเมินส่วนที่2 (คะแนน)'}`"
:rules="[
(val) => !!val || `${'กรุณากรอกผลประเมินส่วนที่2 (คะแนน)'}`,
]"
@update:model-value="
resPerformForm.point2 > 100
? (resPerformForm.point2 = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.pointSumTotal"
input-class="text-right"
:label="`${'ผลรวม (คะแนน)'}`"
:rules="[(val) => !!val || `${'กรุณากรอกผลรวม (คะแนน)'}`]"
@update:model-value="
resPerformForm.pointSumTotal > 100
? (resPerformForm.pointSumTotal = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
v-model="resPerformForm.pointSum"
class="inputgreen"
input-class="text-right"
:label="`${'ผลประเมินรวม (คะแนน)'}`"
:rules="[
(val) => !!val || `${'กรุณากรอกผลประเมินรวม (คะแนน)'}`,
]"
@update:model-value="
resPerformForm.pointSum > 100
? (resPerformForm.pointSum = 100)
: ''
"
/>
</div>
<div class="text-subtitle2 col-12 row items-center">
<q-space></q-space>
ผลการประเม:
<div class="text-bold items-center q-px-sm">
{{ textPoint(resPerformForm.pointSum) }}
</div>
{{ textRangePoint(resPerformForm.pointSum) }}
</div>
</div> </div>
</q-page> <div class="col-xs-6 col-sm-6 col-md-6">
</q-page-container> <q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point1Total"
input-class="text-right "
:label="`${'ส่วนที่1 (คะแนน)'}`"
:rules="[(val) => !!val || `${'กรุณากรอกส่วนที่1 (คะแนน)'}`]"
@update:model-value="
resPerformForm.point1Total > 100
? (resPerformForm.point1Total = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point1"
input-class="text-right"
:label="`${'ผลประเมินส่วนที่1 (คะแนน)'}`"
:rules="[
(val) => !!val || `${'กรุณากรอกผลประเมินส่วนที่1 (คะแนน)'}`,
]"
@update:model-value="
resPerformForm.point1 > 100
? (resPerformForm.point1 = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point2Total"
input-class="text-right"
:label="`${'ส่วนที่2 (คะแนน)'}`"
:rules="[(val) => !!val || `${'กรุณากรอกส่วนที่2 (คะแนน)'}`]"
@update:model-value="
resPerformForm.point2Total > 100
? (resPerformForm.point2Total = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.point2"
input-class="text-right"
:label="`${'ผลประเมินส่วนที่2 (คะแนน)'}`"
:rules="[
(val) => !!val || `${'กรุณากรอกผลประเมินส่วนที่2 (คะแนน)'}`,
]"
@update:model-value="
resPerformForm.point2 > 100
? (resPerformForm.point2 = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
class="inputgreen"
v-model="resPerformForm.pointSumTotal"
input-class="text-right"
:label="`${'ผลรวม (คะแนน)'}`"
:rules="[(val) => !!val || `${'กรุณากรอกผลรวม (คะแนน)'}`]"
@update:model-value="
resPerformForm.pointSumTotal > 100
? (resPerformForm.pointSumTotal = 100)
: ''
"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
dense
outlined
lazy-rules
hide-bottom-space
mask="###"
v-model="resPerformForm.pointSum"
class="inputgreen"
input-class="text-right"
:label="`${'ผลประเมินรวม (คะแนน)'}`"
:rules="[
(val) => !!val || `${'กรุณากรอกผลประเมินรวม (คะแนน)'}`,
]"
@update:model-value="
resPerformForm.pointSum > 100
? (resPerformForm.pointSum = 100)
: ''
"
/>
</div>
<div class="col-12 row items-center q-pt-md justify-center">
ผลการประเม:
<div class="text-bold items-center q-px-sm">
{{ textPoint(resPerformForm.pointSum) }}
</div>
{{ textRangePoint(resPerformForm.pointSum) }}
</div>
</div>
</q-card-section>
<q-separator /> <q-separator />
<q-footer> <q-card-actions align="right">
<q-separator color="grey-4" /> <q-btn
<q-toolbar class="fit row wrap justify-end items-start content-start"> dense
<q-btn unelevated
dense label="บันทึก"
unelevated id="onSubmit"
label="บันทึก" type="submit"
id="onSubmit" color="public"
type="submit" class="q-px-md"
color="public" >
class="q-px-md" <q-tooltip>นทกขอม</q-tooltip>
> </q-btn>
<q-tooltip>นทกขอม</q-tooltip> </q-card-actions>
</q-btn>
</q-toolbar>
</q-footer>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="modalHistory" persistent> <q-dialog v-model="modalHistory" persistent>
<q-layout <q-card style="min-width: 80%">
view="lHh lpr lFf" <DialogHeader
container tittle="ประวัติแก้ไขผลการประเมินการปฏิบัติราชการ"
style="height: 500px; min-width: 80%" :close="() => (modalHistory = false)"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header> <q-card-section style="max-height: 60vh" class="scroll">
<q-toolbar> <div class="row q-gutter-sm q-mb-sm">
<DialogHeader <q-space />
tittle="ประวัติแก้ไขผลการประเมินการปฏิบัติราชการ" <q-input
:close="() => (modalHistory = false)" standout
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container>
<q-page class="q-pa-md">
<div class="row q-gutter-sm q-mb-sm">
<q-space />
<q-input
standout
dense
v-model="filterHistory"
ref="filterRef"
outlined
placeholder="ค้นหา"
debounce="300"
>
<template v-slot:append>
<q-icon
v-if="filterHistory == ''"
name="search"
@click.stop.prevent="filterHistory = ''"
class="cursor-pointer"
/>
<q-icon
v-if="filterHistory"
name="cancel"
@click.stop.prevent="filterHistory = ''"
class="cursor-pointer"
/>
</template>
</q-input>
<q-select
v-model="visibleColumnsHistory"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="columnsHistory"
option-value="name"
options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
flat
bordered
dense dense
:columns="columnsHistory" v-model="filterHistory"
v-model:pagination="historyPagination" ref="filterRef"
:rows="rowsHistory" outlined
:paging="true" placeholder="ค้นหา"
:rows-per-page-options="[10, 25, 50, 100]" debounce="300"
:visible-columns="visibleColumnsHistory"
:filter="filterHistory"
> >
> <template v-slot:append>
<template v-slot:header="props"> <q-icon
<q-tr :props="props"> v-if="filterHistory == ''"
<q-th v-for="col in props.cols" :key="col.name" :props="props"> name="search"
<span class="text-weight-medium">{{ col.label }}</span> @click.stop.prevent="filterHistory = ''"
</q-th> class="cursor-pointer"
</q-tr> />
<q-icon
v-if="filterHistory"
name="cancel"
@click.stop.prevent="filterHistory = ''"
class="cursor-pointer"
/>
</template> </template>
<template v-slot:body="props"> </q-input>
<q-tr :props="props" class="cursor-pointer"> <q-select
<q-td v-for="col in props.cols" :key="col.id"> v-model="visibleColumnsHistory"
<div> multiple
{{ col.value ? col.value : "-" }} outlined
</div> dense
</q-td> options-dense
</q-tr> :display-value="$q.lang.table.columns"
</template> emit-value
</d-table> map-options
</q-page> :options="columnsHistory"
</q-page-container> option-value="name"
</q-layout> options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
flat
bordered
dense
:columns="columnsHistory"
v-model:pagination="historyPagination"
:rows="rowsHistory"
:paging="true"
:rows-per-page-options="[10, 25, 50, 100]"
:visible-columns="visibleColumnsHistory"
:filter="filterHistory"
>
>
<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-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols" :key="col.id">
<div>
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</q-card-section>
</q-card>
</q-dialog> </q-dialog>
</template> </template>

View file

@ -191,7 +191,7 @@ watch(modal, (status) => {
/> />
<q-separator color="grey-4" /> <q-separator color="grey-4" />
<q-card-section style="max-height: 50vh" class="scroll"> <q-card-section style="max-height: 60vh" class="scroll">
<div class="row q-gutter-sm q-mb-sm"> <div class="row q-gutter-sm q-mb-sm">
<q-space /> <q-space />
<q-input <q-input

View file

@ -220,7 +220,7 @@ watch(modal, (status) => {
:close="() => (modal = false)" :close="() => (modal = false)"
/> />
<q-separator color="grey-4" /> <q-separator color="grey-4" />
<q-card-section style="max-height: 50vh" class="scroll"> <q-card-section style="max-height: 60vh" class="scroll">
<div class="row q-gutter-sm q-mb-sm"> <div class="row q-gutter-sm q-mb-sm">
<q-space /> <q-space />
<q-input <q-input

View file

@ -193,7 +193,7 @@ watch(modal, (status) => {
tittle="ประวัติแก้ไขปฏิบัติราชการพิเศษ" tittle="ประวัติแก้ไขปฏิบัติราชการพิเศษ"
:close="() => (modal = false)" :close="() => (modal = false)"
/> />
<q-card-section style="max-height: 50vh" class="scroll"> <q-card-section style="max-height: 60vh" class="scroll">
<div class="row q-gutter-sm q-mb-sm"> <div class="row q-gutter-sm q-mb-sm">
<q-space /> <q-space />
<q-input <q-input

View file

@ -209,8 +209,8 @@ onMounted(() => {
}); });
</script> </script>
<template> <template>
<div class="row items-center q-gutter-x-sm q-py-sm"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn color="primary" icon="add" flat round @click="openDialogAdd()" <q-btn dense color="primary" icon="add" flat round @click="openDialogAdd()"
><q-tooltip>เพมขอม</q-tooltip></q-btn ><q-tooltip>เพมขอม</q-tooltip></q-btn
> >
@ -393,97 +393,83 @@ onMounted(() => {
<!-- dialog add edit --> <!-- dialog add edit -->
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card style="min-width: 70%">
view="lHh lpr lFf"
container
style="height: 200px"
class="bg-white"
>
<q-form greedy @submit.prevent @validation-success="validateForm"> <q-form greedy @submit.prevent @validation-success="validateForm">
<q-header> <DialogHeader
<q-toolbar> :tittle="edit ? 'แก้ไขข้อมูลอื่นๆ' : 'เพิ่มข้อมูลอื่นๆ'"
<DialogHeader :close="closeDialog"
:tittle="edit ? 'แก้ไขข้อมูลอื่นๆ' : 'เพิ่มข้อมูลอื่นๆ'" />
:close="closeDialog"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container>
<q-page class="q-pa-md">
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
menu-class-name="modalfix"
v-model="date"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
ref="dateRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
:model-value="date2Thai(date)"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่'}`]"
hide-bottom-space
:label="`${'วันที่'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
:style="'color: var(--q-primary)'"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
ref="detailRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="detail"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
</div>
</q-page>
</q-page-container>
<q-separator /> <q-separator />
<q-footer>
<q-separator color="grey-4" /> <q-card-section style="max-height: 60vh" class="scroll">
<q-toolbar class="fit row wrap justify-end items-start content-start"> <div class="row col-12 q-col-gutter-sm">
<q-btn <div class="col-xs-6 col-sm-3 col-md-3">
dense <datepicker
unelevated menu-class-name="modalfix"
label="บันทึก" v-model="date"
id="onSubmit" :locale="'th'"
type="submit" autoApply
color="public" :enableTimePicker="false"
class="q-px-md" week-start="0"
> >
<q-tooltip>นทกขอม</q-tooltip> <template #year="{ year }">{{ year + 543 }}</template>
</q-btn> <template #year-overlay-value="{ value }">{{
</q-toolbar> parseInt(value + 543)
</q-footer> }}</template>
<template #trigger>
<q-input
ref="dateRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
:model-value="date2Thai(date)"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่'}`]"
hide-bottom-space
:label="`${'วันที่'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
:style="'color: var(--q-primary)'"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-9 col-md-9">
<q-input
ref="detailRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="detail"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right">
<q-btn
dense
unelevated
label="บันทึก"
id="onSubmit"
type="submit"
color="public"
class="q-px-md"
>
<q-tooltip>นทกขอม</q-tooltip>
</q-btn>
</q-card-actions>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<DialogHistory v-model:modal="modalHistory" v-model:id="id" /> <DialogHistory v-model:modal="modalHistory" v-model:id="id" />

View file

@ -129,97 +129,86 @@ watch(modal, (status) => {
<template> <template>
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card style="min-width: 80%">
view="lHh lpr lFf" <DialogHeader
container tittle="ประวัติแก้ไขอื่นๆ"
style="height: 500px; min-width: 80%" :close="() => (modal = false)"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header>
<q-toolbar>
<DialogHeader
tittle="ประวัติแก้ไขอื่นๆ"
:close="() => (modal = false)"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 60vh" class="scroll">
<q-page class="q-pa-md"> <div class="row q-gutter-sm q-mb-sm">
<div class="row q-gutter-sm q-mb-sm"> <q-space />
<q-space /> <q-input
<q-input standout
standout
dense
v-model="filterKeyword"
ref="filterRef"
outlined
placeholder="ค้นหา"
debounce="300"
>
<template v-slot:append>
<q-icon
v-if="filterKeyword == ''"
name="search"
@click.stop.prevent="filterKeyword = ''"
class="cursor-pointer"
/>
<q-icon
v-if="filterKeyword"
name="cancel"
@click.stop.prevent="filterKeyword = ''"
class="cursor-pointer"
/>
</template>
</q-input>
<q-select
v-model="visibleColumns"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="columns"
option-value="name"
options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
flat
bordered
dense dense
:columns="columns" v-model="filterKeyword"
:rows="rows" ref="filterRef"
:paging="true" outlined
:rows-per-page-options="[10, 25, 50, 100]" placeholder="ค้นหา"
:visible-columns="visibleColumns" debounce="300"
:filter="filterKeyword"
> >
> <template v-slot:append>
<template v-slot:header="props"> <q-icon
<q-tr :props="props"> v-if="filterKeyword == ''"
<q-th v-for="col in props.cols" :key="col.name" :props="props"> name="search"
<span class="text-weight-medium">{{ col.label }}</span> @click.stop.prevent="filterKeyword = ''"
</q-th> class="cursor-pointer"
</q-tr> />
<q-icon
v-if="filterKeyword"
name="cancel"
@click.stop.prevent="filterKeyword = ''"
class="cursor-pointer"
/>
</template> </template>
<template v-slot:body="props"> </q-input>
<q-tr :props="props" class="cursor-pointer"> <q-select
<q-td v-for="col in props.cols" :key="col.id"> v-model="visibleColumns"
<div> multiple
{{ col.value ? col.value : "-" }} outlined
</div> dense
</q-td> options-dense
</q-tr> :display-value="$q.lang.table.columns"
</template> emit-value
</d-table> map-options
</q-page> :options="columns"
</q-page-container> option-value="name"
</q-layout> options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
flat
bordered
dense
:columns="columns"
:rows="rows"
:paging="true"
:rows-per-page-options="[10, 25, 50, 100]"
:visible-columns="visibleColumns"
:filter="filterKeyword"
>
>
<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-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols" :key="col.id">
<div>
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</q-card-section>
</q-card>
</q-dialog> </q-dialog>
</template> </template>

View file

@ -171,96 +171,88 @@ onMounted(() => {
}); });
</script> </script>
<template> <template>
<div class="col-sm-12 col-md-3"> <q-card bordered class="row col-12" style="border: 1px solid #d6dee1">
<div flat class="q-pa-none"> <div class="col-12 text-weight-medium bg-grey-1 q-py-sm q-px-md">
<div class="col-12 row q-col-gutter-md"> ปโหลดไฟลเอกสารหลกฐาน
<div class="row col-12"> </div>
<q-card bordered class="row col-12" style="border: 1px solid #d6dee1"> <div class="col-12"><q-separator /></div>
<div class="col-12 text-weight-medium bg-grey-1 q-py-sm q-px-md"> <div class="row col-12 q-col-gutter-y-sm q-pa-sm">
ปโหลดไฟลเอกสารหลกฐาน <div class="col-12 row">
<q-file
for="inputFiles"
class="col-12"
outlined
dense
v-model="documentFile"
label="ไฟล์เอกสารหลักฐาน"
hide-bottom-space
accept=".pdf,.xlsx,.docx,.png,.jpg"
clearable
>
<template v-slot:prepend>
<q-icon name="attach_file" color="primary" />
</template>
<template v-slot:after>
<q-btn
size="14px"
v-if="documentFile"
flat
round
dense
color="add"
icon="mdi-upload"
@click="clickUpload(documentFile)"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</template>
</q-file>
<!-- <div class="col-1 self-center" v-if="formData.documentFile"></div> -->
</div>
<div v-if="fileList.length > 0" class="col-xs-12 row">
<q-list class="full-width rounded-borders" bordered separator>
<q-item
clickable
v-ripple
v-for="data in fileList"
:key="data.id"
class="items-center"
>
<q-item-section>{{ data.fileName }}</q-item-section>
<q-space />
<div>
<q-btn
size="12px"
flat
round
dense
color="blue"
icon="mdi-download"
@click="downloadFile(data.fileName)"
><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn
>
<q-btn
size="12px"
flat
round
dense
color="red"
class="q-ml-sm"
icon="mdi-delete-outline"
@click="deleteFile(data.fileName)"
><q-tooltip>ลบไฟล</q-tooltip></q-btn
>
</div> </div>
<div class="col-12"><q-separator /></div> </q-item>
<div class="row col-12 q-col-gutter-y-sm q-pa-sm"> </q-list>
<div class="col-12 row"> </div>
<q-file
for="inputFiles"
class="col-12"
outlined
dense
v-model="documentFile"
label="ไฟล์เอกสารหลักฐาน"
hide-bottom-space
accept=".pdf,.xlsx,.docx,.png,.jpg"
clearable
>
<template v-slot:prepend>
<q-icon name="attach_file" color="primary" />
</template>
<template v-slot:after>
<q-btn
size="14px"
v-if="documentFile"
flat
round
dense
color="add"
icon="mdi-upload"
@click="clickUpload(documentFile)"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</template>
</q-file>
<!-- <div class="col-1 self-center" v-if="formData.documentFile"></div> --> <div class="col-12" v-else>
</div> <q-card class="q-pa-md" bordered> ไมรายการเอกสาร </q-card>
<div v-if="fileList.length > 0" class="col-xs-12 row">
<q-list class="full-width rounded-borders" bordered separator>
<q-item
clickable
v-ripple
v-for="data in fileList"
:key="data.id"
class="items-center"
>
<q-item-section>{{ data.fileName }}</q-item-section>
<q-space />
<div>
<q-btn
size="12px"
flat
round
dense
color="blue"
icon="mdi-download"
@click="downloadFile(data.fileName)"
><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn
>
<q-btn
size="12px"
flat
round
dense
color="red"
class="q-ml-sm"
icon="mdi-delete-outline"
@click="deleteFile(data.fileName)"
><q-tooltip>ลบไฟล</q-tooltip></q-btn
>
</div>
</q-item>
</q-list>
</div>
<div class="col-12" v-else>
<q-card class="q-pa-md" bordered> ไมรายการเอกสาร </q-card>
</div>
</div>
</q-card>
</div>
</div> </div>
</div> </div>
</div> </q-card>
</template> </template>
<style scoped></style> <style scoped></style>

View file

@ -396,8 +396,8 @@ onMounted(() => {
}); });
</script> </script>
<template> <template>
<q-toolbar style="padding: 0px" class="text-primary q-mb-xs"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn flat round dense icon="add" @click="onClickOpenDialog()"> <q-btn flat color="primary" round dense icon="add" @click="onClickOpenDialog()">
<q-tooltip>เพมขอม</q-tooltip> <q-tooltip>เพมขอม</q-tooltip>
</q-btn> </q-btn>
<q-space /> <q-space />
@ -433,7 +433,7 @@ onMounted(() => {
options-cover options-cover
style="min-width: 150px" style="min-width: 150px"
/> />
</q-toolbar> </div>
<d-table <d-table
ref="table" ref="table"
row-key="id" row-key="id"
@ -524,345 +524,329 @@ onMounted(() => {
</d-table> </d-table>
<q-dialog v-model="modalDialogSalary" persistent> <q-dialog v-model="modalDialogSalary" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 90vh; min-width: 80%"
class="bg-white"
>
<q-form greedy @submit.prevent @validation-success="onSubmit"> <q-form greedy @submit.prevent @validation-success="onSubmit">
<q-header> <DialogHeader
<q-toolbar> :tittle="
<DialogHeader isStatusEdit ? 'แก้ไขตำแหน่งเงินเดือน' : 'เพิ่มตำแหน่งเงินเดือน'
:tittle=" "
isStatusEdit ? 'แก้ไขตำแหน่งเงินเดือน' : 'เพิ่มตำแหน่งเงินเดือน' :close="onClickCloseDialog"
" />
:close="onClickCloseDialog" <q-separator color="grey-4" />
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 55vh" class="scroll">
<q-page class="q-pa-md"> <div class="row col-12 q-col-gutter-sm">
<div class="row col-12 q-col-gutter-sm"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-card flat bordered class="row fit q-pa-sm q-col-gutter-sm"> <datepicker
<div class="col-xs-6 col-sm-6 col-md-6"> v-model="formDataSalary.date"
<datepicker :locale="'th'"
v-model="formDataSalary.date" autoApply
:locale="'th'" :enableTimePicker="false"
autoApply week-start="0"
:enableTimePicker="false" >
week-start="0" <template #year="{ year }">{{ year + 543 }}</template>
> <template #year-overlay-value="{ value }">{{
<template #year="{ year }">{{ year + 543 }}</template> parseInt(value + 543)
<template #year-overlay-value="{ value }">{{ }}</template>
parseInt(value + 543) <template #trigger>
}}</template> <q-input
<template #trigger> outlined
<q-input dense
outlined borderless
dense :model-value="date2Thai(formDataSalary.date)"
borderless :rules="[
:model-value="date2Thai(formDataSalary.date)" (val: string) =>
:rules="[ !!val ||
(val: string) => `${'กรุณาเลือก วัน/เดือน/ปี'}`,
!!val || ]"
`${'กรุณาเลือก วัน/เดือน/ปี'}`, :label="`${'วัน/เดือน/ปี'}`"
]" hide-bottom-space
:label="`${'วัน/เดือน/ปี'}`" >
hide-bottom-space <template v-slot:prepend>
> <q-icon
<template v-slot:prepend> name="event"
<q-icon color="primary"
name="event" class="cursor-pointer"
color="primary" >
class="cursor-pointer" </q-icon>
> </template>
</q-icon> </q-input>
</template> </template>
</q-input> </datepicker>
</template> </div>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-input <q-input
ref="posNoRef" ref="posNoRef"
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.posNo"
hide-bottom-space
:label="`${'เลขที่ตำแหน่ง'}`"
:rules="[(val: string) => !!val || `${'กรุณากรอกเลขที่ตำแหน่ง'}`]"
>
</q-input>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-select
ref="templatePosRef"
outlined
dense
lazy-rules
borderless
clearable
v-model="formDataSalary.templatePos"
:label="`${'ต้นแบบ (template) ตำแหน่ง'}`"
option-label="name"
:options="posNoOptions"
option-value="name"
hide-bottom-space
emit-value
use-input
input-debounce="0"
@update:modelValue="updatePos"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'pos'
)"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
ref="positionRef"
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.position"
:label="`${'ตำแหน่ง'}`"
type="textarea"
hide-bottom-space
:rules="[(val: string) => !!val || `${'กรุณากรอกตำแหน่ง'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
outlined
dense
lazy-rules
v-model="formDataSalary.positionLine"
hide-bottom-space
:label="`${'สายงาน'}`"
/>
<!-- <q-select
outlined outlined
dense dense
lazy-rules lazy-rules
borderless borderless
v-model="formDataSalary.posNo"
hide-bottom-space
:label="`${'เลขที่ตำแหน่ง'}`"
:rules="[(val: string) => !!val || `${'กรุณากรอกเลขที่ตำแหน่ง'}`]"
>
</q-input>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-select
ref="templatePosRef"
outlined
dense
lazy-rules
borderless
clearable
v-model="formDataSalary.templatePos"
:label="`${'ต้นแบบ (template) ตำแหน่ง'}`"
option-label="name"
:options="posNoOptions"
option-value="name"
hide-bottom-space
emit-value
use-input
input-debounce="0"
@update:modelValue="updatePos"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'pos'
)"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
ref="positionRef"
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.position"
:label="`${'ตำแหน่ง'}`"
type="textarea"
hide-bottom-space
:rules="[(val: string) => !!val || `${'กรุณากรอกตำแหน่ง'}`]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
outlined
dense
lazy-rules
v-model="formDataSalary.positionLine" v-model="formDataSalary.positionLine"
hide-bottom-space
:label="`${'สายงาน'}`" :label="`${'สายงาน'}`"
/>
<!-- <q-select
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.positionLine"
:label="`${'สายงาน'}`"
emit-value
map-options
option-label="name"
:options="positionLineOptions"
option-value="id"
hide-bottom-space
use-input
input-debounce="0"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'positionLine'
)"
/> -->
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
outlined
dense
lazy-rules
v-model="formDataSalary.positionPathSide"
hide-bottom-space
:label="`${'ด้าน/สาขา'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.positionExecutive"
hide-bottom-space
:label="`${'ตำแหน่งทางการบริหาร'}`"
>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-select
ref="positionType Ref"
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.positionType"
:label="`${'ตำแหน่งประเภท'}`"
emit-value emit-value
map-options map-options
option-label="name" option-label="name"
:options="positionLineOptions" :options="posTypeOptions"
option-value="id" option-value="name"
hide-bottom-space
use-input
input-debounce="0"
@update:model-value="updateSelectType"
:rules="[(val: string) => !!val || `${'กรุณาเลือกตำแหน่งประเภท'}`]"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'posType'
)"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-select
ref="positionLevel Ref"
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.positionLevel"
:rules="[(val: string) => !!val || `${'กรุณาเลือกระดับตำแหน่ง'}`]"
:label="`${'ระดับตำแหน่ง'}`"
emit-value
map-options
option-label="name"
:options="posLevelOption"
option-value="name"
hide-bottom-space hide-bottom-space
use-input use-input
input-debounce="0" input-debounce="0"
@filter="(inputValue: any, @filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'positionLine' doneFn: Function) => filterSelector(inputValue, doneFn, 'posLevel'
)" )"
/> --> />
</div> </div>
<div class="col-md-4"></div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
ref="salaryRef"
dense
outlined
v-model="formDataSalary.salary"
label="เงินเดือน"
mask="###,###,###,###"
reverse-fill-mask
:rules="[(val) => !!val || `${'กรุณากรอกเงินเดือน'}`]"
lazy-rules
hide-bottom-space
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4"> <div class="col-xs-6 col-sm-6 col-md-4">
<q-input <q-input
outlined ref="amountRef"
dense dense
lazy-rules outlined
v-model="formDataSalary.positionPathSide" v-model="formDataSalary.salaryPos"
hide-bottom-space :rules="[
:label="`${'ด้าน/สาขา'}`" (val) => !!val || `${'กรุณากรอกเงินประจำตำแหน่ง'}`,
/> ]"
</div> label="เงินประจำตำแหน่ง"
<div class="col-xs-6 col-sm-6 col-md-4"> mask="###,###,###,###"
<q-input reverse-fill-mask
outlined lazy-rules
dense hide-bottom-space
lazy-rules />
borderless </div>
v-model="formDataSalary.positionExecutive" <div class="col-xs-6 col-sm-6 col-md-4">
hide-bottom-space <q-input
:label="`${'ตำแหน่งทางการบริหาร'}`" ref="amountRef"
> dense
</q-input> outlined
</div> v-model="formDataSalary.salaryCompensation"
label="เงินค่าตอบแทนรายเดือน"
mask="###,###,###,###"
reverse-fill-mask
lazy-rules
hide-bottom-space
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4"> <div class="col-xs-6 col-sm-6 col-md-12">
<q-select <q-input
ref="positionType Ref" outlined
outlined dense
dense lazy-rules
lazy-rules borderless
borderless v-model="formDataSalary.refCommandNo"
v-model="formDataSalary.positionType" hide-bottom-space
:label="`${'ตำแหน่งประเภท'}`" :label="`${'เลขที่คำสั่ง'}`"
emit-value mask="#####################"
map-options >
option-label="name" <!-- :rules="[(val: string) => !!val || `${'กรุณากรอกเลขที่คำสั่ง'}`]" -->
:options="posTypeOptions" </q-input>
option-value="name" </div>
hide-bottom-space
use-input <div class="col-xs-12 col-sm-12 col-md-12">
input-debounce="0" <q-select
@update:model-value="updateSelectType" ref="templateDocRef"
:rules="[(val: string) => !!val || `${'กรุณาเลือกตำแหน่งประเภท'}`]" outlined
@filter="(inputValue: any, dense
doneFn: Function) => filterSelector(inputValue, doneFn, 'posType' lazy-rules
borderless
clearable
v-model="formDataSalary.templateDoc"
:label="`${'ต้นแบบ (template) เอกสารอ้างอิง'}`"
option-label="name"
:options="docOption"
option-value="name"
emit-value
hide-bottom-space
use-input
input-debounce="0"
@update:modelValue="updateDoc"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'doc'
)" )"
/> />
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-4"> <div class="col-xs-12 col-sm-12 col-md-12">
<q-select <q-input
ref="positionLevel Ref" ref="docRef"
outlined outlined
dense dense
lazy-rules lazy-rules
borderless borderless
v-model="formDataSalary.positionLevel" v-model="formDataSalary.doc"
:rules="[(val: string) => !!val || `${'กรุณาเลือกระดับตำแหน่ง'}`]" :label="`${'เอกสารอ้างอิง'}`"
:label="`${'ระดับตำแหน่ง'}`" type="textarea"
emit-value hide-bottom-space
map-options :rules="[(val: number) => !!val || `${'กรุณากรอกเอกสารอ้างอิง'}`]"
option-label="name" />
:options="posLevelOption" </div>
option-value="name" </div>
hide-bottom-space </q-card-section>
use-input
input-debounce="0"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'posLevel'
)"
/>
</div>
<div class="col-md-4"></div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
ref="salaryRef"
dense
outlined
v-model="formDataSalary.salary"
label="เงินเดือน"
mask="###,###,###,###"
reverse-fill-mask
:rules="[(val) => !!val || `${'กรุณากรอกเงินเดือน'}`]"
lazy-rules
hide-bottom-space
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
ref="amountRef"
dense
outlined
v-model="formDataSalary.salaryPos"
:rules="[
(val) => !!val || `${'กรุณากรอกเงินประจำตำแหน่ง'}`,
]"
label="เงินประจำตำแหน่ง"
mask="###,###,###,###"
reverse-fill-mask
lazy-rules
hide-bottom-space
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-4">
<q-input
ref="amountRef"
dense
outlined
v-model="formDataSalary.salaryCompensation"
label="เงินค่าตอบแทนรายเดือน"
mask="###,###,###,###"
reverse-fill-mask
lazy-rules
hide-bottom-space
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-12">
<q-input
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.refCommandNo"
hide-bottom-space
:label="`${'เลขที่คำสั่ง'}`"
mask="#####################"
>
<!-- :rules="[(val: string) => !!val || `${'กรุณากรอกเลขที่คำสั่ง'}`]" -->
</q-input>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-select
ref="templateDocRef"
outlined
dense
lazy-rules
borderless
clearable
v-model="formDataSalary.templateDoc"
:label="`${'ต้นแบบ (template) เอกสารอ้างอิง'}`"
option-label="name"
:options="docOption"
option-value="name"
emit-value
hide-bottom-space
use-input
input-debounce="0"
@update:modelValue="updateDoc"
@filter="(inputValue: any,
doneFn: Function) => filterSelector(inputValue, doneFn, 'doc'
)"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
ref="docRef"
outlined
dense
lazy-rules
borderless
v-model="formDataSalary.doc"
:label="`${'เอกสารอ้างอิง'}`"
type="textarea"
hide-bottom-space
:rules="[(val: number) => !!val || `${'กรุณากรอกเอกสารอ้างอิง'}`]"
/>
</div>
</q-card>
</div>
</q-page>
</q-page-container>
<q-separator /> <q-separator />
<q-footer> <q-card-actions align="right">
<q-separator color="grey-4" /> <q-btn
<q-toolbar class="fit row wrap justify-end items-start content-start"> dense
<q-btn unelevated
dense label="บันทึก"
unelevated id="onSubmit"
label="บันทึก" type="submit"
id="onSubmit" color="public"
type="submit" class="q-px-md"
color="public" >
class="q-px-md" <q-tooltip>นทกขอม</q-tooltip>
> </q-btn>
<q-tooltip>นทกขอม</q-tooltip> </q-card-actions>
</q-btn>
</q-toolbar>
</q-footer>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<DialogHistory v-model:modal="modalHistory" v-model:salaryId="salaryId" /> <DialogHistory v-model:modal="modalHistory" v-model:salaryId="salaryId" />

View file

@ -248,94 +248,81 @@ watch(
</script> </script>
<template> <template>
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card style="min-width: 80%">
view="lHh lpr lFf" <DialogHeader
container :tittle="'ประวัติแก้ไขตำแหน่ง/เงินเดือน'"
style="height: 500px; min-width: 80%" :close="closeDialog"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header> <q-card-section style="max-height: 60vh" class="scroll">
<q-toolbar> <div class="row q-gutter-sm q-mb-sm">
<DialogHeader <q-space />
:tittle="'ประวัติแก้ไขตำแหน่ง/เงินเดือน'" <q-input
:close="closeDialog"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container>
<q-page class="q-pa-md">
<q-toolbar style="padding: 0px" class="text-primary">
<q-space />
<q-input
dense
outlined
v-model="keyword"
label="ค้นหา"
class="q-mr-sm"
>
<template v-slot:append>
<q-icon v-if="keyword === ''" name="search" />
<q-icon
v-else
name="clear"
class="cursor-pointer"
@click="keyword = ''"
/>
</template>
</q-input>
<q-select
v-model="visibleColumns"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="columns"
option-value="name"
options-cover
style="min-width: 150px"
/>
</q-toolbar>
<d-table
ref="table"
row-key="id"
flat
bordered
dense dense
:filter="keyword" outlined
:columns="columns" v-model="keyword"
:rows="rows" label="ค้นหา"
:paging="true" class="q-mr-sm"
v-model:pagination="pagination"
:rows-per-page-options="[10, 20, 50, 100]"
:visible-columns="visibleColumns"
> >
<template v-slot:header="props"> <template v-slot:append>
<q-tr :props="props"> <q-icon v-if="keyword === ''" name="search" />
<q-th v-for="col in props.cols" :key="col.name" :props="props"> <q-icon
<span class="text-weight-medium">{{ col.label }}</span> v-else
</q-th> name="clear"
</q-tr> class="cursor-pointer"
@click="keyword = ''"
/>
</template> </template>
<template v-slot:body="props"> </q-input>
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols"> <q-select
<div class="table_ellipsis"> v-model="visibleColumns"
{{ col.value ? col.value : "-" }} multiple
</div> outlined
</q-td> dense
</q-tr> options-dense
</template> :display-value="$q.lang.table.columns"
</d-table> emit-value
</q-page> map-options
</q-page-container> :options="columns"
</q-layout> option-value="name"
options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
row-key="id"
flat
bordered
dense
:filter="keyword"
:columns="columns"
:rows="rows"
:paging="true"
v-model:pagination="pagination"
:rows-per-page-options="[10, 20, 50, 100]"
:visible-columns="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-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols">
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</q-card-section>
</q-card>
</q-dialog> </q-dialog>
</template> </template>

View file

@ -223,8 +223,8 @@ onMounted(() => {
}); });
</script> </script>
<template> <template>
<div class="row items-center q-gutter-x-sm q-py-sm"> <div class="row items-center q-gutter-x-sm q-pb-sm">
<q-btn color="teal-5" icon="add" flat round @click="onClickOpenDialog()" <q-btn dense color="teal-5" icon="add" flat round @click="onClickOpenDialog()"
><q-tooltip>เพมขอม</q-tooltip></q-btn ><q-tooltip>เพมขอม</q-tooltip></q-btn
> >
@ -416,185 +416,165 @@ onMounted(() => {
</d-table> </d-table>
<q-dialog v-model="modalDialog" persistent> <q-dialog v-model="modalDialog" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 300px; min-width: 80%"
class="bg-white"
>
<q-form @submit.prevent greedy @validation-success="onSubmit"> <q-form @submit.prevent greedy @validation-success="onSubmit">
<q-header> <DialogHeader
<q-toolbar> :tittle="
<DialogHeader isStatusEdit
:tittle=" ? 'แก้ไขบันทึกวันที่ไม่ได้รับเงินเดือนฯ'
isStatusEdit : 'เพิ่มบันทึกวันที่ไม่ได้รับเงินเดือนฯ'
? 'แก้ไขบันทึกวันที่ไม่ได้รับเงินเดือนฯ' "
: 'เพิ่มบันทึกวันที่ไม่ได้รับเงินเดือนฯ' :close="onClickCloseDialog"
" />
:close="onClickCloseDialog" <q-separator color="grey-4" />
/>
</q-toolbar> <q-card-section style="max-height: 55vh" class="scroll">
<q-separator color="grey-4" /> <div class="row col-12 q-col-gutter-sm">
</q-header> <div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
<q-page-container> menu-class-name="modalfix"
<q-page class="q-pa-md"> v-model="formData.date"
<div class="row col-12 q-col-gutter-sm"> :locale="'th'"
<div class="col-xs-12 col-sm-12"> autoApply
<q-card flat bordered class="fit q-pa-sm"> :enableTimePicker="false"
<div class="row col-12 q-col-gutter-xs"> week-start="0"
<div class="col-xs-6 col-sm-6 col-md-6"> >
<datepicker <template #year="{ year }">{{ year + 543 }}</template>
menu-class-name="modalfix" <template #year-overlay-value="{ value }">{{
v-model="formData.date" parseInt(value + 543)
:locale="'th'" }}</template>
autoApply <template #trigger>
:enableTimePicker="false" <q-input
week-start="0" ref="dateRef"
outlined
dense
borderless
class="inputgreen"
:model-value="date2Thai(formData.date)"
:rules="[
(val) => !!val || `${'กรุณาเลือก วัน/เดือน/ปี'}`,
]"
hide-bottom-space
:label="`${'วัน/เดือน/ปี'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
> >
<template #year="{ year }">{{ year + 543 }}</template> </q-icon>
<template #year-overlay-value="{ value }">{{ </template>
parseInt(value + 543) </q-input>
}}</template> </template>
<template #trigger> </datepicker>
<q-input
ref="dateRef"
outlined
dense
borderless
class="inputgreen"
:model-value="date2Thai(formData.date)"
:rules="[
(val) => !!val || `${'กรุณาเลือก วัน/เดือน/ปี'}`,
]"
hide-bottom-space
:label="`${'วัน/เดือน/ปี'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-6">
<q-input
ref="referenceRef"
outlined
dense
autogrow
lazy-rules
borderless
v-model="formData.reference"
class="inputgreen"
:rules="[
(val) => !!val || `${'กรุณากรอกเอกสารอ้างอิง'}`,
]"
hide-bottom-space
:label="`${'เอกสารอ้างอิง'}`"
/>
</div>
<div class="col-12">
<q-input
ref="detailRef"
outlined
dense
autogrow
lazy-rules
borderless
v-model="formData.detail"
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
outlined
dense
lazy-rules
borderless
v-model="formData.refCommandNo"
class="inputgreen"
hide-bottom-space
:label="`${'เลขที่คำสั่ง'}`"
>
<template v-slot:append>
<q-icon name="mdi-file" class="cursor-pointer" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
menu-class-name="modalfix"
v-model="formData.refCommandDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
clearable
outlined
dense
borderless
class="inputgreen"
:model-value="
formData.refCommandDate == null ? null : date2Thai(formData.refCommandDate as Date)
"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="formData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</div>
</q-card>
</div>
</div> </div>
</q-page> <div class="col-6">
</q-page-container> <q-input
ref="referenceRef"
outlined
dense
autogrow
lazy-rules
borderless
v-model="formData.reference"
class="inputgreen"
:rules="[
(val) => !!val || `${'กรุณากรอกเอกสารอ้างอิง'}`,
]"
hide-bottom-space
:label="`${'เอกสารอ้างอิง'}`"
/>
</div>
<div class="col-12">
<q-input
ref="detailRef"
outlined
dense
autogrow
lazy-rules
borderless
v-model="formData.detail"
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
outlined
dense
lazy-rules
borderless
v-model="formData.refCommandNo"
class="inputgreen"
hide-bottom-space
:label="`${'เลขที่คำสั่ง'}`"
>
<template v-slot:append>
<q-icon name="mdi-file" class="cursor-pointer" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
menu-class-name="modalfix"
v-model="formData.refCommandDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
clearable
outlined
dense
borderless
class="inputgreen"
:model-value="
formData.refCommandDate == null ? null : date2Thai(formData.refCommandDate as Date)
"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="formData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</div>
</q-card-section>
<q-separator /> <q-separator />
<q-footer> <q-card-actions align="right">
<q-separator color="grey-4" /> <q-btn
<q-toolbar class="fit row wrap justify-end items-start content-start"> dense
<q-btn unelevated
dense label="บันทึก"
unelevated id="onSubmit"
label="บันทึก" type="submit"
id="onSubmit" color="public"
type="submit" class="q-px-md"
color="public" >
class="q-px-md" <q-tooltip>นทกขอม</q-tooltip>
> </q-btn>
<q-tooltip>นทกขอม</q-tooltip> </q-card-actions>
</q-btn>
</q-toolbar>
</q-footer>
</q-form> </q-form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<DialogHisotory v-model:modal="modalHistory" v-model:id="id" /> <DialogHisotory v-model:modal="modalHistory" v-model:id="id" />

View file

@ -144,87 +144,76 @@ watch(modal, (status) => {
</script> </script>
<template> <template>
<q-dialog v-model="modal" persistent full-width> <q-dialog v-model="modal" persistent full-width>
<q-layout <q-card style="min-width: 80%">
view="lHh lpr lFf" <DialogHeader
container :tittle="'ประวัติแก้ไขบันทึกวันที่ไม่ได้รับเงินเดือนฯ'"
style="height: 500px; min-width: 80%" :close="closeDialog"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header>
<q-toolbar>
<DialogHeader
:tittle="'ประวัติแก้ไขบันทึกวันที่ไม่ได้รับเงินเดือนฯ'"
:close="closeDialog"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 60vh" class="scroll">
<q-page class="q-pa-md"> <div class="row q-gutter-sm q-mb-sm">
<q-toolbar style="padding: 0px" class="text-primary q-mb-sm"> <q-space />
<q-space /> <q-input
<q-input
dense
outlined
v-model="filter"
label="ค้นหา"
class="q-mr-sm"
>
<template v-slot:append>
<q-icon name="search" />
</template>
</q-input>
<q-select
v-model="visibleColumns"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="columns"
option-value="name"
options-cover
style="min-width: 150px"
/>
</q-toolbar>
<d-table
ref="table"
row-key="id"
flat
bordered
dense dense
:filter="filter" outlined
:columns="columns" v-model="filter"
:rows="rows" label="ค้นหา"
:paging="true" class="q-mr-sm"
v-model:pagination="pagination"
:rows-per-page-options="[20, 50, 100]"
:visible-columns="visibleColumns"
> >
<template v-slot:header="props"> <template v-slot:append>
<q-tr :props="props"> <q-icon name="search" />
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
</q-tr>
</template> </template>
<template v-slot:body="props"> </q-input>
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols" :key="col.name" :props="props"> <q-select
<div class="table_ellipsis"> v-model="visibleColumns"
{{ col.value ? col.value : "-" }} multiple
</div> outlined
</q-td> dense
</q-tr> options-dense
</template> :display-value="$q.lang.table.columns"
</d-table> emit-value
</q-page> map-options
</q-page-container> :options="columns"
</q-layout> option-value="name"
options-cover
style="min-width: 150px"
/>
</div>
<d-table
ref="table"
row-key="id"
flat
bordered
dense
:filter="filter"
:columns="columns"
:rows="rows"
:paging="true"
v-model:pagination="pagination"
:rows-per-page-options="[20, 50, 100]"
:visible-columns="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-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 class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
</q-card-section>
</q-card>
</q-dialog> </q-dialog>
</template> </template>