ปรับ css ระบบทะเบียนประวัติ แท็บข้อมูลส่วนตัว,ข้อมูลราชการ เสร็จแล้ว

This commit is contained in:
Tanyalak 2024-04-23 17:56:51 +07:00
parent e4dd97f431
commit 93ba885406
19 changed files with 2091 additions and 2270 deletions

View file

@ -11,22 +11,23 @@ import ResultsPerformance from "@/modules/04_registryNew/components/detail/Achie
const tab = ref<string>("1"); const tab = ref<string>("1");
</script> </script>
<template> <template>
<div class="row items-center q-mb-md"> <div class="row items-center q-my-md">
<div class="text-dark row items-center text-weight-bold"> <div class="text-dark row items-center q-px-md">
<q-icon name="mdi-medal" class="q-mr-md" size="sm" /> <q-icon name="mdi-account" class="q-mr-md" size="22px" />
<h3 class="resigtry-tab-title">อมลผลงานและเครองราชฯ</h3> <div class="text-subtitle1 text-weight-bold">อมลผลงานและเครองราชฯ</div>
</div> </div>
</div> </div>
<q-separator /> <q-separator />
<q-tabs <q-tabs
v-model="tab" v-model="tab"
class="text-grey" active-color="blue-8"
active-color="blue" align="left"
indicator-color="white" bordered
align="left" narrow-indicator
narrow-indicator indicator-color="transparent"
bordered dense
class="text-grey q-pl-sm"
> >
<q-tab name="1" label="ใบอนุญาตประกอบวิชาชีพ" /> <q-tab name="1" label="ใบอนุญาตประกอบวิชาชีพ" />
<q-tab name="2" label="การฝึกอบรม/ดูงาน" /> <q-tab name="2" label="การฝึกอบรม/ดูงาน" />

View file

