Merge branch 'develop' into devTee

This commit is contained in:
STW_TTTY\stwtt 2024-05-28 15:44:47 +07:00
commit 2e28b3980e
33 changed files with 1130 additions and 656 deletions

View file

@ -10,7 +10,7 @@ import { useQuasar } from "quasar";
const mixin = useCounterMixin(); // const mixin = useCounterMixin(); //
const $q = useQuasar(); const $q = useQuasar();
const { showLoader, hideLoader, success, messageError } = mixin; const { showLoader, hideLoader, success, messageError, dialogConfirm } = mixin;
const myForm = ref<any>(); const myForm = ref<any>();
const props = defineProps({ const props = defineProps({
@ -30,35 +30,34 @@ const props = defineProps({
const subject = ref<string>(""); const subject = ref<string>("");
const body = ref<string>(""); const body = ref<string>("");
async function submit() { function onSubmit() {
myForm.value.validate().then(async (result: boolean) => { dialogConfirm($q, () => {
if (result) { showLoader();
// props.savaForm(reason.value); http
showLoader(); .put(config.API.replyMessage(props.idInbox), {
await http subject: subject.value,
.put(config.API.replyMessage(props.idInbox), { body: body.value,
subject: subject.value, })
body: body.value, .then(() => {
}) props.clickClose();
.then((res) => { success($q, "ส่งข้อความสำเร็จ");
props.clickClose() })
success($q, "ส่งข้อความสำเร็จ"); .catch((e) => {
}) messageError($q, e);
.catch((e) => { })
messageError($q, e); .finally(() => {
}) hideLoader();
.finally(() => { });
hideLoader();
});
}
}); });
} }
</script> </script>
<template> <template>
<q-dialog v-model="props.modal" persistent> <q-dialog v-model="props.modal" persistent>
<q-card style="width: 40vw; max-width: 40vw"> <q-card
<q-form ref="myForm"> :style="$q.screen.gt.xs ? 'width: 40vw; max-width: 40vw' : 'width: 100%'"
>
<q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader tittle="ส่งข้อความ" :close="clickClose" /> <DialogHeader tittle="ส่งข้อความ" :close="clickClose" />
<q-separator /> <q-separator />
<q-card-section class="q-pa-sm bg-grey-1"> <q-card-section class="q-pa-sm bg-grey-1">
@ -98,7 +97,7 @@ async function submit() {
unelevated unelevated
label="ส่งข้อความ" label="ส่งข้อความ"
color="public" color="public"
@click="submit" type="submit"
class="q-px-md" class="q-px-md"
> >
<!-- icon="mdi-content-save-outline" --> <!-- icon="mdi-content-save-outline" -->

View file

@ -11,7 +11,7 @@ const { date2Thai } = useCounterMixin();
const { scrollContainer } = storeToRefs(store); const { scrollContainer } = storeToRefs(store);
function getOnlineStatus(option: "icon" | "status") { function getOnlineStatus(option: "icon" | "status") {
const isAdmin = store.userStatus.some((u) => u.role.includes("admin")); const isAdmin = store.userStatus.some((u: any) => u.role.includes("admin"));
if (option === "icon") return isAdmin ? "green" : "grey"; if (option === "icon") return isAdmin ? "green" : "grey";
if (option === "status") return isAdmin ? "ออนไลน์" : "ออฟไลน์"; if (option === "status") return isAdmin ? "ออนไลน์" : "ออฟไลน์";
} }

View file

@ -6,6 +6,7 @@ import router from "@/router";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import keycloak from "@/plugins/keycloak";
import PopupReplyInbox from "@/components/PopupReplyInbox.vue"; import PopupReplyInbox from "@/components/PopupReplyInbox.vue";
import PopupDetailInbox from "@/components/PopupDetailInbox.vue"; import PopupDetailInbox from "@/components/PopupDetailInbox.vue";
@ -13,7 +14,7 @@ const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { showLoader, hideLoader, date2Thai, messageError } = mixin; const { showLoader, hideLoader, date2Thai, messageError } = mixin;
const fullname = ref<string>("ธัญลักษณ์"); const fullname = ref<string>("");
const inboxList = ref<any>([ const inboxList = ref<any>([
// { // {
// no: 1, // no: 1,
@ -108,6 +109,9 @@ const items = ref<any>([
]); ]);
onMounted(async () => { onMounted(async () => {
await fetchlistInbox(1); await fetchlistInbox(1);
if (keycloak.tokenParsed != null) {
fullname.value = keycloak.tokenParsed.name;
}
}); });
const fetchlistInbox = async (index: number) => { const fetchlistInbox = async (index: number) => {
index === 1 && showLoader(); index === 1 && showLoader();
@ -257,7 +261,7 @@ const thaiOptions: Intl.DateTimeFormatOptions = {
<q-card <q-card
flat flat
bordered bordered
:style="$q.screen.gt.xs ? 'max-height: 74vh' : 'height: 100px;'" :style="$q.screen.gt.xs ? 'max-height: 74vh' : 'height: 500px;'"
class="q-pb-sm col-12" class="q-pb-sm col-12"
> >
<div class="col-12 row q-px-md q-pt-md q-pb-sm"> <div class="col-12 row q-px-md q-pt-md q-pb-sm">

View file

@ -59,10 +59,6 @@ const saveData = async () => {
const createTransfer = async () => { const createTransfer = async () => {
showLoader(); showLoader();
const formData = new FormData(); const formData = new FormData();
// const blob = files.value.slice(0, files.value[0].size);
// const newFile = new File(blob, nameFile.value, {
// type: files.value[0].type,
// });
formData.append("Organization", tranferOrg.value); formData.append("Organization", tranferOrg.value);
formData.append("Reason", noteReason.value); formData.append("Reason", noteReason.value);
formData.append("file", files.value); formData.append("file", files.value);
@ -145,7 +141,9 @@ const fileUploadDoc = async (file: any) => {
<div class="col-xs-12 col-sm-12"> <div class="col-xs-12 col-sm-12">
<div class="col-12 row q-pa-sm q-col-gutter-sm"> <div class="col-12 row q-pa-sm q-col-gutter-sm">
<q-input <q-input
class="col-12" :class="
routeName != 'addTransfer' ? 'col-12' : 'col-12 inputgreen'
"
dense dense
outlined outlined
v-model="tranferOrg" v-model="tranferOrg"
@ -154,7 +152,9 @@ const fileUploadDoc = async (file: any) => {
:rules="[(val:string) => !!val || `${'กรุณากรอกหน่วยงานที่ขอโอนไป'}`]" :rules="[(val:string) => !!val || `${'กรุณากรอกหน่วยงานที่ขอโอนไป'}`]"
/> />
<q-input <q-input
class="col-12" :class="
routeName != 'addTransfer' ? 'col-12' : 'col-12 inputgreen'
"
dense dense
outlined outlined
v-model="noteReason" v-model="noteReason"
@ -166,7 +166,7 @@ const fileUploadDoc = async (file: any) => {
<div class="col-12 row" v-if="routeName == 'addTransfer'"> <div class="col-12 row" v-if="routeName == 'addTransfer'">
<q-file <q-file
v-model="files" v-model="files"
class="col-xs-12 col-sm-12" class="col-xs-12 col-sm-12 inputgreen"
outlined outlined
dense dense
lazy-rules lazy-rules

View file

@ -234,7 +234,7 @@ const clickBack = () => {
</div> </div>
</div> </div>
<div> <div>
<q-table <d-table
flat flat
bordered bordered
dense dense
@ -290,52 +290,39 @@ const clickBack = () => {
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
</q-table> <template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card
bordered
flat
@click="router.push(`/transfer/` + props.row.id)"
>
<q-list>
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label v-if="col.name === 'no'">
{{ props.rowIndex + 1 }}
</q-item-label>
<q-item-label v-else>{{
col.value ?? "-"
}}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
</template>
</d-table>
</div> </div>
</q-card> </q-card>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<style scoped lang="scss"> <style scoped lang="scss"></style>
.custom-table2 {
max-height: 64vh;
.q-table tr:nth-child(odd) td {
background: white;
}
.q-table tr:nth-child(even) td {
background: #f8f8f8;
}
.q-table thead tr {
background: #ecebeb;
}
.q-table thead tr th {
position: sticky;
}
.q-table td:nth-of-type(2) {
z-index: 3 !important;
}
.q-table th:nth-of-type(2),
.q-table td:nth-of-type(2) {
position: sticky;
left: 0;
z-index: 1;
}
/* this will be the loading indicator */
.q-table thead tr:last-child th {
/* height of all previous header rows */
top: 48px;
}
.q-table thead tr:first-child th {
top: 0;
}
}
</style>

View file

@ -20,7 +20,7 @@ const props = defineProps({
fectData: { type: Function, require: true }, fectData: { type: Function, require: true },
}); });
const id = ref<string>(route.params.id.toString()); const id = ref<string>(route.params.id ? route.params.id.toString() : "");
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { dialogConfirm, messageError, showLoader, hideLoader, success } = mixin; const { dialogConfirm, messageError, showLoader, hideLoader, success } = mixin;

View file

@ -186,7 +186,12 @@ function downloadFile(data: string) {
<div class="col-xs-12 col-sm-12"> <div class="col-xs-12 col-sm-12">
<div class="col-12 row q-pa-sm q-col-gutter-sm"> <div class="col-12 row q-pa-sm q-col-gutter-sm">
<q-input <q-input
class="col-md-8 col-xs-12" :class="
routeName !== 'AddRetire'
? 'col-md-8 col-xs-12'
: 'col-md-8 col-xs-12 inputgreen'
"
class=""
dense dense
outlined outlined
v-model="tranferOrg" v-model="tranferOrg"
@ -195,8 +200,13 @@ function downloadFile(data: string) {
:readonly="routeName != 'AddRetire'" :readonly="routeName != 'AddRetire'"
:rules="[(val:string) => !!val || `${'กรุณากรอกสถานที่ยื่นขอลาออกจากราชการ'}`]" :rules="[(val:string) => !!val || `${'กรุณากรอกสถานที่ยื่นขอลาออกจากราชการ'}`]"
/> />
<datepicker <datepicker
class="col-md-2 col-xs-12" :class="
routeName !== 'AddRetire'
? 'col-md-2 col-xs-12'
: 'col-md-2 col-xs-12 inputgreen'
"
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="dateCommand" v-model="dateCommand"
:locale="'th'" :locale="'th'"
@ -218,7 +228,7 @@ function downloadFile(data: string) {
readonly readonly
dense dense
hide-bottom-space hide-bottom-space
class="full-width datepicker" class="full-width"
:model-value=" :model-value="
dateCommand != null ? date2Thai(dateCommand) : null dateCommand != null ? date2Thai(dateCommand) : null
" "
@ -240,7 +250,11 @@ function downloadFile(data: string) {
</template> </template>
</datepicker> </datepicker>
<datepicker <datepicker
class="col-md-2 col-xs-12" :class="
routeName !== 'AddRetire'
? 'col-md-2 col-xs-12'
: 'col-md-2 col-xs-12 inputgreen'
"
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="dateLeave" v-model="dateLeave"
:locale="'th'" :locale="'th'"
@ -262,7 +276,7 @@ function downloadFile(data: string) {
dense dense
hide-bottom-space hide-bottom-space
:readonly="routeName != 'AddRetire'" :readonly="routeName != 'AddRetire'"
class="full-width datepicker" class="full-width"
:model-value=" :model-value="
dateLeave != null ? date2Thai(dateLeave) : null dateLeave != null ? date2Thai(dateLeave) : null
" "
@ -284,7 +298,9 @@ function downloadFile(data: string) {
</template> </template>
</datepicker> </datepicker>
<q-input <q-input
class="col-12" :class="
routeName !== 'AddRetire' ? 'col-12' : 'col-12 inputgreen'
"
dense dense
outlined outlined
v-model="noteReason" v-model="noteReason"
@ -300,7 +316,7 @@ function downloadFile(data: string) {
<div class="col-12 row" v-if="routeName == 'AddRetire'"> <div class="col-12 row" v-if="routeName == 'AddRetire'">
<q-file <q-file
v-model="files" v-model="files"
class="col-xs-12 col-sm-12" class="col-xs-12 col-sm-12 inputgreen"
outlined outlined
dense dense
lazy-rules lazy-rules
@ -314,18 +330,6 @@ function downloadFile(data: string) {
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="attach_file" /> </template <q-icon name="attach_file" /> </template
></q-file> ></q-file>
<!-- <q-uploader
flat
bordered
class="col-xs-12 col-sm-12"
accept=".jpg,.png,.pdf,.csv,.doc"
url="http://localhost:4444/upload"
label="เอกสารเพิ่มเติม"
type="file"
@added="fileUploadDoc"
@removed="filesNull"
style="max-width: px"
/> -->
</div> </div>
<div class="col-12 row"> <div class="col-12 row">
<q-card <q-card

View file

@ -256,7 +256,7 @@ const clickBack = () => {
<div v-if="col.name == 'no'"> <div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }} {{ props.rowIndex + 1 }}
</div> </div>
<div> <div v-else>
{{ col.value }} {{ col.value }}
</div> </div>
</q-td> </q-td>

View file

@ -274,7 +274,7 @@ onMounted(async () => {
<template> <template>
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-3 q-mt-sm q-pr-sm row"> <div class="col-xs-12 col-md-3 q-mt-sm q-pr-sm row">
<q-card class="col-12" flat bordered> <q-card class="col-12" flat bordered>
<div class="q-gutter-sm col-12"> <div class="q-gutter-sm col-12">
<q-list class="rounded-borders q-pt-sm" dense> <q-list class="rounded-borders q-pt-sm" dense>
@ -299,7 +299,7 @@ onMounted(async () => {
</q-card> </q-card>
</div> </div>
<div class="col-sm-12 col-md-9 row"> <div class="col-xs-12 col-md-9 row">
<div class="q-mt-sm col-12"> <div class="q-mt-sm col-12">
<div class="row col-12 q-gutter-sm"> <div class="row col-12 q-gutter-sm">
<div class="demo-app-main"> <div class="demo-app-main">

View file

@ -205,11 +205,11 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
</q-card> </q-card>
</div> </div>
<div> <div>
<q-table <d-table
ref="table" ref="table"
flat flat
bordered bordered
class="custom-table2"
v-bind="attrs" v-bind="attrs"
virtual-scroll virtual-scroll
:virtual-scroll-sticky-size-start="48" :virtual-scroll-sticky-size-start="48"
@ -244,7 +244,7 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
<template v-slot:item="props"> <template v-slot:item="props">
<slot v-bind="props" name="item"></slot> <slot v-bind="props" name="item"></slot>
</template> </template>
</q-table> </d-table>
</div> </div>
</template> </template>

View file

@ -452,28 +452,30 @@ onMounted(async () => {
</q-td> </q-td>
</q-tr></template </q-tr></template
> >
<!-- <template #item="props"> <template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3"> <div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat> <q-card bordered flat>
<q-list> <q-list>
<q-item <q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')" v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name" :key="col.name"
> >
<q-item-section> <q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label> <q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label v-if="col.name === 'no'"> <q-item-label v-if="col.name === 'no'">
{{ props.rowIndex + 1 }} {{ props.rowIndex + 1 }}
</q-item-label> </q-item-label>
<q-item-label v-else>{{ col.value }}</q-item-label> <q-item-label v-else>{{
</q-item-section> col.value ?? "-"
</q-item> }}</q-item-label>
</q-list> </q-item-section>
</q-card> </q-item>
</div> </q-list>
</template> --> </q-card>
</div>
</template>
</d-table> </d-table>
</div> </div>
</q-card-section> </q-card-section>

View file

@ -152,7 +152,7 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
</script> </script>
<template> <template>
<q-table <d-table
ref="table" ref="table"
flat flat
bordered bordered
@ -207,6 +207,52 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
<template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat>
<q-list @click="redirectToDetail(props.row)">
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label v-if="col.name === 'no'">
{{ props.rowIndex + 1 }}
</q-item-label>
<q-item-label v-else>{{ col.value }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
<q-separator
v-if="
props.row.step === 'CHECK_SPEC' ||
props.row.step === 'PREPARE_DOC_V1' ||
props.row.step === 'CHECK_DOC_V1'
"
/>
<q-card-actions align="around">
<q-btn
v-if="
props.row.step === 'CHECK_SPEC' ||
props.row.step === 'PREPARE_DOC_V1' ||
props.row.step === 'CHECK_DOC_V1'
"
flat
dense
round
color="red"
icon="delete"
@click.stop="onCkilckDelete(props.row.id)"
>
<q-tooltip>ลบ</q-tooltip>
</q-btn>
</q-card-actions>
</q-card>
</div>
</template>
<template v-slot:pagination="scope"> <template v-slot:pagination="scope">
งหมด {{ store.row.length }} รายการ งหมด {{ store.row.length }} รายการ
<q-pagination <q-pagination
@ -219,7 +265,7 @@ watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
:max="Number(props.maxPage)" :max="Number(props.maxPage)"
></q-pagination> ></q-pagination>
</template> </template>
</q-table> </d-table>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>

View file

@ -295,7 +295,7 @@ watch(
:options="options" :options="options"
option-value="val" option-value="val"
label="ค้นหาสถานะ" label="ค้นหาสถานะ"
style="width: 35vw" :style="!$q.screen.gt.xs ? '' : 'width: 35vw'"
@update:model-value="fetchEvaluteList" @update:model-value="fetchEvaluteList"
use-input use-input
@filter="(inputValue:any,doneFn:Function) => filterOption(inputValue, doneFn) " @filter="(inputValue:any,doneFn:Function) => filterOption(inputValue, doneFn) "

View file

@ -1,3 +1,4 @@
div
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, defineProps, watch } from "vue"; import { ref, reactive, defineProps, watch } from "vue";
import { useAppealComplainStore } from "@/modules/07_appealComplain/store"; import { useAppealComplainStore } from "@/modules/07_appealComplain/store";
@ -96,7 +97,7 @@ function validateForm() {
} }
} }
if (hasError.every((result) => result === true)) { if (hasError.every((result) => result === true)) {
onSubmit(formData); onSubmit(formData);
} else { } else {
console.log("ไม่ผ่าน "); console.log("ไม่ผ่าน ");
console.log(hasError); console.log(hasError);
@ -161,7 +162,7 @@ function onSubmit(data: any) {
</script> </script>
<template> <template>
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12"> <div class="col-sm-12 col-md-12 col-xs-12">
<form @submit.prevent="validateForm"> <form @submit.prevent="validateForm">
<q-card bordered> <q-card bordered>
<div class="q-pa-md"> <div class="q-pa-md">
@ -184,10 +185,14 @@ function onSubmit(data: any) {
<q-icon name="mdi-information-outline" size="20px" /> <q-icon name="mdi-information-outline" size="20px" />
คำอทธรณ/องทกขจะยงไมสมบรณ คำอทธรณ/องทกขจะยงไมสมบรณ
จนกวาผทธรณ/องทกขจะ มพแบบฟอรมคำรอง จากระบบ จนกวาผทธรณ/องทกขจะ มพแบบฟอรมคำรอง จากระบบ
พรอมเอกสารหลกฐานทงหมดนำสงไปรษณให กพค. หรอนำเอกสารทงหมดไปสงดวยตนเองท 14 อาคารศรลทรพย พรอมเอกสารหลกฐานทงหมดนำสงไปรษณให กพค.
หรอนำเอกสารทงหมดไปสงดวยตนเองท 14 อาคารศรลทรพย
</q-banner> </q-banner>
</div> </div>
<div class="q-gutter-sm" v-else-if="isReadOnly||formData.status === 'NEW'"> <div
class="q-gutter-sm"
v-else-if="isReadOnly || formData.status === 'NEW'"
>
<q-banner <q-banner
inline-actions inline-actions
bordered bordered
@ -202,7 +207,7 @@ function onSubmit(data: any) {
</q-banner> </q-banner>
</div> </div>
<div class="row q-gutter-x-sm"> <div class="row q-gutter-x-sm">
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-select <q-select
:class="inputEdit(isReadOnly)" :class="inputEdit(isReadOnly)"
:readonly="isReadOnly" :readonly="isReadOnly"
@ -221,22 +226,20 @@ function onSubmit(data: any) {
hide-bottom-space hide-bottom-space
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<div class="col-3"> <q-input
<q-input :class="inputEdit(isReadOnly)"
:class="inputEdit(isReadOnly)" :readonly="isReadOnly"
:readonly="isReadOnly" ref="titleRef"
ref="titleRef" :rules="[
:rules="[ (val) => !!val || 'กรุณากรอกเรื่องอุทธรณ์/ร้องทุกข์',
(val) => !!val || 'กรุณากรอกเรื่องอุทธรณ์/ร้องทุกข์', ]"
]" v-model="formData.title"
v-model="formData.title" dense
dense outlined
outlined label="เรื่องอุทธรณ์/ร้องทุกข์"
label="เรื่องอุทธรณ์/ร้องทุกข์" hide-bottom-space
hide-bottom-space />
/>
</div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View file

@ -14,7 +14,7 @@ import config from "@/app.config";
import type { FormType } from "@/modules/07_appealComplain/interface/response/mainType"; import type { FormType } from "@/modules/07_appealComplain/interface/response/mainType";
import type { DataOption } from "@/modules/07_appealComplain/interface/index/main"; import type { DataOption } from "@/modules/07_appealComplain/interface/index/main";
const total = ref<number>(0) const total = ref<number>(0);
const currentPage = ref<number>(1); const currentPage = ref<number>(1);
const maxPage = ref<number>(1); const maxPage = ref<number>(1);
const page = ref<number>(1); const page = ref<number>(1);
@ -175,7 +175,7 @@ const getData = async () => {
) )
) )
.then((res: any) => { .then((res: any) => {
total.value = res.data.result.total total.value = res.data.result.total;
maxPage.value = Math.ceil(res.data.result.total / rowsPerPage.value); maxPage.value = Math.ceil(res.data.result.total / rowsPerPage.value);
let data = res.data.result.data; let data = res.data.result.data;
dataStore.fetchAppealComplain(data); dataStore.fetchAppealComplain(data);
@ -280,7 +280,7 @@ onMounted(async () => {
</div> </div>
</div> </div>
<div class="row col-12 q-col-gutter-sm q-mb-sm"> <div class="row col-12 q-col-gutter-sm q-mb-sm">
<div class="col-2"> <div class="col-xs-12 col-md-2">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formData.year" v-model="formData.year"
@ -316,7 +316,7 @@ onMounted(async () => {
</datepicker> </datepicker>
</div> </div>
<div class="col-2"> <div class="col-xs-12 col-md-2">
<q-select <q-select
v-model="formData.type" v-model="formData.type"
label="ประเภท" label="ประเภท"
@ -330,7 +330,7 @@ onMounted(async () => {
@update:model-value="dataUpdate" @update:model-value="dataUpdate"
/> />
</div> </div>
<div class="col-2"> <div class="col-xs-12 col-md-2">
<q-select <q-select
v-model="formData.status" v-model="formData.status"
label="สถานะ" label="สถานะ"

View file

@ -77,6 +77,33 @@ const pagination = ref({
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
<template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat @click="redirectViewDetail(props.row.id)">
<q-list>
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label>
<div v-if="col.name === 'name'">
{{
`${props.row.prefix}${props.row.firstname} ${props.row.lastname}`
}}
</div>
<div v-else>
{{ col.value ? col.value : "-" }}
</div></q-item-label
>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
</template>
<template v-slot:pagination="scope"> <template v-slot:pagination="scope">
งหมด {{ total }} รายการ งหมด {{ total }} รายการ
<q-pagination <q-pagination

View file

@ -152,6 +152,54 @@ function onClickApprove(type: string = "") {
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
<template v-slot:item="props">
<div
class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3 grid-style-transition"
:style="props.selected ? 'transform: scale(0.95);' : ''"
>
<q-card
bordered
flat
:class="
props.selected
? $q.dark.isActive
? 'bg-grey-9'
: 'bg-grey-2'
: ''
"
>
<q-card-section>
<q-checkbox
dense
v-model="props.selected"
:label="props.row.name"
/>
</q-card-section>
<q-separator />
<q-list @click="redirectViewDetail(props.row.id)">
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label>
<div v-if="col.name === 'name'">
{{
`${props.row.prefix}${props.row.firstname} ${props.row.lastname}`
}}
</div>
<div v-else>
{{ col.value ? col.value : "-" }}
</div></q-item-label
>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
</template>
<template v-slot:pagination="scope"> <template v-slot:pagination="scope">
งหมด {{ total }} รายการ งหมด {{ total }} รายการ
<q-pagination <q-pagination

View file

@ -212,7 +212,7 @@ onMounted(() => {
<template> <template>
<q-scroll-area <q-scroll-area
style="height: 100vh" style="height: 100vh; width: auto"
class="bg-white row col-12 text-dark q-pa-md" class="bg-white row col-12 text-dark q-pa-md"
> >
<div class="text-weight-bold text-body2"> <div class="text-weight-bold text-body2">

View file

@ -462,7 +462,7 @@ const title = computed(() => {
<q-card-section class="q-pa-none scroll" style="max-height: 75vh"> <q-card-section class="q-pa-none scroll" style="max-height: 75vh">
<div class="col-12 row"> <div class="col-12 row">
<div class="bg-grey-1 q-pa-md col-3 row lineRight"> <div class="bg-grey-1 q-pa-md col-xs-12 col-md-3 row lineRight">
<div class="col-12 fit"> <div class="col-12 fit">
<div class="row col-12" v-if="numpage !== 3"> <div class="row col-12" v-if="numpage !== 3">
<q-checkbox <q-checkbox
@ -617,14 +617,14 @@ const title = computed(() => {
</div> </div>
</div> </div>
<div class="col-9"> <div class="col-xs-12 col-md-9">
<div class="row q-pa-md q-col-gutter-sm"> <div class="row q-pa-md q-col-gutter-sm">
<div class="col-12"> <div class="col-12">
<span class="text-body2 text-weight-medium" <span class="text-body2 text-weight-medium"
>รายละเอยดตวช</span >รายละเอยดตวช</span
> >
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-6">
<q-card bordered class="full-height q-pa-sm"> <q-card bordered class="full-height q-pa-sm">
<div class="q-pa-sm q-col-gutter-lg"> <div class="q-pa-sm q-col-gutter-lg">
<div class="col-12 row" v-if="numpage !== 3"> <div class="col-12 row" v-if="numpage !== 3">
@ -733,7 +733,7 @@ const title = computed(() => {
</div> </div>
</q-card> </q-card>
</div> </div>
<div class="col-6 row"> <div class="col-xs-12 col-6 row">
<div class="row col-12 card-box"> <div class="row col-12 card-box">
<div <div
class="col-12 bg-grey-2 row items-center text-weight-medium" class="col-12 bg-grey-2 row items-center text-weight-medium"

View file

@ -282,7 +282,7 @@ watch(
<q-card-section class="q-pa-none scroll" style="max-height: 80vh"> <q-card-section class="q-pa-none scroll" style="max-height: 80vh">
<div class="row"> <div class="row">
<div class="bg-grey-1 q-pa-md col-3 row lineRight"> <div class="bg-grey-1 q-pa-md col-xs-12 col-md-3 row lineRight">
<div class="col-12 q-col-gutter-sm fit"> <div class="col-12 q-col-gutter-sm fit">
<div class="col-12"> <div class="col-12">
<q-select <q-select
@ -362,13 +362,13 @@ watch(
</div> </div>
</div> </div>
<div class="col-9 q-pa-md q-col-gutter-sm"> <div class="col-xs-12 col-md-9 q-pa-md q-col-gutter-sm">
<span class="text-body2 text-weight-medium" <span class="text-body2 text-weight-medium"
>รายละเอยดสมรรถนะ</span >รายละเอยดสมรรถนะ</span
> >
<div class="row q-col-gutter-sm"> <div class="row q-col-gutter-sm">
<div class="col-5 row"> <div class="col-xs-12 col-md-5 row">
<q-card bordered class="fit q-pa-sm no-shadow"> <q-card bordered class="fit q-pa-sm no-shadow">
<div <div
v-for="(field, index) in Object.keys(fieldDetailLabels)" v-for="(field, index) in Object.keys(fieldDetailLabels)"
@ -442,14 +442,13 @@ watch(
</div> </div>
</q-card> </q-card>
</div> </div>
<div class="col-7"> <div class="col-xs-12 col-md-7">
<q-table <d-table
flat flat
bordered bordered
dense dense
:paging="true" :paging="true"
row-key="level" row-key="level"
class="custom-table2"
virtual-scroll virtual-scroll
:rows="dataListCapacityDetails" :rows="dataListCapacityDetails"
hide-pagination hide-pagination
@ -486,6 +485,32 @@ watch(
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
<template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat>
<q-list>
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{
col.label
}}</q-item-label>
<q-item-label v-if="(col.name = 'description')">
<span v-html="col.value"></span
></q-item-label>
<q-item-label v-else>{{
col.value ?? "-"
}}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
</template>
<template v-slot:no-data="{ icon, message }"> <template v-slot:no-data="{ icon, message }">
<div <div
class="q-pa-md text-weight-bold full-width text-center" class="q-pa-md text-weight-bold full-width text-center"
@ -493,7 +518,7 @@ watch(
<span style="font-size: 16px">ไมพบขอมลสมรรถนะ</span> <span style="font-size: 16px">ไมพบขอมลสมรรถนะ</span>
</div> </div>
</template> </template>
</q-table> </d-table>
<!-- <q-card bordered class="col-12 no-shadow"> <!-- <q-card bordered class="col-12 no-shadow">
<div class="bg-grey-2 row q-py-sm text-weight-bold col-12"> <div class="bg-grey-2 row q-py-sm text-weight-bold col-12">

View file

@ -1,4 +1,3 @@
divdiv
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch } from "vue"; import { ref, watch } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
@ -79,7 +78,10 @@ watch(
<template> <template>
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-card class="col-12" style="width: 45%"> <q-card
class="col-12"
:style="!$q.screen.gt.xs ? 'width: 100%' : 'width: 45%'"
>
<DialogHeader :tittle="'คำอธิบายผลสำเร็จของงาน'" :close="closeDialog" /> <DialogHeader :tittle="'คำอธิบายผลสำเร็จของงาน'" :close="closeDialog" />
<q-separator /> <q-separator />
<q-card-section> <q-card-section>

View file

@ -35,22 +35,19 @@ const splitterModel = ref<number>(12);
</script> </script>
<template> <template>
<q-splitter v-model="splitterModel" disable> <q-splitter
v-if="$q.screen.gt.xs"
v-model="splitterModel"
:horizontal="!$q.screen.gt.xs"
disable
>
<template v-slot:before> <template v-slot:before>
<q-tabs <q-tabs
v-model="store.tabMain" v-model="store.tabMain"
vertical :vertical="$q.screen.gt.xs"
class="text-grey-7 text-weight-light" class="text-grey-7 text-weight-light"
active-class="bg-blue-1 text-blue-8 text-weight-bold" active-class="bg-blue-1 text-blue-8 text-weight-bold"
> >
<!-- <q-tab
class="hover-tab"
v-for="(tab, index) in itemsTab"
:key="index"
:name="tab.name"
:icon="tab.icon"
:label="tab.label"
/> -->
<q-tab name="1" label="จัดทำข้อตกลง" /> <q-tab name="1" label="จัดทำข้อตกลง" />
<q-tab <q-tab
name="2" name="2"
@ -62,12 +59,6 @@ const splitterModel = ref<number>(12);
label="รายงานผลสำเร็จของงาน" label="รายงานผลสำเร็จของงาน"
:disable="store.tabOpen < 3" :disable="store.tabOpen < 3"
/> />
<!-- <q-tab name="3" label="ผู้บังคับบัญชา">
<div class="text-caption">เหนอขนไป</div>
</q-tab>
<q-tab name="4" label="ผู้บังคับบัญชา">
<div class="text-caption">เหนอขนไปอกชนหน</div>
</q-tab> -->
<q-tab name="5" label="ไฟล์เอกสาร" /> <q-tab name="5" label="ไฟล์เอกสาร" />
</q-tabs> </q-tabs>
</template> </template>
@ -96,6 +87,42 @@ const splitterModel = ref<number>(12);
</q-tab-panels> </q-tab-panels>
</template> </template>
</q-splitter> </q-splitter>
<q-list bordered class="rounded-borders" v-else>
<q-expansion-item
expand-separator
label="จัดทำข้อตกลง"
@click="store.tabMain = '1'"
>
<Assessment v-if="store.tabMain === '1'" />
</q-expansion-item>
<q-expansion-item
expand-separator
label="รายงานความก้าวหน้า"
@click="store.tabMain = '2'"
:disable="store.tabOpen < 2"
>
<Assessment v-if="store.tabMain === '2'" :type="'evaluator'" />
</q-expansion-item>
<q-expansion-item
expand-separator
label="รายงานผลสำเร็จของงาน"
@click="store.tabMain = '3'"
:disable="store.tabOpen < 3"
>
<Assessment v-if="store.tabMain === '3'" :type="'commander'" />
</q-expansion-item>
<q-expansion-item
expand-separator
label="ไฟล์เอกสาร"
@click="store.tabMain = '5'"
>
<File v-if="store.tabMain === '5'" />
</q-expansion-item>
</q-list>
</template> </template>
<style scoped> <style scoped>

View file

@ -238,7 +238,7 @@ const isEditStep3 = computed(() => {
</script> </script>
<template> <template>
<q-card bordered style="border-radius: 5px" class="no-shadow"> <q-card bordered style="border-radius: 5px" class="no-shadow q-mt-sm">
<q-card-section class="bg-grey-2 q-py-sm"> <q-card-section class="bg-grey-2 q-py-sm">
<div class="row items-center no-wrap"> <div class="row items-center no-wrap">
<div class="col"> <div class="col">
@ -275,7 +275,7 @@ const isEditStep3 = computed(() => {
</q-card-section> </q-card-section>
<q-separator /> <q-separator />
<q-card-section class="q-pa-sm"> <q-card-section class="q-pa-sm">
<q-table <d-table
ref="table" ref="table"
:columns="columns" :columns="columns"
:rows="rows" :rows="rows"
@ -285,7 +285,6 @@ const isEditStep3 = computed(() => {
bordered bordered
dense dense
hide-pagination hide-pagination
class="custom-table2"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
:rows-per-page-options="[20]" :rows-per-page-options="[20]"
no-data-label="ไม่มีข้อมูล" no-data-label="ไม่มีข้อมูล"
@ -331,31 +330,6 @@ const isEditStep3 = computed(() => {
</q-tooltip> </q-tooltip>
</q-btn> </q-btn>
</q-btn-group> </q-btn-group>
<!-- <q-rating
v-model="props.row.point"
max="5"
size="sm"
color="grey"
:color-selected="store.ratingColors"
label="ระดับการประเมินพฤติกรรม"
disable
>
<template v-slot:tip-1>
<q-tooltip>{{ props.row.achievement1 }}</q-tooltip>
</template>
<template v-slot:tip-2>
<q-tooltip>{{ props.row.achievement2 }}</q-tooltip>
</template>
<template v-slot:tip-3>
<q-tooltip>{{ props.row.achievement3 }}</q-tooltip>
</template>
<template v-slot:tip-4>
<q-tooltip>{{ props.row.achievement4 }}</q-tooltip>
</template>
<template v-slot:tip-5>
<q-tooltip>{{ props.row.achievement5 }}</q-tooltip>
</template>
</q-rating> -->
</div> </div>
<div v-else-if="col.name === 'achievement'"> <div v-else-if="col.name === 'achievement'">
{{ props.row.point ? `ระดับ ${props.row.point}` : "" }} {{ props.row.point ? `ระดับ ${props.row.point}` : "" }}
@ -431,7 +405,96 @@ const isEditStep3 = computed(() => {
</td> </td>
</q-tr> </q-tr>
</template> </template>
</q-table> <template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat>
<div class="row justify-end">
<q-btn
flat
round
icon="info"
color="info"
size="14px"
@click="onClickView(props.row.id)"
>
<q-tooltip>คำอธบายผลสำเรจของงาน</q-tooltip>
</q-btn>
</div>
<q-separator />
<q-list>
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label>{{ col.value ?? "-" }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
<q-separator />
<q-card-actions
align="around"
v-if="
store.dataEvaluation.evaluationStatus == 'APPROVE' &&
store.tabMain === '2'
"
>
<q-btn
flat
round
icon="mdi-developer-board"
color="blue-6"
size="12px"
dense
@click="openPopupProgress(props.row.id)"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
<q-btn
flat
round
icon="warning"
color="red-5"
size="12px"
dense
main="problem"
@click="openPopupProblem(props.row.id)"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
</q-card-actions>
<q-card-actions align="around" v-if="isEditStep1">
<q-btn
flat
round
icon="edit"
color="edit"
size="12px"
dense
@click="onAdd(true, props.row.id)"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<q-btn
flat
round
icon="delete"
color="red"
size="12px"
dense
@click="onDelete(props.row.id)"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-card-actions>
</q-card>
</div>
</template>
</d-table>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -266,7 +266,7 @@ onMounted(() => {
<template> <template>
<div v-for="(item, index) in store.competencyType" :key="index"> <div v-for="(item, index) in store.competencyType" :key="index">
<q-card bordered style="border-radius: 5px" class="no-shadow"> <q-card bordered style="border-radius: 5px" class="no-shadow q-mt-sm">
<q-card-section class="bg-grey-2 q-py-sm"> <q-card-section class="bg-grey-2 q-py-sm">
<div class="row items-center"> <div class="row items-center">
<div class="col"> <div class="col">
@ -302,7 +302,7 @@ onMounted(() => {
</div> </div>
</q-card-section> </q-card-section>
<q-card-section class="q-pa-sm"> <q-card-section class="q-pa-sm">
<q-table <d-table
ref="table" ref="table"
:columns="columns" :columns="columns"
:rows="rows[item.id]" :rows="rows[item.id]"
@ -312,7 +312,6 @@ onMounted(() => {
:paging="true" :paging="true"
dense dense
hide-pagination hide-pagination
class="custom-table2"
no-data-label="ไม่มีข้อมูล" no-data-label="ไม่มีข้อมูล"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
> >
@ -348,29 +347,7 @@ onMounted(() => {
</q-tooltip> </q-tooltip>
</q-btn> </q-btn>
</q-btn-group> </q-btn-group>
<!-- <q-rating
v-model="props.row.point"
max="5"
size="sm"
color="grey"
:color-selected="store.ratingColors"
label="ระดับการประเมินพฤติกรรม"
disable
>
<template
v-for="(i, index) in sortedDataListCriteria"
:key="i.level"
v-slot:[`tip-${index+1}`]
>
<q-tooltip>
<div class="text-body2">
<span v-html="i.description"></span>
</div>
</q-tooltip>
</template>
</q-rating> -->
</div> </div>
<!-- <div v-else>รอ ทำ select</div> -->
</div> </div>
<div v-else-if="col.name == 'summary'"> <div v-else-if="col.name == 'summary'">
{{ {{
@ -438,7 +415,105 @@ onMounted(() => {
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
</q-table> <template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat>
<q-list>
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label v-if="col.name == 'createDate'">
{{ col.value ? date2Thai(col.value) : "-" }}
</q-item-label>
<q-item-label v-else-if="col.name == 'point'">
<q-btn-group outline>
<q-btn
v-for="(i, index) in sortedDataListCriteria"
:key="index"
:class="props.row.point == i.level && 'active'"
outline
color="grey-6"
:label="i.level"
>
<q-tooltip>
<div class="text-body2">
<span v-html="i.description"></span>
</div>
</q-tooltip>
</q-btn>
</q-btn-group>
</q-item-label>
<q-item-label v-else-if="col.name == 'summary'">
{{
props.row.point !== 0
? (props.row.point / 5) * props.row.weight
: "-"
}}
</q-item-label>
<q-item-label v-else>{{ col.value ?? "-" }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
<q-separator />
<q-card-actions
align="around"
v-if="
store.dataEvaluation.evaluationStatus == 'APPROVE' &&
store.tabMain === '2'
"
>
<q-btn
flat
round
icon="mdi-developer-board"
color="blue-6"
size="12px"
dense
@click="openPopupProgress(props.row.id)"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
<q-btn
flat
round
icon="warning"
color="red-5"
size="12px"
dense
main="problem"
@click="openPopupProblem(props.row.id)"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
</q-card-actions>
<q-card-actions align="around" v-if="isEditStep1">
<q-btn
flat
round
icon="edit"
color="edit"
@click.stop.pervent="onEdit(props.row, item.id)"
>
<q-tooltip>แกไข </q-tooltip>
</q-btn>
<q-btn
flat
round
icon="delete"
color="red"
@click.stop.pervent="onDelete(props.row.id, item.id)"
>
<q-tooltip>ลบขอม </q-tooltip>
</q-btn>
</q-card-actions>
</q-card>
</div>
</template>
</d-table>
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>

View file

@ -227,7 +227,7 @@ onMounted(() => {
</div> </div>
</q-card-section> </q-card-section>
<q-card-section class="q-pa-sm"> <q-card-section class="q-pa-sm">
<q-table <d-table
ref="table" ref="table"
:columns="columns" :columns="columns"
:rows="rows" :rows="rows"
@ -237,7 +237,6 @@ onMounted(() => {
:paging="true" :paging="true"
dense dense
hide-pagination hide-pagination
class="custom-table2"
no-data-label="ไม่มีข้อมูล" no-data-label="ไม่มีข้อมูล"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
> >
@ -362,7 +361,135 @@ onMounted(() => {
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
</q-table> <template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat>
<q-list>
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label v-if="col.name == 'createDate'">
{{ col.value ? date2Thai(col.value) : "-" }}
</q-item-label>
<q-item-label v-else-if="col.name == 'develop'">
<div class="column">
<q-checkbox
size="xs"
:model-value="props.row.isDevelopment70"
label="70 การลงมือปฏิบัติ (โดยผู้บังคับบัญชามอบหมาย)"
/>
<q-checkbox
size="xs"
:model-value="props.row.isDevelopment20"
label="20 การเรียนรู้จากผู้อื่น (Coach/Mentor/Consulting)"
/>
<q-checkbox
size="xs"
:model-value="props.row.isDevelopment10"
label="10 การฝึกอบรมอื่นๆ"
/>
</div>
</q-item-label>
<q-item-label v-else-if="col.name == 'achievement'">
<q-btn-group outline>
<q-btn
outline
color="grey-6"
label="0"
:class="props.row.summary == 0 && 'active'"
><q-tooltip>{{
props.row.achievement0
}}</q-tooltip></q-btn
>
<q-btn
outline
color="grey-6"
label="5"
:class="props.row.summary == 5 && 'active'"
><q-tooltip>{{
props.row.achievement5
}}</q-tooltip></q-btn
>
<q-btn
outline
color="grey-6"
label="10"
:class="props.row.summary == 10 && 'active'"
><q-tooltip>{{
props.row.achievement10
}}</q-tooltip></q-btn
>
</q-btn-group>
</q-item-label>
<q-item-label v-else-if="col.name == 'summary'">
{{ props.row.summary ? props.row.summary : 0 }}
</q-item-label>
<q-item-label v-else>
{{ col.value ? col.value : "-" }}
</q-item-label>
</q-item-section>
</q-item>
</q-list>
<q-separator />
<q-card-actions
align="around"
v-if="
store.dataEvaluation.evaluationStatus == 'APPROVE' &&
store.tabMain === '2'
"
>
<q-btn
flat
round
icon="mdi-developer-board"
color="blue-6"
size="12px"
dense
@click="openPopupProgress(props.row.id)"
>
<q-tooltip>รายงานความกาวหน</q-tooltip>
</q-btn>
<q-btn
flat
round
icon="warning"
color="red-5"
size="12px"
dense
main="problem"
@click="openPopupProblem(props.row.id)"
>
<q-tooltip>รายงานปญหา</q-tooltip>
</q-btn>
</q-card-actions>
<q-card-actions align="around" v-if="isEditStep1">
<q-btn
flat
round
icon="edit"
color="edit"
@click.stop.pervent="onEdit(props.row.id)"
>
<q-tooltip>แกไข </q-tooltip>
</q-btn>
<q-btn
flat
round
icon="delete"
color="red"
@click.stop.pervent="onDelete(props.row.id)"
>
<q-tooltip>ลบขอม </q-tooltip>
</q-btn>
</q-card-actions>
</q-card>
</div>
</template>
</d-table>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -129,11 +129,9 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
} }
} }
function checkCompetency() { async function checkCompetency() {
const position = dataEvaluation.value.position; const position = await dataEvaluation.value.position;
const posTypeName = dataEvaluation.value.posTypeName; const executiveName = await dataEvaluation.value.posExecutiveName;
const posLevelName = dataEvaluation.value.posLevelName;
const executiveName = dataEvaluation.value.posExecutiveName;
if ( if (
position == "ผู้ตรวจราชการกรุงเทพมหานคร" || position == "ผู้ตรวจราชการกรุงเทพมหานคร" ||
@ -156,33 +154,6 @@ export const useKpiDataStore = defineStore("KPIDate", () => {
(x: DataOptions) => x.id == "HEAD" || x.id == "EXECUTIVE" (x: DataOptions) => x.id == "HEAD" || x.id == "EXECUTIVE"
); );
} }
// switch (posTypeName + " " + posLevelName) {
// // case "ทั่วไป ปฏิบัติงาน":
// // case "ทั่วไป ชำนาญงาน":
// // case "ทั่วไป อาวุโส":
// // case "วิชาการ ปฏิบัติการ":
// // case "วิชาการ ชำนาญการ":
// // case "วิชาการ ชำนาญการพิเศษ":
// // case "วิชาการ เชี่ยวชาญ":
// // case "วิชาการ ทรงคุณวุฒิ":
// // competencyType.value = competencyType.value.filter(
// // (x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
// // );
// // break;
// case "อำนวยการ ต้น":
// case "อำนวยการ สูง":
// case "บริหาร ต้น":
// case "บริหาร สูง":
// competencyType.value = competencyType.value.filter(
// (x: DataOptions) => x.id == "HEAD" || x.id == "EXECUTIVE"
// );
// break;
// default:
// competencyType.value = competencyType.value.filter(
// (x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
// );
// break;
// }
} }
} }

View file

@ -3,8 +3,8 @@ import { ref, onMounted, reactive, computed, watch } from "vue";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import TabMain from "@/modules/08_KPI/components/Tab/TabMain.vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import TabMain from "@/modules/08_KPI/components/Tab/TabMain.vue";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useKpiDataStore } from "@/modules/08_KPI/store"; import { useKpiDataStore } from "@/modules/08_KPI/store";
@ -312,6 +312,7 @@ function requireEdit() {
onMounted(async () => { onMounted(async () => {
showLoader(); showLoader();
await getAll(); await getAll();
console.log(store.dataEvaluation.avartar);
}); });
</script> </script>
@ -342,22 +343,44 @@ onMounted(async () => {
</div> </div>
<div class="col-12"> <div class="col-12">
<q-card bordered flat class="relative-position"> <q-card bordered flat class="relative-position">
<div class="row justify-center q-pa-md" v-if="!$q.screen.gt.xs">
<q-avatar size="80px">
<q-img
:src="store.dataEvaluation.avartar"
v-if="store.dataEvaluation.avartar !== undefined"
/>
<q-img src="@/assets/avatar_user.jpg" v-else />
</q-avatar>
</div>
<!-- <div class="row text-center">
</div> -->
<div <div
v-if="$q.screen.gt.xs"
class="absolute-center-left" class="absolute-center-left"
style="left: 2%; top: 50%; transform: translateY(-50%)" style="left: 2%; top: 50%; transform: translateY(-50%)"
> >
<q-avatar size="95px"> <q-avatar size="80px">
<q-img :src="store.dataEvaluation.avartar" /> <q-img
:src="store.dataEvaluation.avartar"
v-if="store.dataEvaluation.avartar !== undefined"
/>
<q-img src="@/assets/avatar_user.jpg" v-else />
</q-avatar> </q-avatar>
</div> </div>
<div class="row col-12"> <div class="row col-12">
<div class="row items-center col-12 q-pa-sm"> <div class="row items-center col-12 q-pa-sm">
<div class="col-12" style="padding-left: 12%"> <div
<div class="row col-12 items-center"> class="col-12"
:style="$q.screen.gt.xs ? 'padding-left: 12%' : ''"
>
<div class="row col-12 items-center justify-center">
<span class="text-h6 text-weight-medium text-primary">{{ <span class="text-h6 text-weight-medium text-primary">{{
`${store.dataEvaluation.prefix}${store.dataEvaluation.firstName} ${store.dataEvaluation.lastName}` `${store.dataEvaluation.prefix}${store.dataEvaluation.firstName} ${store.dataEvaluation.lastName}`
}}</span> }}</span>
<q-space /> <q-space v-if="$q.screen.gt.xs" />
<div class="q-gutter-x-sm"> <div class="q-gutter-x-sm">
<span <span
v-if=" v-if="
@ -370,6 +393,8 @@ onMounted(async () => {
class="text-red" class="text-red"
>*ำหน(อยละ) ผลสมฤทธของงานไมกตอง</span >*ำหน(อยละ) ผลสมฤทธของงานไมกตอง</span
> >
<br v-if="!$q.screen.gt.xs" />
<q-btn <q-btn
v-if=" v-if="
store.rolePerson == 'USER' && store.rolePerson == 'USER' &&
@ -429,18 +454,6 @@ onMounted(async () => {
<q-tooltip>ขอแกไขขอตกลง</q-tooltip> <q-tooltip>ขอแกไขขอตกลง</q-tooltip>
</q-btn> </q-btn>
<!-- <q-btn
v-if="!isReadonly"
unelevated
round
icon="mdi-format-list-bulleted-square"
color="grey-2"
text-color="amber-10"
size="md"
@click="modalScore = true"
>
<q-tooltip>แกไขคะแนนเต</q-tooltip>
</q-btn> -->
<q-btn <q-btn
unelevated unelevated
round round
@ -483,7 +496,12 @@ onMounted(async () => {
</div> </div>
<div class="row items-center bg-toolbar col-12 q-pa-sm"> <div class="row items-center bg-toolbar col-12 q-pa-sm">
<div class="col-12 q-py-xs" style="padding-left: 12%"> <div
class="col-12 q-py-xs"
:style="
$q.screen.gt.xs ? 'padding-left: 12%' : 'padding-left:5%'
"
>
<div class="row no-wrap"> <div class="row no-wrap">
<div class="col-2"> <div class="col-2">
<div class="column"> <div class="column">

View file

@ -272,11 +272,11 @@ function onSubmit() {
function getProfile() { function getProfile() {
http http
.get(config.API.profilePosition()) .get(config.API.profilePosition())
.then((res) => { .then(async (res) => {
const data = res.data.result; const data = res.data.result;
store.dataProfile = data; store.dataProfile = data;
store.checkCompetency(); await store.checkCompetency();
store.checkCompetencyDefaultCompetencyLevel(); await store.checkCompetencyDefaultCompetencyLevel();
formRound.profileId = data.profileId; formRound.profileId = data.profileId;
formRound.prefix = data.prefix; formRound.prefix = data.prefix;
@ -383,7 +383,23 @@ onMounted(() => {
<template> <template>
<div class="col-12 row justify-center"> <div class="col-12 row justify-center">
<div class="col-xs-12 col-sm-12 col-md-11"> <div class="col-xs-12 col-sm-12 col-md-11">
<div class="toptitle text-white col-12 row items-center"> <q-toolbar style="padding: 0px">
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.push(`/`)"
/>
<q-toolbar-title class="toptitle text-white items-center">
รายการขอรบประเมนผลการปฏราชการระดบบคคล</q-toolbar-title
>
</q-toolbar>
<!-- <div class="toptitle text-white col-12 row items-center">
<q-btn <q-btn
icon="mdi-arrow-left" icon="mdi-arrow-left"
unelevated unelevated
@ -395,11 +411,11 @@ onMounted(() => {
@click="router.push(`/`)" @click="router.push(`/`)"
/> />
รายการขอรบประเมนผลการปฏราชการระดบบคคล รายการขอรบประเมนผลการปฏราชการระดบบคคล
</div> </div> -->
<div class="col-12"> <div class="col-12">
<q-card bordered class="q-pa-md"> <q-card bordered class="q-pa-md">
<q-toolbar style="padding: 0"> <div class="row col-12 q-col-gutter-sm q-mb-sm">
<div class="row q-gutter-sm"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="year" v-model="year"
@ -418,7 +434,6 @@ onMounted(() => {
dense dense
lazy-rules lazy-rules
outlined outlined
class="inputgreen"
hide-bottom-space hide-bottom-space
:model-value="!!year ? year + 543 : null" :model-value="!!year ? year + 543 : null"
:label="`${'ปีงบประมาณ'}`" :label="`${'ปีงบประมาณ'}`"
@ -434,6 +449,9 @@ onMounted(() => {
</q-input> </q-input>
</template> </template>
</datepicker> </datepicker>
</div>
<div class="col-xs-10 col-md-3">
<q-select <q-select
v-model="round" v-model="round"
outlined outlined
@ -442,11 +460,13 @@ onMounted(() => {
option-label="name" option-label="name"
option-value="id" option-value="id"
:options="roundMainOp" :options="roundMainOp"
style="min-width: 200px"
emit-value emit-value
map-options map-options
@update:model-value="changRound" @update:model-value="changRound"
/> />
</div>
<div class="col-xs-2 col-md-2">
<q-btn <q-btn
flat flat
round round
@ -459,13 +479,7 @@ onMounted(() => {
</div> </div>
<q-space /> <q-space />
<div class="row q-gutter-sm"> <div class="col-xs-12 col-md-2">
<!-- <q-input
outlined
dense
v-model="filterKeyword"
label="ค้นหา"
></q-input> -->
<q-select <q-select
v-model="visibleColumns" v-model="visibleColumns"
multiple multiple
@ -481,10 +495,10 @@ onMounted(() => {
style="min-width: 150px" style="min-width: 150px"
/> />
</div> </div>
</q-toolbar> </div>
<div class="col-12"> <div class="col-12">
<q-table <d-table
ref="table" ref="table"
:columns="columns" :columns="columns"
:rows="rows" :rows="rows"
@ -494,7 +508,6 @@ onMounted(() => {
bordered bordered
:paging="true" :paging="true"
dense dense
class="custom-table2"
:rows-per-page-options="[10, 25, 50, 100]" :rows-per-page-options="[10, 25, 50, 100]"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
v-model:pagination="pagination" v-model:pagination="pagination"
@ -524,6 +537,26 @@ onMounted(() => {
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
<template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat>
<q-list @click="redirectViewDetail(props.row.id)">
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label>
{{ col.value ? col.value : "-" }}</q-item-label
>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
</template>
<template v-slot:pagination="scope"> <template v-slot:pagination="scope">
งหมด {{ total }} รายการ งหมด {{ total }} รายการ
<q-pagination <q-pagination
@ -538,7 +571,7 @@ onMounted(() => {
@update:model-value="fetchList" @update:model-value="fetchList"
></q-pagination> ></q-pagination>
</template> </template>
</q-table> </d-table>
</div> </div>
</q-card> </q-card>
</div> </div>
@ -546,7 +579,10 @@ onMounted(() => {
</div> </div>
<q-dialog v-model="modalDialog" persistent> <q-dialog v-model="modalDialog" persistent>
<q-card class="col-12" style="width: 25vw"> <q-card
class="col-12"
:style="$q.screen.gt.xs ? 'width: 25vw' : 'width: 100vw'"
>
<q-form greedy @submit.prevent @validation-success="onSubmit"> <q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader :tittle="'สร้างแบบประเมินผลฯ'" :close="onCloseDialog" /> <DialogHeader :tittle="'สร้างแบบประเมินผลฯ'" :close="onCloseDialog" />
<q-separator /> <q-separator />
@ -571,7 +607,6 @@ onMounted(() => {
dense dense
lazy-rules lazy-rules
outlined outlined
class="inputgreen"
hide-bottom-space hide-bottom-space
:model-value="!!yearDialog ? yearDialog + 543 : null" :model-value="!!yearDialog ? yearDialog + 543 : null"
:label="`${'ปีงบประมาณ'}`" :label="`${'ปีงบประมาณ'}`"

View file

@ -198,7 +198,7 @@ onMounted(async () => {
<template> <template>
<div class="col-12 row justify-center"> <div class="col-12 row justify-center">
<div class="col-xs-12 col-sm-12 col-md-11"> <div class="col-xs-12 col-sm-12 col-md-11">
<div class="toptitle text-white col-12 row items-center"> <q-toolbar style="padding: 0px;">
<q-btn <q-btn
icon="mdi-arrow-left" icon="mdi-arrow-left"
unelevated unelevated
@ -209,98 +209,112 @@ onMounted(async () => {
class="q-mr-sm" class="q-mr-sm"
@click="router.push(`/`)" @click="router.push(`/`)"
/> />
รายการการประเมนผลการปฏราชการระดบบคคล <q-toolbar-title class="toptitle text-white items-center">
</div> รายการการประเมนผลการปฏราชการระดบบคคล</q-toolbar-title
>
</q-toolbar>
<!-- <div class="toptitle text-white col-12 row items-center">
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.push(`/`)"
/>
</div> -->
<div class="col-12"> <div class="col-12">
<q-card bordered class="q-pa-md"> <q-card bordered class="q-pa-md">
<q-toolbar style="padding: 0"> <div class="items-center col-12 row q-col-gutter-sm q-mb-sm">
<div class="row q-gutter-sm"> <datepicker
<datepicker class="col-md-1 col-xs-12"
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="store.yearRound" v-model="store.yearRound"
:locale="'th'" :locale="'th'"
autoApply autoApply
year-picker year-picker
:enableTimePicker="false" :enableTimePicker="false"
@update:model-value="fetchRoundOption(true)" @update:model-value="fetchRoundOption(true)"
> >
<template #year="{ year }">{{ year + 543 }}</template> <template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{ <template #year-overlay-value="{ value }">{{
parseInt(value + 543) parseInt(value + 543)
}}</template> }}</template>
<template #trigger> <template #trigger>
<q-input <q-input
dense dense
lazy-rules lazy-rules
outlined outlined
hide-bottom-space hide-bottom-space
:model-value=" :model-value="
!!store.yearRound ? store.yearRound + 543 : null !!store.yearRound ? store.yearRound + 543 : null
" "
:label="`${'ปีงบประมาณ'}`" :label="`${'ปีงบประมาณ'}`"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon <q-icon
name="event" name="event"
class="cursor-pointer" class="cursor-pointer"
style="color: var(--q-primary)" style="color: var(--q-primary)"
> >
</q-icon> </q-icon>
</template> </template>
</q-input> </q-input>
</template> </template>
</datepicker> </datepicker>
<q-select
<q-select class="col-md-2 col-xs-12"
v-model="store.formQuery.round" v-model="store.formQuery.round"
outlined outlined
label="รอบการประเมิน" label="รอบการประเมิน"
dense dense
option-label="name" option-label="name"
option-value="id" option-value="id"
:options="roundOp" :options="roundOp"
style="min-width: 200px" emit-value
emit-value map-options
map-options @update:model-value="changRound"
@update:model-value="changRound" />
/>
</div>
<q-space /> <q-space />
<div class="row q-gutter-sm">
<q-input <q-input
outlined class="col-md-2 col-xs-12"
dense outlined
v-model="store.formQuery.keyword" dense
label="ค้นหาผู้ขอรับการประเมิน" v-model="store.formQuery.keyword"
@keydown.enter.prevent="changRound" label="ค้นหาผู้ขอรับการประเมิน"
> @keydown.enter.prevent="changRound"
<template v-slot:append> >
<q-icon <template v-slot:append>
v-if="store.formQuery.keyword !== ''" <q-icon
name="clear" v-if="store.formQuery.keyword !== ''"
class="cursor-pointer" name="clear"
@click="(store.formQuery.keyword = ''), changRound()" class="cursor-pointer"
/> @click="(store.formQuery.keyword = ''), changRound()"
<q-icon v-else name="search" color="grey-5" /> />
</template> <q-icon v-else name="search" color="grey-5" />
</q-input> </template>
<q-select </q-input>
v-model="visibleColumns" <q-select
multiple class="col-md-1 col-xs-12"
outlined v-model="visibleColumns"
dense multiple
options-dense outlined
:display-value="$q.lang.table.columns" dense
emit-value options-dense
map-options :display-value="$q.lang.table.columns"
:options="columns" emit-value
option-value="name" map-options
options-cover :options="columns"
style="min-width: 150px" option-value="name"
/> options-cover
</div> />
</q-toolbar> </div>
<div class="col-12"> <div class="col-12">
<q-card bordered class="q-mt-sm"> <q-card bordered class="q-mt-sm">
<q-tabs <q-tabs

View file

@ -427,10 +427,10 @@ function fetchDataDetail(id: string) {
dataPerson.citizenId = data.citizenId ? data.citizenId : "-"; dataPerson.citizenId = data.citizenId ? data.citizenId : "-";
dataPerson.name = `${data.prefix}${data.firstName} ${data.lastName}`; dataPerson.name = `${data.prefix}${data.firstName} ${data.lastName}`;
dataPerson.prefix = data.prefix, (dataPerson.prefix = data.prefix),
dataPerson.firstName = data.firstName, (dataPerson.firstName = data.firstName),
dataPerson.lastName = data.lastName, (dataPerson.lastName = data.lastName),
dataPerson.position = data.position ? data.position : "-"; (dataPerson.position = data.position ? data.position : "-");
dataPerson.type = data.posTypeName ? data.posTypeName : "-"; dataPerson.type = data.posTypeName ? data.posTypeName : "-";
dataPerson.level = data.posLevelName ? data.posLevelName : "-"; dataPerson.level = data.posLevelName ? data.posLevelName : "-";
dataPerson.positionSide = data.posExecutive ? data.posExecutive : "-"; dataPerson.positionSide = data.posExecutive ? data.posExecutive : "-";
@ -522,7 +522,7 @@ onMounted(async () => {
</div> </div>
<q-space /> <q-space />
<div v-if="fileList == null" class="col-3"> <div v-if="fileList == null" class="col-xs-5 col-3">
<q-file <q-file
for="inputFiles" for="inputFiles"
class="col-12" class="col-12"
@ -573,39 +573,39 @@ onMounted(async () => {
</div> </div>
<div class="col-12"><q-separator /></div> <div class="col-12"><q-separator /></div>
<div class="row col-12 q-col-gutter-md q-pa-md" v-if="isGov"> <div class="row col-12 q-col-gutter-md q-pa-md" v-if="isGov">
<div class="col"> <div class="col-xs-12 col-md-6">
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-4 text-grey">เลขประจำตวประชาชน</div> <div class="col-4 text-grey">เลขประจำตวประชาชน</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataPerson.citizenId ? dataPerson.citizenId:'-' }} {{ dataPerson.citizenId ? dataPerson.citizenId : "-" }}
</div> </div>
<div class="col-4 text-grey">-นามสก</div> <div class="col-4 text-grey">-นามสก</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataPerson.firstName ? dataPerson.name:'-' }} {{ dataPerson.firstName ? dataPerson.name : "-" }}
</div> </div>
<div class="col-4 text-grey">ตำแหน</div> <div class="col-4 text-grey">ตำแหน</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataPerson.position ? dataPerson.position:'-' }} {{ dataPerson.position ? dataPerson.position : "-" }}
</div> </div>
<div class="col-4 text-grey">ประเภทตำแหน</div> <div class="col-4 text-grey">ประเภทตำแหน</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataPerson.type ? dataPerson.type:'-' }} {{ dataPerson.type ? dataPerson.type : "-" }}
</div> </div>
</div> </div>
</div> </div>
<div class="col"> <div class="col-xs-12 col-md-6">
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-4 text-grey">ระดบตำแหน</div> <div class="col-4 text-grey">ระดบตำแหน</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataPerson.level ? dataPerson.level:'-' }} {{ dataPerson.level ? dataPerson.level : "-" }}
</div> </div>
<div class="col-4 text-grey">ตำแหนงทางการบรหาร</div> <div class="col-4 text-grey">ตำแหนงทางการบรหาร</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataPerson.positionSide ? dataPerson.positionSide:'-' }} {{ dataPerson.positionSide ? dataPerson.positionSide : "-" }}
</div> </div>
<div class="col-4 text-grey">หนวยงานทงก</div> <div class="col-4 text-grey">หนวยงานทงก</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataPerson.org ? dataPerson.org:'-' }} {{ dataPerson.org ? dataPerson.org : "-" }}
</div> </div>
</div> </div>
</div> </div>
@ -618,7 +618,7 @@ onMounted(async () => {
</q-card> </q-card>
<div class="row q-col-gutter-md q-mt-sm"> <div class="row q-col-gutter-md q-mt-sm">
<div class="col-9"> <div class="col-md-9 col-xs-12">
<q-select <q-select
dense dense
readonly readonly
@ -634,7 +634,7 @@ onMounted(async () => {
/> />
</div> </div>
<div <div
class="col-3" class="col-md-3 col-xs-12"
v-if=" v-if="
formBody.scholarshipType !== '' && formBody.scholarshipType !== '' &&
formBody.scholarshipType !== 'EXECUTIVE' && formBody.scholarshipType !== 'EXECUTIVE' &&
@ -662,7 +662,7 @@ onMounted(async () => {
checked-icon="task_alt" checked-icon="task_alt"
unchecked-icon="panorama_fish_eye" unchecked-icon="panorama_fish_eye"
val="INPLAN" val="INPLAN"
label="ในแผนฯ" label="ในแผน ฯ"
dense dense
disable disable
/> />
@ -671,7 +671,7 @@ onMounted(async () => {
checked-icon="task_alt" checked-icon="task_alt"
unchecked-icon="panorama_fish_eye" unchecked-icon="panorama_fish_eye"
val="OUTPLAN" val="OUTPLAN"
label="นอกแผนฯ" label="นอกแผน ฯ"
dense dense
disable disable
class="q-pl-sm" class="q-pl-sm"
@ -679,7 +679,7 @@ onMounted(async () => {
</div> </div>
<div class="row col-12 q-col-gutter-md"> <div class="row col-12 q-col-gutter-md">
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formBody.scholarshipYear" v-model="formBody.scholarshipYear"
@ -722,7 +722,10 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-3"> <div
v-if="formBody.scholarshipType !== 'RESEARCH'"
class="col-xs-12 col-md-3"
>
<q-select <q-select
dense dense
outlined outlined
@ -737,7 +740,7 @@ onMounted(async () => {
readonly readonly
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
outlined outlined
@ -749,7 +752,7 @@ onMounted(async () => {
reverse-fill-mask reverse-fill-mask
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-checkbox <q-checkbox
keep-color keep-color
disable disable
@ -761,7 +764,7 @@ onMounted(async () => {
</div> </div>
<div class="row col-12 q-col-gutter-md"> <div class="row col-12 q-col-gutter-md">
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -771,7 +774,7 @@ onMounted(async () => {
label="เลขที่หนังสืออนุมัติ" label="เลขที่หนังสืออนุมัติ"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formBody.bookNoDate" v-model="formBody.bookNoDate"
@ -809,7 +812,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formBody.bookApproveDate" v-model="formBody.bookApproveDate"
@ -847,7 +850,10 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-3"> <div
v-if="formBody.scholarshipType !== 'RESEARCH'"
class="col-xs-12 col-md-3"
>
<q-checkbox <q-checkbox
keep-color keep-color
disable disable
@ -873,7 +879,7 @@ onMounted(async () => {
<div class="col-12" v-if="formBody.scholarshipType !== 'EXECUTIVE'"> <div class="col-12" v-if="formBody.scholarshipType !== 'EXECUTIVE'">
<div class="row col-12 q-col-gutter-md"> <div class="row col-12 q-col-gutter-md">
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -883,7 +889,7 @@ onMounted(async () => {
v-model="formBody.contractNo" v-model="formBody.contractNo"
/> />
</div> </div>
<div class="col-2"> <div class="col-xs-12 col-md-2">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -920,7 +926,10 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-3"> <div
v-if="formBody.scholarshipType !== 'RESEARCH'"
class="col-xs-12 col-md-3"
>
<q-input <q-input
dense dense
readonly readonly
@ -930,7 +939,10 @@ onMounted(async () => {
label="เลขที่หนังสือรายงานตัวกลับ" label="เลขที่หนังสือรายงานตัวกลับ"
/> />
</div> </div>
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-2"> <div
v-if="formBody.scholarshipType !== 'RESEARCH'"
class="col-xs-12 col-md-2"
>
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -968,7 +980,10 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-2"> <div
v-if="formBody.scholarshipType !== 'RESEARCH'"
class="col-xs-12 col-md-2"
>
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formBody.reportBackDate" v-model="formBody.reportBackDate"
@ -1006,49 +1021,60 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-12" > <div class="col-12">
<q-card bordered tyle="border: 1px solid #d6dee1"> <q-card bordered tyle="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md"> <div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
อมลผำประก อมลผำประก
</div> </div>
<div class="col-12"><q-separator /></div> <div class="col-12"><q-separator /></div>
<div <div class="row col-12 q-col-gutter-md q-pa-md">
class="row col-12 q-col-gutter-md q-pa-md" <div class="col-xs-12 col-md-6">
>
<div class="col">
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-4 text-grey">เลขประจำตวประชาชน</div> <div class="col-4 text-grey">เลขประจำตวประชาชน</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataGuarantor.citizenId ? dataGuarantor.citizenId :'-' }} {{
dataGuarantor.citizenId
? dataGuarantor.citizenId
: "-"
}}
</div> </div>
<div class="col-4 text-grey">-นามสก</div> <div class="col-4 text-grey">-นามสก</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataGuarantor.firstName ? dataGuarantor.name:'-' }} {{
dataGuarantor.firstName ? dataGuarantor.name : "-"
}}
</div> </div>
<div class="col-4 text-grey">ตำแหน</div> <div class="col-4 text-grey">ตำแหน</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataGuarantor.position ? dataGuarantor.position:'-' }} {{
dataGuarantor.position
? dataGuarantor.position
: "-"
}}
</div> </div>
<div class="col-4 text-grey">ประเภท</div> <div class="col-4 text-grey">ประเภท</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataGuarantor.type ? dataGuarantor.type :'-' }} {{ dataGuarantor.type ? dataGuarantor.type : "-" }}
</div> </div>
</div> </div>
</div> </div>
<div class="col"> <div class="col-xs-12 col-md-6">
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-4 text-grey">ระดบตำแหน</div> <div class="col-4 text-grey">ระดบตำแหน</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataGuarantor.level ? dataGuarantor.level:'-' }} {{ dataGuarantor.level ? dataGuarantor.level : "-" }}
</div> </div>
<div class="col-4 text-grey">ตำแหนงทางการบรหาร</div> <div class="col-4 text-grey">ตำแหนงทางการบรหาร</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataGuarantor.positionSide ? dataGuarantor.positionSide:'-' }} {{
dataGuarantor.positionSide
? dataGuarantor.positionSide
: "-"
}}
</div> </div>
<div class="col-4 text-grey">หนวยงานทงก</div> <div class="col-4 text-grey">หนวยงานทงก</div>
<div class="col-8 text-weight-medium"> <div class="col-8 text-weight-medium">
{{ dataGuarantor.org ? dataGuarantor.org:'-' }} {{ dataGuarantor.org ? dataGuarantor.org : "-" }}
</div> </div>
</div> </div>
</div> </div>
@ -1062,7 +1088,7 @@ onMounted(async () => {
v-if="formBody.scholarshipType === 'DOMESTICE'" v-if="formBody.scholarshipType === 'DOMESTICE'"
> >
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -1072,7 +1098,7 @@ onMounted(async () => {
v-model="formBody.degreeLevel" v-model="formBody.degreeLevel"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -1082,7 +1108,7 @@ onMounted(async () => {
v-model="formBody.course" v-model="formBody.course"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
outlined outlined
@ -1092,7 +1118,7 @@ onMounted(async () => {
v-model="formBody.field" v-model="formBody.field"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
outlined outlined
@ -1102,7 +1128,7 @@ onMounted(async () => {
v-model="formBody.faculty" v-model="formBody.faculty"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
outlined outlined
@ -1112,7 +1138,7 @@ onMounted(async () => {
v-model="formBody.educationalInstitution" v-model="formBody.educationalInstitution"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formBody.startDate" v-model="formBody.startDate"
@ -1152,7 +1178,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formBody.endDate" v-model="formBody.endDate"
@ -1192,7 +1218,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1202,7 +1228,7 @@ onMounted(async () => {
v-model="formBody.studyPlace" v-model="formBody.studyPlace"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1212,7 +1238,7 @@ onMounted(async () => {
v-model="formBody.studyTopic" v-model="formBody.studyTopic"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1252,7 +1278,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
readonly readonly
@ -1292,8 +1318,8 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"></div> <div class="col-6" v-if="!$q.screen.gt.xs"></div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1303,7 +1329,7 @@ onMounted(async () => {
v-model="formBody.studyCountry" v-model="formBody.studyCountry"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1313,7 +1339,7 @@ onMounted(async () => {
v-model="formBody.studyAbroadTopic" v-model="formBody.studyAbroadTopic"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1355,7 +1381,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1401,7 +1427,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -1420,7 +1446,7 @@ onMounted(async () => {
v-else-if="formBody.scholarshipType === 'NOABROAD'" v-else-if="formBody.scholarshipType === 'NOABROAD'"
> >
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
outlined outlined
@ -1430,7 +1456,7 @@ onMounted(async () => {
v-model="formBody.course" v-model="formBody.course"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1440,7 +1466,7 @@ onMounted(async () => {
v-model="formBody.field" v-model="formBody.field"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
readonly readonly
dense dense
@ -1450,7 +1476,7 @@ onMounted(async () => {
v-model="formBody.educationalInstitution" v-model="formBody.educationalInstitution"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1490,7 +1516,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1530,7 +1556,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1540,7 +1566,7 @@ onMounted(async () => {
v-model="formBody.studyPlace" v-model="formBody.studyPlace"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1550,7 +1576,7 @@ onMounted(async () => {
v-model="formBody.studyTopic" v-model="formBody.studyTopic"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formBody.studyStartDate" v-model="formBody.studyStartDate"
@ -1590,7 +1616,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1636,7 +1662,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -1655,7 +1681,7 @@ onMounted(async () => {
v-else-if="formBody.scholarshipType === 'ABROAD'" v-else-if="formBody.scholarshipType === 'ABROAD'"
> >
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1665,7 +1691,7 @@ onMounted(async () => {
v-model="formBody.course" v-model="formBody.course"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
outlined outlined
@ -1675,7 +1701,7 @@ onMounted(async () => {
v-model="formBody.field" v-model="formBody.field"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1685,7 +1711,7 @@ onMounted(async () => {
v-model="formBody.educationalInstitution" v-model="formBody.educationalInstitution"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1725,7 +1751,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1765,7 +1791,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1775,7 +1801,7 @@ onMounted(async () => {
v-model="formBody.studyPlace" v-model="formBody.studyPlace"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1785,7 +1811,7 @@ onMounted(async () => {
v-model="formBody.studyTopic" v-model="formBody.studyTopic"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1825,7 +1851,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1872,8 +1898,8 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"></div> <div class="col-6" v-if="!$q.screen.gt.xs"></div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1883,7 +1909,7 @@ onMounted(async () => {
v-model="formBody.studyCountry" v-model="formBody.studyCountry"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -1893,7 +1919,7 @@ onMounted(async () => {
v-model="formBody.studyAbroadTopic" v-model="formBody.studyAbroadTopic"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1935,7 +1961,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1981,7 +2007,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
readonly readonly
dense dense
@ -2000,7 +2026,7 @@ onMounted(async () => {
v-else-if="formBody.scholarshipType === 'RESEARCH'" v-else-if="formBody.scholarshipType === 'RESEARCH'"
> >
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-select <q-select
dense dense
readonly readonly
@ -2018,7 +2044,7 @@ onMounted(async () => {
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -2029,7 +2055,7 @@ onMounted(async () => {
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -2040,7 +2066,7 @@ onMounted(async () => {
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -2051,7 +2077,7 @@ onMounted(async () => {
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
dense dense
readonly readonly
@ -2062,7 +2088,7 @@ onMounted(async () => {
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
readonly readonly
dense dense
@ -2073,7 +2099,7 @@ onMounted(async () => {
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2113,7 +2139,8 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3">
<div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2153,7 +2180,8 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6">
<div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -2174,7 +2202,7 @@ onMounted(async () => {
v-else-if="formBody.scholarshipType === 'EXECUTIVE'" v-else-if="formBody.scholarshipType === 'EXECUTIVE'"
> >
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-6"> <div class="col-xs-12 col-md-md-6">
<q-input <q-input
readonly readonly
dense dense
@ -2184,7 +2212,7 @@ onMounted(async () => {
v-model="formBody.course" v-model="formBody.course"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -2194,7 +2222,7 @@ onMounted(async () => {
v-model="formBody.educationalInstitution" v-model="formBody.educationalInstitution"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2235,7 +2263,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2273,8 +2301,8 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"></div> <div class="col-6" v-if="!$q.screen.gt.xs"></div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -2284,7 +2312,7 @@ onMounted(async () => {
v-model="formBody.studyPlace" v-model="formBody.studyPlace"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -2294,7 +2322,7 @@ onMounted(async () => {
v-model="formBody.studyTopic" v-model="formBody.studyTopic"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2334,7 +2362,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2380,8 +2408,8 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-6"></div> <div class="col-6" v-if="!$q.screen.gt.xs"></div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
readonly readonly
@ -2391,7 +2419,7 @@ onMounted(async () => {
v-model="formBody.studyCountry" v-model="formBody.studyCountry"
/> />
</div> </div>
<div class="col-6"> <div class="col-xs-12 col-md-6">
<q-input <q-input
dense dense
outlined outlined
@ -2401,7 +2429,7 @@ onMounted(async () => {
v-model="formBody.studyAbroadTopic" v-model="formBody.studyAbroadTopic"
/> />
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2441,7 +2469,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="ccol-xs-12 ol-md-3">
<datepicker <datepicker
readonly readonly
menu-class-name="modalfix" menu-class-name="modalfix"
@ -2487,7 +2515,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-xs-12 col-md-3">
<q-input <q-input
readonly readonly
dense dense

View file

@ -168,105 +168,85 @@ onMounted(async () => {
</div> </div>
<div class="col-12"> <div class="col-12">
<q-card bordered class="q-pa-md"> <q-card bordered class="q-pa-md">
<q-toolbar style="padding: 0"> <div class="items-center col-12 row q-col-gutter-sm q-mb-sm">
<div class="row q-gutter-sm"> <datepicker
<datepicker class="col-xs-12 col-md-1"
style="width: 150px" menu-class-name="modalfix"
menu-class-name="modalfix" v-model="year"
v-model="year" :locale="'th'"
:locale="'th'" autoApply
autoApply year-picker
year-picker :enableTimePicker="false"
:enableTimePicker="false" @update:model-value="getData()"
@update:model-value="getData()" >
> <template #year="{ year }">{{ year + 543 }}</template>
<template #year="{ year }">{{ year + 543 }}</template> <template #year-overlay-value="{ value }">{{
<template #year-overlay-value="{ value }">{{ parseInt(value + 543)
parseInt(value + 543) }}</template>
}}</template> <template #trigger>
<template #trigger> <q-input
<q-input dense
dense lazy-rules
lazy-rules outlined
outlined :model-value="year === 0 ? 'ทั้งหมด' : Number(year) + 543"
:model-value="year === 0 ? 'ทั้งหมด' : Number(year) + 543" :label="`${'ปีงบประมาณ'}`"
:label="`${'ปีงบประมาณ'}`" >
> <template v-if="year" v-slot:append>
<template v-if="year" v-slot:append> <q-icon
<q-icon name="cancel"
name="cancel" @click.stop.prevent="(year = 0), getData()"
@click.stop.prevent="(year = 0), getData()" class="cursor-pointer"
class="cursor-pointer" />
/> </template>
</template> <template v-slot:prepend>
<template v-slot:prepend> <q-icon
<q-icon name="event"
name="event" class="cursor-pointer"
class="cursor-pointer" style="color: var(--q-primary)"
style="color: var(--q-primary)" >
> </q-icon>
</q-icon> </template>
</template> </q-input>
</q-input> </template>
</template> </datepicker>
</datepicker> <q-select
<q-select dense
dense outlined
outlined v-model="type"
v-model="type" :options="scholarshipTypeOp"
:options="scholarshipTypeOp" emit-value
emit-value map-options
map-options option-value="id"
option-value="id" option-label="name"
option-label="name" label="เลือกประเภททุน"
label="เลือกประเภททุน" @update:model-value="getData()"
@update:model-value="getData()" class="select_ellipsis col-xs-12 col-md-2"
style="width: 350px" />
/>
<!-- <q-btn
flat
round
color="primary"
icon="add"
@click="router.push(`/KPI/add`)"
>
<q-tooltip> เพมขอม </q-tooltip>
</q-btn> -->
</div>
<q-space /> <q-space />
<div class="row q-gutter-sm">
<!-- <q-input <q-select
outlined v-model="visibleColumns"
dense multiple
v-model="filterKeyword" outlined
label="ค้นหา" dense
></q-input> --> options-dense
<q-select :display-value="$q.lang.table.columns"
v-model="visibleColumns" emit-value
multiple map-options
outlined :options="columns"
dense option-value="name"
options-dense options-cover
:display-value="$q.lang.table.columns" class="col-xs-12 col-md-1"
emit-value />
map-options </div>
:options="columns"
option-value="name"
options-cover
style="min-width: 150px"
/>
</div>
</q-toolbar>
<div> <div>
<q-table <d-table
flat flat
bordered bordered
dense dense
row-key="id" row-key="id"
class="custom-table2"
style="max-height: 80vh"
:rows="rows" :rows="rows"
:columns="columns" :columns="columns"
:visible-columns="visibleColumns" :visible-columns="visibleColumns"
@ -318,56 +298,39 @@ onMounted(async () => {
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
</q-table>
<template #item="props">
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4 col-lg-3">
<q-card bordered flat>
<q-list @click="onEdit(props.row.id)">
<q-item
v-for="col in props.cols.filter((col:any) => col.name !== 'desc')"
:key="col.name"
>
<q-item-section>
<q-item-label caption>{{ col.label }}</q-item-label>
<q-item-label v-if="col.name === 'scholarshipYear'">
{{ col.value ? col.value + 543 : "-" }}
</q-item-label>
<q-item-label
v-else-if="col.name === 'scholarshipType'"
>
{{ col.value ? convertType(col.value) : "-" }}
</q-item-label>
<q-item-label v-else>{{ col.value }}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-card>
</div>
</template>
</d-table>
</div> </div>
</q-card> </q-card>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<style scoped lang="scss"> <style scoped lang="scss"></style>
.icon-color {
color: #4154b3;
}
.custom-table2 {
max-height: 64vh;
.q-table tr:nth-child(odd) td {
background: white;
}
.q-table tr:nth-child(even) td {
background: #f8f8f8;
}
.q-table thead tr {
background: #ecebeb;
}
.q-table thead tr th {
position: sticky;
}
.q-table td:nth-of-type(2) {
z-index: 3 !important;
}
.q-table th:nth-of-type(2),
.q-table td:nth-of-type(2) {
position: sticky;
left: 0;
z-index: 1;
}
/* this will be the loading indicator */
.q-table thead tr:last-child th {
/* height of all previous header rows */
top: 48px;
}
.q-table thead tr:first-child th {
top: 0;
}
}
</style>

View file

@ -82,3 +82,9 @@ input.input-alert
.input-alert i.text-primary .input-alert i.text-primary
color: #f00 !important color: #f00 !important
.select_ellipsis .q-field__native > span
white-space: nowrap
overflow: hidden
text-overflow: ellipsis
width: 200px

View file

@ -473,16 +473,16 @@ function onInfo(){
flat flat
round round
color="white" color="white"
icon="mdi-view-dashboard-outline" icon="mdi-home"
@click="router.push(`/`)" @click="router.push(`/`)"
/> />
<q-btn <!-- <q-btn
flat flat
round round
color="white" color="white"
icon="mdi-map-marker-check-outline" icon="mdi-map-marker-check-outline"
@click="router.push(`/check-in`)" @click="router.push(`/check-in`)"
/> /> -->
<q-btn <q-btn
flat flat
round round