@ -475,6 +475,7 @@ onMounted(() => {
color="primary" color="primary"
icon="mdi-pencil-outline" icon="mdi-pencil-outline"
flat flat
dense
round round
@click="openDialogEdit()" @click="openDialogEdit()"
><q-tooltip>แกไขขอม</q-tooltip></q-btn ><q-tooltip>แกไขขอม</q-tooltip></q-btn
@ -483,6 +484,7 @@ onMounted(() => {
color="info" color="info"
icon="mdi-history" icon="mdi-history"
flat flat
dense
round round
@click="openDialogHistory()" @click="openDialogHistory()"
><q-tooltip>ประวอมลราชการ</q-tooltip></q-btn ><q-tooltip>ประวอมลราชการ</q-tooltip></q-btn
@ -490,7 +492,7 @@ onMounted(() => {
</div> </div>
</div> </div>
<q-card bordered class="bg-grey-1 q-pa-md"> <q-card bordered class="bg-grey-1 q-pa-md q-mt-sm">
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-sm-6 col-md-6 q-gutter-y-sm"> <div class="col-12 col-sm-6 col-md-6 q-gutter-y-sm">
<div <div
@ -525,7 +527,7 @@ onMounted(() => {
</div> </div>
</div> </div>
</div> </div>
<q-separator inset color="grey-5" class="q-my-md" /> <q-separator color="grey-4" class="q-my-md" />
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-sm-6 col-md-6 q-gutter-y-sm"> <div class="col-12 col-sm-6 col-md-6 q-gutter-y-sm">
<div class="col-12 col-sm-6 col-md-6"> <div class="col-12 col-sm-6 col-md-6">
@ -633,129 +635,117 @@ onMounted(() => {
<!-- dialog edit --> <!-- dialog edit -->
<q-dialog v-model="modalEdit" persistent> <q-dialog v-model="modalEdit" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 300px"
class="bg-white"
>
<form @submit.prevent="validateForm"> <form @submit.prevent="validateForm">
<q-header> <DialogHeader tittle="แก้ไขข้อมูลราชการ" :close="closeDialog" />
<q-toolbar> <q-separator color="grey-4" />
<DialogHeader tittle="แก้ไขข้อมูลราชการ" :close="closeDialog" />
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 50vh" class="scroll">
<q-page class="q-pa-md"> <div class="row q-col-gutter-sm">
<div class="row q-col-gutter-sm"> <div class="col-6">
<div class="col-6"> <datepicker
<datepicker v-model="containDate"
v-model="containDate" :locale="'th'"
:locale="'th'" autoApply
autoApply :enableTimePicker="false"
:enableTimePicker="false" week-start="0"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
ref="containDateRef"
class="full-width inputgreen cursor-pointer"
hide-bottom-space
dense
outlined
:model-value="containDate !== null
? date2Thai(containDate as Date)
: null
"
: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-6">
<datepicker
v-model="workDate"
: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="workDateRef"
class="full-width inputgreen cursor-pointer"
hide-bottom-space
dense
outlined
:model-value="workDate !== null
? date2Thai(workDate as Date)
: null
"
: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-12"
v-if="containDate && workDate ? dateToISO(containDate as Date) !== dateToISO(workDate as Date) : false"
> >
<q-input <template #year="{ year }">
ref="reasonSameDateRef" {{ year + 543 }}
class="full-width inputgreen cursor-pointer" </template>
label="เหตุผลกรณีไม่ตรงกัน" <template #year-overlay-value="{ value }">
type="textarea" {{ parseInt(value + 543) }}
outlined </template>
dense <template #trigger>
:rules="[(val) => !!val || 'กรุณากรอก เหตุผลกรณีไม่ตรงกัน']" <q-input
v-model="reasonSameDate" ref="containDateRef"
/> class="full-width inputgreen cursor-pointer"
</div> hide-bottom-space
dense
outlined
:model-value="containDate !== null
? date2Thai(containDate as Date)
: null
"
: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>
</q-page> <div class="col-6">
</q-page-container> <datepicker
v-model="workDate"
: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="workDateRef"
class="full-width inputgreen cursor-pointer"
hide-bottom-space
dense
outlined
:model-value="workDate !== null
? date2Thai(workDate as Date)
: null
"
: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-12"
v-if="containDate && workDate ? dateToISO(containDate as Date) !== dateToISO(workDate as Date) : false"
>
<q-input
ref="reasonSameDateRef"
class="full-width inputgreen cursor-pointer"
label="เหตุผลกรณีไม่ตรงกัน"
type="textarea"
outlined
dense
hide-bottom-space
:rules="[(val) => !!val || 'กรุณากรอก เหตุผลกรณีไม่ตรงกัน']"
v-model="reasonSameDate"
/>
</div>
</div>
</q-card-section>
<q-separator /> <q-separator />
<q-footer> <q-card-actions align="right">
<q-separator color="grey-4" />
<q-toolbar class="fit row wrap justify-end items-start content-start">
<q-btn <q-btn
dense dense
unelevated unelevated
@ -767,112 +757,100 @@ onMounted(() => {
> >
<q-tooltip>นทกขอม</q-tooltip> <q-tooltip>นทกขอม</q-tooltip>
</q-btn> </q-btn>
</q-toolbar> </q-card-actions>
</q-footer>
</form> </form>
</q-layout> </q-card>
</q-dialog> </q-dialog>
<!-- dialog History --> <!-- dialog History -->
<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 = !modalHistory)"
class="bg-white" />
> <q-separator color="grey-4" />
<q-header>
<q-toolbar>
<DialogHeader
tittle="ประวัติแก้ไขข้อมูลราชการ"
:close="() => (modalHistory = !modalHistory)"
/>
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container> <q-card-section style="max-height: 50vh" class="scroll">
<q-page class="q-pa-md"> <div class="row q-pb-sm q-gutter-x-sm">
<div class="row q-pb-sm q-gutter-x-sm"> <q-space />
<q-space /> <q-input
<q-input standout
standout
dense
v-model="filterKeyword"
ref="filterRef"
outlined
placeholder="ค้นหา"
class="col-2"
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="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"
:columns="columnsHistory"
:rows="rowsHistory"
flat
bordered
:paging="true"
dense dense
class="custom-header-table" v-model="filterKeyword"
:filter="filterKeyword" ref="filterRef"
:visible-columns="visibleColumnsHistory" outlined
placeholder="ค้นหา"
class="col-2"
debounce="300"
> >
<template v-slot:header="props"> <template v-slot:append>
<q-tr :props="props"> <q-icon
<q-th v-if="filterKeyword == ''"
v-for="col in props.cols" name="search"
:key="col.name" @click.stop.prevent="filterKeyword = ''"
:props="props" class="cursor-pointer"
style="color: #000000; font-weight: 500" />
> <q-icon
<span class="text-weight-medium">{{ col.label }}</span> v-if="filterKeyword"
</q-th> name="cancel"
<q-th auto-width></q-th> @click.stop.prevent="filterKeyword = ''"
</q-tr> 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.name" :props="props"> 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"
:columns="columnsHistory"
:rows="rowsHistory"
flat
bordered
:paging="true"
dense
class="custom-header-table"
:filter="filterKeyword"
:visible-columns="visibleColumnsHistory"
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th
v-for="col in props.cols"
:key="col.name"
:props="props"
style="color: #000000; font-weight: 500"
>
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
<q-th auto-width></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>
{{ 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

@ -334,8 +334,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="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
> >
@ -572,183 +572,168 @@ onMounted(async () => {
<!-- dialog add edit --> <!-- dialog add edit -->
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" 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> <DialogHeader
<q-toolbar> :tittle="edit ? 'แก้ไขข้อมูลวินัย' : 'เพิ่มข้อมูลวินัย'"
<DialogHeader :close="closeDialog"
:tittle="edit ? 'แก้ไขข้อมูลวินัย' : 'เพิ่มข้อมูลวินัย'" />
:close="closeDialog" <q-separator color="grey-4" />
/> <q-card-section style="max-height: 50vh" class="scroll">
</q-toolbar> <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
<q-separator color="grey-4" /> <div class="col-xs-6 col-sm-6 col-md-6">
</q-header> <datepicker
menu-class-name="modalfix"
<q-page-container> v-model="disciplineData.date"
<q-page class="q-pa-md"> :locale="'th'"
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> autoApply
<div class="col-xs-6 col-sm-6 col-md-6"> :enableTimePicker="false"
<datepicker week-start="0"
menu-class-name="modalfix" >
v-model="disciplineData.date" <template #year="{ year }">{{ year + 543 }}</template>
:locale="'th'" <template #year-overlay-value="{ value }">{{
autoApply parseInt(value + 543)
:enableTimePicker="false" }}</template>
week-start="0" <template #trigger>
> <q-input
<template #year="{ year }">{{ year + 543 }}</template> ref="dateRef"
<template #year-overlay-value="{ value }">{{ class="full-width inputgreen cursor-pointer"
parseInt(value + 543) outlined
}}</template> dense
<template #trigger> :model-value="date2Thai(disciplineData.date)"
<q-input :rules="[(val:string) => !!val || `${'กรุณาเลือก วัน/เดือน/ปี'}`]"
ref="dateRef" hide-bottom-space
class="full-width inputgreen cursor-pointer" :label="`${'วัน/เดือน/ปี'}`"
outlined >
dense <template v-slot:prepend>
:model-value="date2Thai(disciplineData.date)" <q-icon
:rules="[(val:string) => !!val || `${'กรุณาเลือก วัน/เดือน/ปี'}`]" name="event"
hide-bottom-space class="cursor-pointer"
:label="`${'วัน/เดือน/ปี'}`" color="primary"
> >
<template v-slot:prepend> </q-icon>
<q-icon </template>
name="event" </q-input>
class="cursor-pointer" </template>
color="primary" </datepicker>
>
</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="disciplineData.detail"
:rules="[(val:string) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<selector
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="disciplineData.level"
:label="`${'ระดับการลงโทษทางวินัย'}`"
emit-value
map-options
option-label="name"
:options="Ops.levelOptions"
option-value="id"
use-input
clearable
hide-bottom-space
input-debounce="0"
@filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'levelOptions'
) "
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
v-model="disciplineData.unStigma"
hide-bottom-space
:label="`${'ล้างมลทิน'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
ref="refCommandNoRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="disciplineData.refCommandNo"
hide-bottom-space
:label="`${'เลขที่คำสั่ง'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกเลขที่คำสั่ง'}`]"
>
<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="disciplineData.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
ref="dateRef"
class="full-width inputgreen cursor-pointer"
outlined
clearable
dense
:model-value="date2Thai(disciplineData.refCommandDate)"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="disciplineData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</div> </div>
</q-page> <div class="col-xs-6 col-sm-6 col-md-6">
</q-page-container> <q-input
ref="detailRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="disciplineData.detail"
:rules="[(val:string) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<selector
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="disciplineData.level"
:label="`${'ระดับการลงโทษทางวินัย'}`"
emit-value
map-options
option-label="name"
:options="Ops.levelOptions"
option-value="id"
use-input
clearable
hide-bottom-space
input-debounce="0"
@filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'levelOptions'
) "
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
v-model="disciplineData.unStigma"
hide-bottom-space
:label="`${'ล้างมลทิน'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
ref="refCommandNoRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="disciplineData.refCommandNo"
hide-bottom-space
:label="`${'เลขที่คำสั่ง'}`"
:rules="[(val:string) => !!val || `${'กรุณากรอกเลขที่คำสั่ง'}`]"
>
<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="disciplineData.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
ref="dateRef"
class="full-width inputgreen cursor-pointer"
outlined
clearable
dense
:model-value="date2Thai(disciplineData.refCommandDate)"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
@clear="disciplineData.refCommandDate = null"
>
<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 /> <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:id="id" /> <DialogHistory v-model:modal="modalHistory" v-model:id="id" />

View file

@ -184,105 +184,94 @@ 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: 50vh" 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"
v-model:pagination="historyPagination"
: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 v-if="col.name === 'no'"> multiple
{{ outlined
(formFilter.page - 1) * formFilter.pageSize + dense
props.rowIndex + options-dense
1 :display-value="$q.lang.table.columns"
}} emit-value
</div> map-options
<div v-else> :options="columns"
{{ col.value ? col.value : "-" }} option-value="name"
</div> options-cover
</q-td> style="min-width: 150px"
</q-tr> />
</template> </div>
</d-table> <d-table
</q-page> ref="table"
</q-page-container> flat
</q-layout> bordered
dense
:columns="columns"
:rows="rows"
:paging="true"
:rows-per-page-options="[10, 25, 50, 100]"
:visible-columns="visibleColumns"
v-model:pagination="historyPagination"
: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 v-if="col.name === 'no'">
{{
(formFilter.page - 1) * formFilter.pageSize +
props.rowIndex +
1
}}
</div>
<div v-else>
{{ 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

@ -452,8 +452,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
> >
@ -670,25 +670,15 @@ onMounted(() => {
<!-- dialog add edit --> <!-- dialog add edit -->
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 400px"
class="bg-white"
>
<form @submit.prevent="validateForm"> <form @submit.prevent="validateForm">
<q-header> <DialogHeader
<q-toolbar> :tittle="edit ? 'แก้ไขข้อมูลการลา' : 'เพิ่มข้อมูลการลา'"
<DialogHeader :close="closeDialog"
:tittle="edit ? 'แก้ไขข้อมูลการลา' : 'เพิ่มข้อมูลการลา'" />
: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: 50vh" class="scroll">
<q-page class="q-pa-md">
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> <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"> <div class="col-xs-6 col-sm-6 col-md-6">
<q-select <q-select
@ -804,27 +794,23 @@ onMounted(() => {
/> />
</div> </div>
</div> </div>
</q-page> </q-card-section>
</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>
</form> </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

@ -214,116 +214,104 @@ 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-card-section style="max-height: 50vh" class="scroll">
<q-toolbar> <div class="row q-gutter-sm q-mb-sm">
<DialogHeader <q-space />
tittle="ประวัติแก้ไขการลา" <q-input
:close="() => (modal = 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="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
v-model:pagination="historyPagination" placeholder="ค้นหา"
:rows-per-page-options="[10, 25, 50, 100]" debounce="300"
:visible-columns="visibleColumns"
: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 v-if="col.name === 'no'"> multiple
{{ outlined
(formFilter.page - 1) * formFilter.pageSize + dense
props.rowIndex + options-dense
1 :display-value="$q.lang.table.columns"
}} emit-value
</div> map-options
<div v-else-if="col.name == 'dateLeave'"> :options="columns"
{{ option-value="name"
dateThaiRange([ options-cover
props.row.dateStartLeave, style="min-width: 150px"
props.row.dateEndLeave, />
]) </div>
}} <d-table
</div> ref="table"
<div v-else-if="col.name == 'status'"> flat
{{ statusLeave(col.value) }} bordered
</div> dense
<div v-else> :columns="columns"
{{ col.value ? col.value : "-" }} :rows="rows"
</div> :paging="true"
</q-td> v-model:pagination="historyPagination"
</q-tr> :rows-per-page-options="[10, 25, 50, 100]"
</template> :visible-columns="visibleColumns"
</d-table> :filter="filterKeyword"
</q-page> >
</q-page-container> >
</q-layout> <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 v-if="col.name === 'no'">
{{
(formFilter.page - 1) * formFilter.pageSize +
props.rowIndex +
1
}}
</div>
<div v-else-if="col.name == 'dateLeave'">
{{
dateThaiRange([
props.row.dateStartLeave,
props.row.dateEndLeave,
])
}}
</div>
<div v-else-if="col.name == 'status'">
{{ statusLeave(col.value) }}
</div>
<div v-else>
{{ 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

@ -287,8 +287,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="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
> >
@ -518,217 +518,202 @@ 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 @submit.prevent greedy @validation-success="onSubmit()"> <q-form @submit.prevent greedy @validation-success="onSubmit()">
<q-header> <DialogHeader
<q-toolbar> :tittle="
<DialogHeader edit
:tittle=" ? 'แก้ไขข้อมูลปฏิบัติราชการพิเศษ'
edit : 'เพิ่มข้อมูลปฏิบัติราชการพิเศษ'
? 'แก้ไขข้อมูลปฏิบัติราชการพิเศษ' "
: 'เพิ่มข้อมูลปฏิบัติราชการพิเศษ' :close="closeDialog"
" />
:close="closeDialog" <q-separator color="grey-4" />
/> <q-card-section style="max-height: 50vh" class="scroll">
</q-toolbar> <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
<q-separator color="grey-4" /> <div class="col-xs-6 col-sm-6 col-md-6">
</q-header> <datepicker
menu-class-name="modalfix"
<q-page-container> v-model="dutyData.dateStart"
<q-page class="q-pa-md"> :locale="'th'"
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> autoApply
<div class="col-xs-6 col-sm-6 col-md-6"> :enableTimePicker="false"
<datepicker week-start="0"
menu-class-name="modalfix" >
v-model="dutyData.dateStart" <template #year="{ year }">{{ year + 543 }}</template>
:locale="'th'" <template #year-overlay-value="{ value }">{{
autoApply parseInt(value + 543)
:enableTimePicker="false" }}</template>
week-start="0" <template #trigger>
> <q-input
<template #year="{ year }">{{ year + 543 }}</template> ref="dateStartRef"
<template #year-overlay-value="{ value }">{{ class="full-width inputgreen cursor-pointer"
parseInt(value + 543) outlined
}}</template> dense
<template #trigger> :model-value="date2Thai(dutyData.dateStart)"
<q-input :rules="[
ref="dateStartRef" (val) => !!val || `${'กรุณาเลือกวันที่เริ่มต้น'}`,
class="full-width inputgreen cursor-pointer" ]"
outlined hide-bottom-space
dense :label="`${'วันที่เริ่มต้น'}`"
:model-value="date2Thai(dutyData.dateStart)" >
:rules="[ <template v-slot:prepend>
(val) => !!val || `${'กรุณาเลือกวันที่เริ่มต้น'}`, <q-icon
]" name="event"
hide-bottom-space class="cursor-pointer"
:label="`${'วันที่เริ่มต้น'}`" color="primary"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
menu-class-name="modalfix"
v-model="dutyData.dateEnd"
:locale="'th'"
autoApply
:enableTimePicker="false"
:min-date="dutyData.dateStart"
:readonly="!dutyData.dateStart"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
ref="dateEndRef"
:readonly="!dutyData.dateStart"
class="full-width inputgreen cursor-pointer"
dense
outlined
:model-value="date2Thai(dutyData.dateEnd)"
: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-12">
<q-input
ref="referenceRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
autogrow
v-model="dutyData.reference"
:rules="[(val) => !!val || `${'กรุณากรอกเอกสารอ้างอิง'}`]"
hide-bottom-space
:label="`${'เอกสารอ้างอิง'}`"
/>
</div>
<div class="col-12">
<q-input
ref="detailRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
autogrow
v-model="dutyData.detail"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
v-model="dutyData.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
menu-class-name="modalfix"
v-model="dutyData.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
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
:borderless="!edit"
:model-value="
dutyData.refCommandDate == null ? null : date2Thai(dutyData.refCommandDate as Date)
"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
clearable
@clear="dutyData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
<template
v-if="dutyData.refCommandDate && edit"
v-slot:append
> >
</template> </q-icon>
</q-input> </template>
</template> </q-input>
</datepicker> </template>
</div> </datepicker>
</div> </div>
</q-page> <div class="col-xs-6 col-sm-6 col-md-6">
</q-page-container> <datepicker
menu-class-name="modalfix"
v-model="dutyData.dateEnd"
:locale="'th'"
autoApply
:enableTimePicker="false"
:min-date="dutyData.dateStart"
:readonly="!dutyData.dateStart"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
ref="dateEndRef"
:readonly="!dutyData.dateStart"
class="full-width inputgreen cursor-pointer"
dense
outlined
:model-value="date2Thai(dutyData.dateEnd)"
: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-12">
<q-input
ref="referenceRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
autogrow
v-model="dutyData.reference"
:rules="[(val) => !!val || `${'กรุณากรอกเอกสารอ้างอิง'}`]"
hide-bottom-space
:label="`${'เอกสารอ้างอิง'}`"
/>
</div>
<div class="col-12">
<q-input
ref="detailRef"
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
autogrow
v-model="dutyData.detail"
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
hide-bottom-space
:label="`${'รายละเอียด'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
v-model="dutyData.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
menu-class-name="modalfix"
v-model="dutyData.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
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
:borderless="!edit"
:model-value="
dutyData.refCommandDate == null ? null : date2Thai(dutyData.refCommandDate as Date)
"
hide-bottom-space
:label="`${'เอกสารอ้างอิง (ลงวันที่)'}`"
clearable
@clear="dutyData.refCommandDate = null"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
color="primary"
>
</q-icon>
</template>
<template
v-if="dutyData.refCommandDate && edit"
v-slot:append
>
</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>
<DialogHistory v-model:modal="modalHistory" v-model:id="id" /> <DialogHistory v-model:modal="modalHistory" v-model:id="id" />

View file

@ -188,105 +188,92 @@ 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-card-section style="max-height: 50vh" class="scroll">
<q-header> <div class="row q-gutter-sm q-mb-sm">
<q-toolbar> <q-space />
<DialogHeader <q-input
tittle="ประวัติแก้ไขปฏิบัติราชการพิเศษ" standout
:close="() => (modal = false)"
/>
</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="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
v-model:pagination="historyPagination" placeholder="ค้นหา"
:rows-per-page-options="[10, 25, 50, 100]" debounce="300"
:visible-columns="visibleColumns"
: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 v-if="col.name === 'no'"> multiple
{{ outlined
(formFilter.page - 1) * formFilter.pageSize + dense
props.rowIndex + options-dense
1 :display-value="$q.lang.table.columns"
}} emit-value
</div> map-options
<div v-else class="table_ellipsis"> :options="columns"
{{ col.value ? col.value : "-" }} option-value="name"
</div> options-cover
</q-td> style="min-width: 150px"
</q-tr> />
</template> </div>
</d-table> <d-table
</q-page> ref="table"
</q-page-container> flat
</q-layout> bordered
dense
:columns="columns"
:rows="rows"
:paging="true"
v-model:pagination="historyPagination"
: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 v-if="col.name === 'no'">
{{
(formFilter.page - 1) * formFilter.pageSize +
props.rowIndex +
1
}}
</div>
<div v-else 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

@ -10,22 +10,23 @@ import PerformSpecialWork from "@/modules/04_registryNew/components/detail/Gover
const tab = ref<string>("1"); const tab = ref<string>("1");
</script> </script>
<template> <template>
<div class="row items-center q-mb-md"> <div class="row items-center q-my-md">
<div class="text-dark row items-center text-weight-bold"> <div class="text-dark row items-center q-px-md">
<q-icon name="mdi-account-tie" class="q-mr-md" size="sm" /> <q-icon name="mdi-account" class="q-mr-md" size="22px" />
<h3 class="resigtry-tab-title">อมลราชการ</h3> <div class="text-subtitle1 text-weight-bold">อมลราชการ</div>
</div> </div>
</div> </div>
<q-separator /> <q-separator />
<q-tabs <q-tabs
v-model="tab" v-model="tab"
class="text-grey" active-color="blue-8"
active-color="blue"
indicator-color="white"
align="left" align="left"
narrow-indicator
bordered bordered
narrow-indicator
indicator-color="transparent"
dense
class="text-grey q-pl-sm"
> >
<q-tab name="1" label="ข้อมูลราชการ" /> <q-tab name="1" label="ข้อมูลราชการ" />
<q-tab name="2" label="วินัย" /> <q-tab name="2" label="วินัย" />

View file

@ -8,22 +8,23 @@ import Documentipline from "@/modules/04_registryNew/components/detail/Other/02_
const tab = ref<string>("1"); const tab = ref<string>("1");
</script> </script>
<template> <template>
<div class="row items-center q-mb-md"> <div class="row items-center q-my-md">
<div class="text-dark row items-center text-weight-bold"> <div class="text-dark row items-center q-px-md">
<q-icon name="mdi-bookmark" class="q-mr-md" size="sm" /> <q-icon name="mdi-account" class="q-mr-md" size="22px" />
<h3 class="resigtry-tab-title">เอกสารหลกฐานและอนๆ</h3> <div class="text-subtitle1 text-weight-bold">เอกสารหลกฐานและอนๆ</div>
</div> </div>
</div> </div>
<q-separator /> <q-separator />
<q-tabs <q-tabs
v-model="tab" v-model="tab"
class="text-grey" active-color="blue-8"
active-color="blue"
indicator-color="white"
align="left" align="left"
narrow-indicator
bordered bordered
narrow-indicator
indicator-color="transparent"
dense
class="text-grey q-pl-sm"
> >
<q-tab name="1" label="ข้อมูลอื่นๆ" /> <q-tab name="1" label="ข้อมูลอื่นๆ" />
<q-tab name="2" label="เอกสารหลักฐาน" /> <q-tab name="2" label="เอกสารหลักฐาน" />

View file

@ -372,17 +372,18 @@ onMounted(async () => {
</script> </script>
<template> <template>
<div class="row q-gutter-sm items-center"> <div class="row q-gutter-sm items-center">
<div class="toptitle col text-right"> <div class="toptitle col text-right q-gutter-x-sm">
<q-btn <q-btn
flat flat
round round
dense
icon="mdi-pencil-outline" icon="mdi-pencil-outline"
color="primary" color="primary"
@click="onClickOpenDialog" @click="onClickOpenDialog"
> >
<q-tooltip>แกไขขอม</q-tooltip> <q-tooltip>แกไขขอม</q-tooltip>
</q-btn> </q-btn>
<q-btn flat round icon="mdi-history" color="info" @click="clickHistory"> <q-btn dense flat round icon="mdi-history" color="info" @click="clickHistory">
<q-tooltip>ประวแกไขขอมลสวนต</q-tooltip> <q-tooltip>ประวแกไขขอมลสวนต</q-tooltip>
</q-btn> </q-btn>
</div> </div>

View file

@ -538,11 +538,12 @@ watch(
</script> </script>
<template> <template>
<q-toolbar style="padding: 0px" class="text-primary row justify-end q-mb-xs"> <div class="text-primary row q-mb-sm">
<q-btn <q-btn
round round
flat flat
color="primary" color="primary"
dense
icon="add" icon="add"
@click=" @click="
() => { () => {
@ -589,7 +590,7 @@ watch(
:options="columns" :options="columns"
:display-value="$q.lang.table.columns" :display-value="$q.lang.table.columns"
/> />
</q-toolbar> </div>
<d-table <d-table
flat flat

View file

@ -478,17 +478,18 @@ onMounted(async () => {
</script> </script>
<template> <template>
<div class="row q-gutter-sm items-center"> <div class="row q-gutter-sm items-center">
<div class="toptitle col text-right"> <div class="toptitle col text-right q-gutter-x-sm">
<q-btn <q-btn
flat flat
round round
dense=""
icon="mdi-pencil-outline" icon="mdi-pencil-outline"
color="primary" color="primary"
@click="onClickOpenDialog" @click="onClickOpenDialog"
> >
<q-tooltip>แกไขขอม</q-tooltip> <q-tooltip>แกไขขอม</q-tooltip>
</q-btn> </q-btn>
<q-btn flat round icon="mdi-history" color="info" @click="clickHistory"> <q-btn dense flat round icon="mdi-history" color="info" @click="clickHistory">
<q-tooltip>ประวอมลทอย</q-tooltip> <q-tooltip>ประวอมลทอย</q-tooltip>
</q-btn> </q-btn>
</div> </div>
@ -566,22 +567,11 @@ onMounted(async () => {
<!-- Edit Dialog --> <!-- Edit Dialog -->
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-layout <q-card>
view="lHh lpr lFf"
container
style="height: 600px"
class="bg-white"
>
<q-form greedy @submit.prevent @validation-success="onSubmit"> <q-form greedy @submit.prevent @validation-success="onSubmit">
<q-header> <DialogHeader tittle="แก้ไขข้อมูลที่อยู่" :close="clickClose" />
<q-toolbar> <q-separator color="grey-4" />
<DialogHeader tittle="แก้ไขข้อมูลที่อยู่" :close="clickClose" /> <q-card-section style="max-height: 60vh" class="scroll">
</q-toolbar>
<q-separator color="grey-4" />
</q-header>
<q-page-container>
<q-page class="q-pa-md">
<div class="col-12 q-pb-xs"> <div class="col-12 q-pb-xs">
<q-input <q-input
dense dense
@ -799,122 +789,107 @@ onMounted(async () => {
</div> </div>
</div> </div>
</div> </div>
</q-page> </q-card-section>
</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>
<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: 50vh" 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
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
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

@ -692,10 +692,11 @@ 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
dense
color="primary" color="primary"
icon="add" icon="add"
@click=" @click="
@ -710,7 +711,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>
@ -729,7 +730,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
@ -762,7 +762,7 @@ onMounted(async () => {
/> />
</template> </template>
</q-btn-toggle> </q-btn-toggle>
</q-toolbar> </div>
<d-table <d-table
:grid="mode === 'card'" :grid="mode === 'card'"
@ -955,280 +955,183 @@ 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: 80vh"
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 />
/> <q-card-section style="max-height: 60vh" class="scroll">
</q-toolbar> <div class="row q-col-gutter-sm">
<q-separator color="grey-4" /> <div class="col-6">
</q-header> <q-select
outlined
<q-page-container> dense
<q-page class="q-pb-md"> emit-value
<div class="row q-pa-md q-col-gutter-sm"> option-value="label"
<div class="col-6"> option-label="label"
<q-select map-options
outlined bg-color="white"
dense v-model="educationData.educationLevel"
emit-value :options="educationLevelOption"
option-value="label" input-debounce="0"
option-label="label" use-input
map-options @filter="(inputValue:string,
bg-color="white" doneFn:Function) => filterSelector(inputValue, doneFn,'educationLevelOption'
v-model="educationData.educationLevel" ) "
:options="educationLevelOption" :rules="[(val) => !!val || `${'กรุณาเลือกระดับการศึกษา'}`]"
input-debounce="0" label="ระดับการศึกษา"
use-input class="inputgreen"
@filter="(inputValue:string, hide-bottom-space
doneFn:Function) => filterSelector(inputValue, doneFn,'educationLevelOption' />
) "
:rules="[(val) => !!val || `${'กรุณาเลือกระดับการศึกษา'}`]"
label="ระดับการศึกษา"
class="inputgreen"
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
v-model="educationData.institute"
label="สถานศึกษา"
bg-color="white"
dense
class="inputgreen"
:rules="[(val) => !!val || `${'กรุณากรอกสถานศึกษา'}`]"
hide-bottom-space
/>
</div>
</div> </div>
<q-card <div class="col-6">
flat <q-input
bordered outlined
class="q-mx-md q-px-md q-pb-md q-mb-md borderCard" v-model="educationData.institute"
> label="สถานศึกษา"
<div class="row col-12 q-gutter-md q-py-sm text-grey-7"> bg-color="white"
<q-radio dense
v-model="isDate" class="inputgreen"
checked-icon="task_alt" :rules="[(val) => !!val || `${'กรุณากรอกสถานศึกษา'}`]"
unchecked-icon="panorama_fish_eye" hide-bottom-space
val="false" />
label="ปี" </div>
class="inputgreen" </div>
dense <q-card
/> flat
<q-radio bordered
v-model="isDate" class="q-px-md q-pb-md q-my-sm borderCard"
checked-icon="task_alt" >
unchecked-icon="panorama_fish_eye" <div class="row col-12 q-gutter-md q-py-sm text-grey-7">
val="true" <q-radio
class="inputgreen" v-model="isDate"
label="วัน/เดือน/ปี" checked-icon="task_alt"
dense unchecked-icon="panorama_fish_eye"
/> val="false"
</div> label="ปี"
<div v-if="isDate === 'false'" class="row q-col-gutter-sm"> class="inputgreen"
<div class="col"> dense
<datepicker />
menu-class-name="modalfix" <q-radio
v-model="educationData.startYear" v-model="isDate"
:locale="'th'" checked-icon="task_alt"
autoApply unchecked-icon="panorama_fish_eye"
year-picker val="true"
:enableTimePicker="false" class="inputgreen"
@update:modelValue=" label="วัน/เดือน/ปี"
(v:number) => dense
(educationData.startDate = new Date( />
`${v}-01-01T00:00:02.010+07:00` </div>
)) <div v-if="isDate === 'false'" class="row q-col-gutter-sm">
" <div class="col">
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
outlined
class="inputgreen"
hide-bottom-space
:model-value="educationData.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="educationData.endYear"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
@update:modelValue="
(v:number) =>
(educationData.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
class="inputgreen"
lazy-rules
outlined
hide-bottom-space
:model-value="educationData.endYear + 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-col-gutter-sm">
<div class="col">
<datepicker
menu-class-name="modalfix"
v-model="educationData.startDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
@update:modelValue="
(v: Date) =>
(educationData.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
class="inputgreen"
dense
lazy-rules
:model-value="date2Thai(educationData.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="educationData.endDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
@update:modelValue="
(v: Date) =>
(educationData.endYear = 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
class="inputgreen"
lazy-rules
:model-value="date2Thai(educationData.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-col-gutter-sm q-px-md">
<div class="col-6">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="educationData.finishDate" v-model="educationData.startYear"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
@update:modelValue="
(v:number) =>
(educationData.startDate = 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
outlined
class="inputgreen"
hide-bottom-space
:model-value="educationData.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="educationData.endYear"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
@update:modelValue="
(v:number) =>
(educationData.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
class="inputgreen"
lazy-rules
outlined
hide-bottom-space
:model-value="educationData.endYear + 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-col-gutter-sm">
<div class="col">
<datepicker
menu-class-name="modalfix"
v-model="educationData.startDate"
:locale="'th'" :locale="'th'"
autoApply autoApply
:enableTimePicker="false" :enableTimePicker="false"
week-start="0" week-start="0"
@update:modelValue="
(v: Date) =>
(educationData.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 }">{{
@ -1237,16 +1140,16 @@ onMounted(async () => {
<template #trigger> <template #trigger>
<q-input <q-input
outlined outlined
bg-color="white"
dense
class="inputgreen" class="inputgreen"
dense
lazy-rules lazy-rules
:model-value="date2Thai(educationData.finishDate)" :model-value="date2Thai(educationData.startDate)"
:rules="[ :rules="[
(val) => !!val || `${'กรุณาเลือกวันที่สำเร็จการศึกษา'}`, (val) =>
!!val || `${'กรุณาเลือกวันที่เริ่มต้นศึกษา'}`,
]" ]"
hide-bottom-space hide-bottom-space
:label="`${'วันที่สำเร็จการศึกษา'}`" :label="`${'วันที่เริ่มต้นศึกษา'}`"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon <q-icon
@ -1260,149 +1163,233 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"> <div class="col">
<q-select <datepicker
outlined menu-class-name="modalfix"
dense v-model="educationData.endDate"
emit-value :locale="'th'"
map-options autoApply
bg-color="white" :enableTimePicker="false"
v-model="educationData.isEducation" week-start="0"
:options="educationOption" @update:modelValue="
option-value="value" (v: Date) =>
class="inputgreen" (educationData.endYear = parseInt(
option-label="label" v.toString().slice(11, 15)
input-debounce="0" ))
use-input "
@filter="(inputValue:string, >
doneFn:Function) => filterSelector(inputValue, doneFn,'educationOption' <template #year="{ year }">{{ year + 543 }}</template>
) " <template #year-overlay-value="{ value }">{{
:rules="[ parseInt(value + 543)
(val) => }}</template>
val !== null || `${'กรุณาเลือกวุฒิการศึกษาในตำแหน่ง'}`, <template #trigger>
]" <q-input
label="เป็นวุฒิการศึกษาในตำแหน่ง" outlined
hide-bottom-space dense
/> class="inputgreen"
</div> lazy-rules
:model-value="date2Thai(educationData.endDate)"
<div class="col-6"> :rules="[
<q-input (val) => !!val || `${'กรุณาเลือกวันที่จบการศึกษา'}`,
outlined ]"
v-model="educationData.degree" hide-bottom-space
label="วุฒิการศึกษา" :label="`${'วันที่จบการศึกษา'}`"
class="inputgreen" >
bg-color="white" <template v-slot:prepend>
dense <q-icon
:rules="[(val) => !!val || `${'กรุณากรอกวุฒิการศึกษา'}`]" name="event"
hide-bottom-space class="cursor-pointer"
/> color="primary"
</div> >
<div class="col-6"> </q-icon>
<q-input </template>
outlined </q-input>
class="inputgreen" </template>
v-model="educationData.field" </datepicker>
label="สาขาวิชา/ทาง"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
v-model="educationData.fundName"
label="ทุน"
class="inputgreen"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.gpa"
label="เกรดเฉลี่ย"
bg-color="white"
dense
mask="#.##"
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.country"
label="ประเทศ"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.other"
label="ข้อมูลติดต่อ"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.duration"
label="ระยะเวลา"
:rules="[(val) => !!val || `${'กรุณากรอกระยะเวลา'}`]"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.durationYear"
label="ระยะเวลาหลักสูตร (ปี)"
:rules="[
(val) => !!val || `${'กรุณากรอกระยะเวลาหลักสูตร (ปี)'}`,
]"
bg-color="white"
type="number"
dense
hide-bottom-space
/>
</div>
<div class="col-12">
<q-input
outlined
class="inputgreen"
v-model="educationData.note"
label="หมายเหตุ"
bg-color="white"
dense
type="textarea"
/>
</div> </div>
</div> </div>
</q-page> </q-card>
</q-page-container> <div class="row q-col-gutter-sm">
<div class="col-6">
<datepicker
menu-class-name="modalfix"
v-model="educationData.finishDate"
: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
bg-color="white"
dense
class="inputgreen"
lazy-rules
:model-value="date2Thai(educationData.finishDate)"
: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-6">
<q-select
outlined
dense
emit-value
map-options
bg-color="white"
v-model="educationData.isEducation"
:options="educationOption"
option-value="value"
class="inputgreen"
option-label="label"
input-debounce="0"
use-input
@filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'educationOption'
) "
:rules="[
(val) =>
val !== null || `${'กรุณาเลือกวุฒิการศึกษาในตำแหน่ง'}`,
]"
label="เป็นวุฒิการศึกษาในตำแหน่ง"
hide-bottom-space
/>
</div>
<q-footer> <div class="col-6">
<q-separator color="grey-4" /> <q-input
<q-toolbar class="fit row wrap justify-end items-start content-start"> outlined
v-model="educationData.degree"
label="วุฒิการศึกษา"
class="inputgreen"
bg-color="white"
dense
:rules="[(val) => !!val || `${'กรุณากรอกวุฒิการศึกษา'}`]"
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.field"
label="สาขาวิชา/ทาง"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
v-model="educationData.fundName"
label="ทุน"
class="inputgreen"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.gpa"
label="เกรดเฉลี่ย"
bg-color="white"
dense
mask="#.##"
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.country"
label="ประเทศ"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.other"
label="ข้อมูลติดต่อ"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.duration"
label="ระยะเวลา"
:rules="[(val) => !!val || `${'กรุณากรอกระยะเวลา'}`]"
bg-color="white"
dense
hide-bottom-space
/>
</div>
<div class="col-6">
<q-input
outlined
class="inputgreen"
v-model="educationData.durationYear"
label="ระยะเวลาหลักสูตร (ปี)"
:rules="[
(val) => !!val || `${'กรุณากรอกระยะเวลาหลักสูตร (ปี)'}`,
]"
bg-color="white"
type="number"
dense
hide-bottom-space
/>
</div>
<div class="col-12">
<q-input
outlined
class="inputgreen"
v-model="educationData.note"
label="หมายเหตุ"
bg-color="white"
dense
type="textarea"
/>
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right">
<q-btn <q-btn
id="onSubmit" id="onSubmit"
type="submit" type="submit"
@ -1414,31 +1401,20 @@ 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="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 />
<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: 50vh" class="scroll">
<q-page class="q-pa-md">
<q-toolbar style="padding: 0px" class="text-primary q-mb-sm"> <q-toolbar style="padding: 0px" class="text-primary q-mb-sm">
<q-space /> <q-space />
<q-input <q-input
@ -1504,9 +1480,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

@ -313,10 +313,11 @@ onMounted(async () => {
}); });
</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 <q-btn
flat flat
round round
color="primary"
dense dense
icon="add" icon="add"
@click="() => ((dialogStatus = 'create'), clearForm(), (dialog = true))" @click="() => ((dialogStatus = 'create'), clearForm(), (dialog = true))"
@ -324,7 +325,7 @@ onMounted(async () => {
<q-tooltip>เพมขอม</q-tooltip> <q-tooltip>เพมขอม</q-tooltip>
</q-btn> </q-btn>
<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>
@ -344,7 +345,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
v-model="mode" v-model="mode"
@ -376,7 +376,7 @@ onMounted(async () => {
/> />
</template> </template>
</q-btn-toggle> </q-btn-toggle>
</q-toolbar> </div>
<d-table <d-table
:grid="mode === 'card'" :grid="mode === 'card'"
@ -495,98 +495,85 @@ 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-card-section style="max-height: 50vh" class="scroll">
</q-toolbar> <div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs">
<q-separator color="grey-4" /> <div class="col-xs-6 col-sm-6 col-md-6">
</q-header> <q-input
outlined
<q-page-container> class="inputgreen"
<q-page class="q-pa-md"> dense
<div class="row col-12 q-col-gutter-x-xs q-col-gutter-y-xs"> bg-color="white"
<div class="col-xs-6 col-sm-6 col-md-6"> v-model="specialSkill.field"
<q-input label="ด้าน"
outlined hide-bottom-space
class="inputgreen" :rules="[
dense (val) => !!val || `${'กรุณากรอกด้านความสามารถพิเศษ'}`,
bg-color="white" ]"
v-model="specialSkill.field" />
label="ด้าน"
hide-bottom-space
:rules="[
(val) => !!val || `${'กรุณากรอกด้านความสามารถพิเศษ'}`,
]"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
outlined
dense
class="inputgreen"
bg-color="white"
v-model="specialSkill.detail"
label="รายละเอียด"
hide-bottom-space
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
class="inputgreen"
outlined
dense
bg-color="white"
v-model="specialSkill.remark"
label="หมายเหตุ"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
class="inputgreen"
outlined
dense
bg-color="white"
v-model="specialSkill.reference"
label="เอกสารอ้างอิง"
/>
</div>
</div> </div>
</q-page> <div class="col-xs-6 col-sm-6 col-md-6">
</q-page-container> <q-input
outlined
dense
class="inputgreen"
bg-color="white"
v-model="specialSkill.detail"
label="รายละเอียด"
hide-bottom-space
:rules="[(val) => !!val || `${'กรุณากรอกรายละเอียด'}`]"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
class="inputgreen"
outlined
dense
bg-color="white"
v-model="specialSkill.remark"
label="หมายเหตุ"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
class="inputgreen"
outlined
dense
bg-color="white"
v-model="specialSkill.reference"
label="เอกสารอ้างอิง"
/>
</div>
</div>
</q-card-section>
<q-footer> <q-separator />
<q-separator color="grey-4" />
<q-toolbar class="fit row wrap justify-end items-start content-start"> <q-card-actions align="right">
<q-btn <q-btn
dense dense
unelevated unelevated
label="บันทึก" label="บันทึก"
id="onSubmit" id="onSubmit"
type="submit" type="submit"
color="public" color="public"
class="q-px-md" class="q-px-md"
> >
<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="historyDialog" class="dialog" persistent> <q-dialog v-model="historyDialog" class="dialog" persistent>

View file

@ -23,13 +23,13 @@ const tab = ref<string>("1");
<q-card> <q-card>
<q-tabs <q-tabs
v-model="tab" v-model="tab"
class="text-grey q-pl-sm"
active-color="blue-8" active-color="blue-8"
align="left" align="left"
bordered bordered
narrow-indicator narrow-indicator
indicator-color="transparent" indicator-color="transparent"
dense dense
class="text-grey q-pl-sm"
> >
<q-tab name="1" label="ประวัติส่วนตัว" /> <q-tab name="1" label="ประวัติส่วนตัว" />
<q-tab name="2" label="ประวัติการเปลี่ยนชื่อ-นามสกุล" /> <q-tab name="2" label="ประวัติการเปลี่ยนชื่อ-นามสกุล" />

View file

@ -8,22 +8,23 @@ import NotReceiveSalary from "@/modules/04_registryNew/components/detail/Salary/
const tab = ref<string>("1"); const tab = ref<string>("1");
</script> </script>
<template> <template>
<div class="row items-center q-mb-md"> <div class="row items-center q-my-md">
<div class="text-dark row items-center text-weight-bold"> <div class="text-dark row items-center q-px-md">
<q-icon name="mdi-cash" class="q-mr-md" size="sm" /> <q-icon name="mdi-account" class="q-mr-md" size="22px" />
<h3 class="resigtry-tab-title">อมลเงนเดอน/าจาง</h3> <div class="text-subtitle1 text-weight-bold">อมลเงนเดอน/าจาง</div>
</div> </div>
</div> </div>
<q-separator /> <q-separator />
<q-tabs <q-tabs
v-model="tab" v-model="tab"
class="text-grey" active-color="blue-8"
active-color="blue"
indicator-color="white"
align="left" align="left"
narrow-indicator
bordered bordered
narrow-indicator
indicator-color="transparent"
dense
class="text-grey q-pl-sm"
> >
<q-tab name="1" label="ตำแหน่ง/เงินเดือน" /> <q-tab name="1" label="ตำแหน่ง/เงินเดือน" />
<q-tab name="2" label="บันทึกวันที่ไม่ได้รับเงินเดือนฯ" /> <q-tab name="2" label="บันทึกวันที่ไม่ได้รับเงินเดือนฯ" />

View file

@ -402,8 +402,8 @@ onMounted(async () => {
</div> </div>
<div class="absolute-center-left q-ml-lg"> <div class="absolute-center-left q-ml-lg">
<q-avatar size="90px"> <q-avatar size="90px" class="bg-grey-2" >
<img :src="profilePicture" /> <q-img :src="profilePicture"/>
</q-avatar> </q-avatar>
<q-btn <q-btn
round round