ประเมิน => permission รายการการประชุม

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-08-09 12:10:44 +07:00
parent b3058bbd43
commit c61e8b4805
6 changed files with 302 additions and 349 deletions

View file

@ -118,7 +118,6 @@ onMounted(() => {
<div v-if="checkPermission($route)?.attrIsCreate"> <div v-if="checkPermission($route)?.attrIsCreate">
<q-btn <q-btn
@click="router.push(`/evaluate/director/add`)" @click="router.push(`/evaluate/director/add`)"
size="12px"
flat flat
round round
color="add" color="add"
@ -220,7 +219,6 @@ onMounted(() => {
<q-btn <q-btn
v-if="checkPermission($route)?.attrIsDelete" v-if="checkPermission($route)?.attrIsDelete"
dense dense
size="12px"
flat flat
round round
color="red" color="red"

View file

@ -1,45 +1,57 @@
<script setup lang="ts"> <script setup lang="ts">
import Form from "@/modules/12_evaluatePersonal/components/Meeting/Form.vue"; import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin"; import { 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 { useQuasar } from "quasar";
import type { FormDataPost } from "@/modules/11_discipline/interface/request/director";
const $q = useQuasar();
const mixin = useCounterMixin();
const { messageError, showLoader, hideLoader, dialogConfirm, success } = mixin;
const router = useRouter();
/** /**
* นทกขอมลทเเกไข * importType
* @param id ระบ คคล
*/ */
function onSubmit(formData: FormDataPost) { import type { FormData } from "@/modules/12_evaluatePersonal/interface/index/meeting";
dialogConfirm($q, () => addData(formData));
}
function addData(formData: any) { /**
showLoader(); * importComponents
http */
.post(config.API.meeting(), { import Form from "@/modules/12_evaluatePersonal/components/Meeting/Form.vue";
round: formData.rounded ?? "",
title: formData.title, /**
dateEnd: formData.dateMeetingEnd, * importStore
dateStart: formData.dateMeetingStart, */
result: formData.consider, import { useCounterMixin } from "@/stores/mixin";
duration: formData.period,
}) /**
.then((res) => { * use
success($q, "บันทึกข้อมูลสำเร็จ"); */
}) const $q = useQuasar();
.catch((e) => { const router = useRouter();
messageError($q, e); const { messageError, showLoader, dialogConfirm, success, hideLoader } =
}) useCounterMixin();
.finally(async () => {
router.push(`/evaluate/meeting`); /**
}); * นทกขอมลการประช
* @param formData อมลการประช
*/
function onSubmit(formData: FormData) {
dialogConfirm($q, () => {
showLoader();
http
.post(config.API.meeting(), {
round: formData.rounded ?? "",
title: formData.title,
dateEnd: formData.dateMeetingEnd,
dateStart: formData.dateMeetingStart,
result: formData.consider,
duration: formData.period,
})
.then(() => {
router.push(`/evaluate/meeting`);
success($q, "บันทึกข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
hideLoader();
});
});
} }
</script> </script>
<template> <template>

View file

@ -1,42 +1,50 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, reactive } from "vue"; import { ref, onMounted, reactive, computed } from "vue";
import Form from "@/modules/12_evaluatePersonal/components/Meeting/Form.vue";
import type { FormData } from "@/modules/12_evaluatePersonal/interface/index/meeting";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import router from "@/router"; 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 type { formData } from "@/modules/09_leave/interface/request/workTime";
/**
* importTyep
*/
import type { FormData } from "@/modules/12_evaluatePersonal/interface/index/meeting";
/**
* importComponents
*/
import Form from "@/modules/12_evaluatePersonal/components/Meeting/Form.vue";
/**
* importStore
*/
import { useCounterMixin } from "@/stores/mixin";
/**
* use
*/
const route = useRoute(); const route = useRoute();
const personalId = ref<string>(route.params.id as string);
console.log(personalId.value);
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin();
const { const {
messageError, messageError,
showLoader, showLoader,
hideLoader, hideLoader,
dialogConfirm, dialogConfirm,
success, success,
date2Thai,
dateToISO, dateToISO,
} = mixin; } = useCounterMixin();
/** const personalId = ref<string>(route.params.id as string);
* เรยกใชงาน fetchData เพอดงขอม const routeName = ref<string>(route.name as string);
*/ const title = computed(() =>
onMounted(() => { routeName.value === "evaluateMeetingdetail"
fetchData(); ? "รายละเอียดการประชุม"
}); : "แก้ไขการประชุม"
);
/** //
* get อมลเกากรณแกไขขอม const data = reactive({
*/
const data = reactive<any>({
rounded: "", rounded: "",
dateMeeting: "", dateMeeting: "",
dateMeetingStart: Date, dateMeetingStart: Date,
@ -48,11 +56,11 @@ const data = reactive<any>({
}); });
/** /**
* งคาจาก api * function fetch อมลการประช
*/ */
const fetchData = async () => { function fetchData() {
showLoader(); showLoader();
await http http
.get(config.API.meetingById(personalId.value)) .get(config.API.meetingById(personalId.value))
.then((res) => { .then((res) => {
const dataApi = res.data.result; const dataApi = res.data.result;
@ -68,41 +76,48 @@ const fetchData = async () => {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
hideLoader(); setTimeout(() => {
hideLoader();
}, 2000);
}); });
}; }
/** /**
* นทกขอมลทเเกไข * นทกขอมลทเเกไข
* @param id ระบ คคล * @param formData อมลการประช
*/ */
function onSubmit(formData: FormData) { function onSubmit(formData: FormData) {
dialogConfirm($q, () => putData(formData)); dialogConfirm($q, () => {
console.log(personalId.value); showLoader();
http
.put(config.API.meetingById(personalId.value), {
round: formData.rounded ?? "",
title: formData.title,
dateStart: formData.dateMeetingStart
? dateToISO(formData.dateMeetingStart)
: null,
dateEnd: formData.dateMeetingEnd
? dateToISO(formData.dateMeetingEnd)
: null,
result: formData.consider,
duration: formData.period,
})
.then(() => {
success($q, "บันทึกข้อมูลสำเร็จ");
router.push(`/evaluate/meeting`);
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
});
} }
function putData(formData: any) { onMounted(() => {
showLoader(); fetchData();
http });
.put(config.API.meetingById(personalId.value), {
round: formData.rounded ?? "",
title: formData.title,
dateStart: dateToISO(formData.dateMeetingStart),
dateEnd: dateToISO(formData.dateMeetingEnd),
result: formData.consider,
duration: formData.period,
})
.then((res) => {
success($q, "บันทึกข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
hideLoader();
router.push(`/evaluate/meeting`);
});
}
</script> </script>
<template> <template>
<div class="col-xs-12 col-sm-12 col-md-11"> <div class="col-xs-12 col-sm-12 col-md-11">
@ -117,7 +132,7 @@ function putData(formData: any) {
class="q-mr-sm" class="q-mr-sm"
@click="router.push(`/evaluate/meeting`)" @click="router.push(`/evaluate/meeting`)"
/> />
แกไขการประช {{ title }}
</div> </div>
<Form :on-submit="onSubmit" :data="data" /> <Form :on-submit="onSubmit" :data="data" />

View file

@ -1,30 +1,32 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, watch, onMounted } from "vue"; import { ref, reactive, onMounted, computed } from "vue";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import axios from "axios"; import axios from "axios";
import type {
FormData,
FormRef,
FileOj,
} from "@/modules/12_evaluatePersonal/interface/index/meeting";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
/**
* importRtpe
*/
import type { FormData } from "@/modules/12_evaluatePersonal/interface/index/meeting";
/**
* use
*/
const route = useRoute(); const route = useRoute();
const id = ref<string>(route.params.id as string);
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin();
const { const {
messageError, messageError,
showLoader, showLoader,
dialogMessageNotify,
dialogConfirm,
success, success,
date2Thai, date2Thai,
hideLoader, hideLoader,
dialogRemove, dialogRemove,
} = mixin; } = useCounterMixin();
/** /**
* props มาจาก page หล * props มาจาก page หล
*/ */
@ -38,15 +40,13 @@ const props = defineProps({
default: () => "", default: () => "",
}, },
}); });
const isReadonly = ref<boolean>(false); //
const emit = defineEmits(["formDataReturn"]); const emit = defineEmits(["formDataReturn"]);
/**
* อมลเลขประจำตวประชาชน const id = ref<string>(route.params.id as string);
*/ const routeName = ref<string>(route.name as string);
// const isReadonly = computed(() =>
const idCard = ref<string>(""); routeName.value === "evaluateMeetingdetail" ? true : false
const file = ref<any>(); );
const fileOj = reactive<FileOj[]>([]);
const formData = reactive<FormData>({ const formData = reactive<FormData>({
id: "", id: "",
@ -57,94 +57,41 @@ const formData = reactive<FormData>({
consider: "", consider: "",
period: "", period: "",
title: "", title: "",
// file: fileOj,
}); });
const file = ref<any>();
const fileData = ref<any>([]);
const fileDataDownload = ref<any>([]);
/** /** บันทึกข้อมูล */
* เชคขอมลจาก props function submit() {
* เมอมอม props.onSubmit(formData);
* เกบขอมลลง formData
*/
watch(props.data, async () => {
// console.log("data==>", props.data)
formData.id = props.data.id;
formData.rounded = props.data.rounded;
formData.dateMeetingStart = props.data.dateMeetingStart;
formData.dateMeetingEnd = props.data.dateMeetingEnd;
formData.consider = props.data.consider;
formData.period = props.data.period;
formData.title = props.data.title;
});
/**
* ตรวจสอบขอมลกอนสงไปย api
*/
const roundedRef = ref<object | null>(null);
const dateMeetingStartRef = ref<object | null>(null);
const dateMeetingEndRef = ref<object | null>(null);
const considerRef = ref<object | null>(null);
const periodRef = ref<object | null>(null);
const titleRef = ref<object | null>(null);
const formRef: FormRef = {
rounded: roundedRef,
dateMeetingStartRef: dateMeetingStartRef,
dateMeetingEndRef: dateMeetingEndRef,
consider: considerRef,
period: periodRef,
title: titleRef,
};
/** ฟังชั่นตรวจสอบความถูกต้องก่อน บันทึก */
function onValidate() {
const hasError = [];
for (const key in formRef) {
if (Object.prototype.hasOwnProperty.call(formRef, key)) {
const property = formRef[key];
if (property.value && typeof property.value.validate === "function") {
const isValid = property.value.validate();
hasError.push(isValid);
}
}
}
if (hasError.every((result) => result === true)) {
props.onSubmit(formData);
}
} }
const fileData = ref<any>([]);
/** /**
* งคาจาก api * function fetch อมลไฟลเอกสารหลกฐาน
*/ */
const fetchDataFile = async () => { function fetchDataFile() {
if (id.value != undefined) { if (id.value != undefined) {
showLoader(); showLoader();
await http http
.get(config.API.meetingFilebyId("การประชุม", id.value)) .get(config.API.meetingFilebyId("การประชุม", id.value))
.then((res) => { .then((res) => {
const dataFile = res.data; const dataFile = res.data;
// const dataFile = res.data.result;
fileData.value = dataFile; fileData.value = dataFile;
}) })
.catch((e) => {
// messageError($q, e);
})
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
}); });
} }
}; }
/** /**
* function download * function ดาวนโหลดไฟลเอกสารหลกฐาน
*/ */
const fileDataDownload = ref<any>([]); function fetchDataFileDownload(pathName: string) {
const fetchDataFileDownload = async (pathName: string) => {
console.log(fileData.value[0].fileName);
if (id.value !== undefined) { if (id.value !== undefined) {
showLoader(); showLoader();
console.log(fileData.value[0].fileName); http
await http
.get(config.API.meetingFileDowloadbyId("การประชุม", id.value, pathName)) .get(config.API.meetingFileDowloadbyId("การประชุม", id.value, pathName))
.then((res) => { .then((res) => {
const dataFile = res.data; const dataFile = res.data;
@ -158,13 +105,12 @@ const fetchDataFileDownload = async (pathName: string) => {
hideLoader(); hideLoader();
}); });
} }
}; }
/** /**
* addFiles * function สรางลงคปโหลดไฟลเอกสารหลกฐาน
*/ */
function uploadFile() { function uploadFile() {
// fetchDataFile();
if (file) { if (file) {
const fileList = [ const fileList = [
{ {
@ -191,64 +137,56 @@ function uploadFile() {
}) })
.catch((e) => { .catch((e) => {
messageError($q, e); messageError($q, e);
}) hideLoader();
.finally(async () => {
file.value = null;
// hideLoader();
}); });
} }
} }
async function uploadfileURL(uploadUrl: string, file: any) { /**
await axios * function ปโหลดไฟลเอกสารหลกฐาน
*/
function uploadfileURL(uploadUrl: string, file: any) {
axios
.put(uploadUrl, file, { .put(uploadUrl, file, {
headers: { headers: {
"Content-Type": file.type, "Content-Type": file.type,
}, },
}) })
.then(() => { .then(() => {
success($q, "อัปโหลไฟล์สำเร็จ"); setTimeout(async () => {
await fetchDataFile();
await success($q, "อัปโหลไฟล์สำเร็จ");
file.value = null;
}, 500);
}) })
.catch((err) => { .catch((err) => {
messageError($q, err); messageError($q, err);
}) hideLoader();
.finally(async () => {
await setTimeout(() => fetchDataFile(), 500);
}); });
} }
function deleteFile(id: string) {
dialogRemove($q, () => confirmDelete(id));
}
/** /**
* นย ลบ ไฟล * function นยนการลบไฟลเอกสารหลกฐาน
* @param id id file * @param fileName file
*/ */
function confirmDelete(fileName: string) { function deleteFile(fileName: string) {
showLoader(); dialogRemove($q, () => {
http showLoader();
.delete(config.API.meetingFileDowloadbyId("การประชุม", id.value, fileName)) http
.then((res) => { .delete(
success($q, `ลบไฟล์สำเร็จ`); config.API.meetingFileDowloadbyId("การประชุม", id.value, fileName)
}) )
.catch((e) => { .then(() => {
messageError($q, e); setTimeout(async () => {
}) await fetchDataFile();
.finally(() => { await success($q, `ลบไฟล์สำเร็จ`);
setTimeout(() => fetchDataFile(), 1000); }, 1000);
}); })
} .catch((e) => {
messageError($q, e);
//checkDate hideLoader();
function checkDate() { });
if (formData.dateMeetingEnd !== null && formData.dateMeetingStart !== null) { });
if (formData.dateMeetingEnd <= formData.dateMeetingStart) {
formData.dateMeetingEnd = null;
}
} else {
console.log("One or both dates are null");
}
} }
function inputEdit(val: boolean) { function inputEdit(val: boolean) {
@ -260,22 +198,32 @@ function inputEdit(val: boolean) {
/**Hook */ /**Hook */
onMounted(() => { onMounted(() => {
setTimeout(() => fetchDataFile(), 500); setTimeout(() => {
// fetchDataFileDownload(); fetchDataFile();
if (props.data) {
formData.id = props.data.id;
formData.rounded = props.data.rounded;
formData.dateMeetingStart = props.data.dateMeetingStart;
formData.dateMeetingEnd = props.data.dateMeetingEnd;
formData.consider = props.data.consider;
formData.period = props.data.period;
formData.title = props.data.title;
}
}, 1000);
}); });
</script> </script>
<template> <template>
<form @submit.prevent.stop="onValidate"> <q-form greedy @submit.prevent @validation-success="submit">
<q-card bordered> <q-card bordered>
<div class="col-12 row q-pa-md q-col-gutter-md"> <div class="col-12 row q-pa-md q-col-gutter-md">
<div class="col-3"> <div class="col-3">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
:readonly="isReadonly"
dense dense
outlined outlined
v-model="formData.rounded" v-model="formData.rounded"
label="ครั้งที่" label="ครั้งที่"
ref="roundedRef"
for="roundedRef" for="roundedRef"
hide-bottom-space hide-bottom-space
:rules="[(val: string) => val !== null && val !== '' || `${'กรุณากรอกครั้งที่'}`]" :rules="[(val: string) => val !== null && val !== '' || `${'กรุณากรอกครั้งที่'}`]"
@ -283,13 +231,15 @@ onMounted(() => {
</div> </div>
<div class="col-3"> <div class="col-3">
<datepicker <datepicker
:readonly="isReadonly"
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formData.dateMeetingStart" v-model="formData.dateMeetingStart"
:locale="'th'" :locale="'th'"
autoApply autoApply
:enableTimePicker="true" :enableTimePicker="true"
week-start="0" week-start="0"
@update:model-value="checkDate" :class="inputEdit(isReadonly)"
:max-date="formData.dateMeetingEnd"
> >
<template #year="{ year }">{{ year + 543 }}</template> <template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{ <template #year-overlay-value="{ value }">{{
@ -297,8 +247,8 @@ onMounted(() => {
}}</template> }}</template>
<template #trigger> <template #trigger>
<q-input <q-input
:readonly="isReadonly"
for="selectDate" for="selectDate"
ref="dateMeetingStartRef"
dense dense
outlined outlined
:model-value=" :model-value="
@ -327,6 +277,8 @@ onMounted(() => {
:enableTimePicker="true" :enableTimePicker="true"
week-start="0" week-start="0"
:min-date="formData.dateMeetingStart" :min-date="formData.dateMeetingStart"
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
> >
<template #year="{ year }">{{ year + 543 }}</template> <template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{ <template #year-overlay-value="{ value }">{{
@ -334,8 +286,8 @@ onMounted(() => {
}}</template> }}</template>
<template #trigger> <template #trigger>
<q-input <q-input
:readonly="isReadonly"
for="selectDate" for="selectDate"
ref="dateMeetingEndRef"
dense dense
outlined outlined
:model-value=" :model-value="
@ -358,11 +310,11 @@ onMounted(() => {
<div class="col-6"> <div class="col-6">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
:readonly="isReadonly"
dense dense
outlined outlined
v-model="formData.title" v-model="formData.title"
label="หัวข้อการประชุม" label="หัวข้อการประชุม"
ref="titleRef"
for="titleRef" for="titleRef"
hide-bottom-space hide-bottom-space
:rules="[(val: string) => !!val || `${'กรุณากรอกหัวข้อการประชุม'}`]" :rules="[(val: string) => !!val || `${'กรุณากรอกหัวข้อการประชุม'}`]"
@ -371,11 +323,11 @@ onMounted(() => {
<div class="col-12"> <div class="col-12">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
:readonly="isReadonly"
dense dense
outlined outlined
v-model="formData.consider" v-model="formData.consider"
label="ผลการพิจารณาของคณะกรรมการประเมินผลงานแต่ละคณะ" label="ผลการพิจารณาของคณะกรรมการประเมินผลงานแต่ละคณะ"
ref="considerRef"
for="considerRef" for="considerRef"
hide-bottom-space hide-bottom-space
type="textarea" type="textarea"
@ -385,11 +337,11 @@ onMounted(() => {
<div class="col-12"> <div class="col-12">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
:readonly="isReadonly"
dense dense
outlined outlined
v-model="formData.period" v-model="formData.period"
label="ระยะเวลาในการแก้ไขผลงาน" label="ระยะเวลาในการแก้ไขผลงาน"
ref="periodRef"
for="periodRef" for="periodRef"
hide-bottom-space hide-bottom-space
type="textarea" type="textarea"
@ -404,6 +356,7 @@ onMounted(() => {
<div class="col-12"><q-separator /></div> <div class="col-12"><q-separator /></div>
<div class="col-12 q-pa-sm row"> <div class="col-12 q-pa-sm row">
<q-file <q-file
:readonly="isReadonly"
for="inputFiles" for="inputFiles"
class="col-11" class="col-11"
outlined outlined
@ -434,7 +387,6 @@ onMounted(() => {
</div> </div>
</div> </div>
<div class="col-12 q-pa-sm row" v-if="fileData.length > 0"> <div class="col-12 q-pa-sm row" v-if="fileData.length > 0">
<!-- v-if="file.length > 0" v-else -->
<q-list <q-list
v-for="data in fileData" v-for="data in fileData"
:key="data.id" :key="data.id"
@ -446,7 +398,6 @@ onMounted(() => {
<q-item-section>{{ data.fileName }}</q-item-section> <q-item-section>{{ data.fileName }}</q-item-section>
<q-space /> <q-space />
<q-btn <q-btn
size="12px"
flat flat
round round
dense dense
@ -456,7 +407,7 @@ onMounted(() => {
><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn ><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn
> >
<q-btn <q-btn
size="12px" v-if="!isReadonly"
flat flat
round round
dense dense
@ -476,8 +427,8 @@ onMounted(() => {
</div> </div>
</div> </div>
<q-separator /> <q-separator v-if="!isReadonly" />
<div class="row col-12 q-pa-sm"> <div class="row col-12 q-pa-sm" v-if="!isReadonly">
<q-space /> <q-space />
<q-btn <q-btn
for="ButtonOnSubmit" for="ButtonOnSubmit"
@ -489,5 +440,5 @@ onMounted(() => {
> >
</div> </div>
</q-card> </q-card>
</form> </q-form>
</template> </template>

View file

@ -1,68 +1,30 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, useAttrs, onMounted, watch } from "vue"; import { ref, onMounted } from "vue";
import type { QTableProps } from "quasar"; import { checkPermission } from "@/utils/permissions";
import router from "@/router";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useEvaluateMeetingDataStore } from "@/modules/12_evaluatePersonal/store/MeetingStore"; import router from "@/router";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
/**
* importStore
*/
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateMeetingDataStore } from "@/modules/12_evaluatePersonal/store/MeetingStore";
const $q = useQuasar(); const $q = useQuasar();
const dataStore = useEvaluateMeetingDataStore(); const dataStore = useEvaluateMeetingDataStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const { messageError, showLoader, hideLoader, dialogRemove, success } = mixin;
messageError,
showLoader,
hideLoader,
dialogConfirm,
dialogRemove,
success,
} = mixin;
// const currentPage = ref<number>(1);
// const maxPage = ref<number>(1);
// const page = ref<number>(1);
// const rowsPerPage = ref<number>(10);
/** /**
*pagination ของตาราง * function fetch อมลรายการการประช
*/ */
const pagination = ref({ function getList() {
descending: false,
page: 1,
rowsPerPage: 10,
});
// watch(
// () => currentPage.value,
// () => {
// rowsPerPage.value = pagination.value.rowsPerPage;
// getList();
// }
// );
// watch(
// () => pagination.value.rowsPerPage,
// () => {
// rowsPerPage.value = pagination.value.rowsPerPage;
// currentPage.value = 1;
// getList();
// }
// );
async function getList() {
showLoader(); showLoader();
await http http
.get( .get(config.API.meeting())
config.API
.meeting
// currentPage.value,
// rowsPerPage.value,
// filterKeyword.value
()
)
.then((res) => { .then((res) => {
// maxPage.value = Math.ceil(res.data.result.total / rowsPerPage.value);
const data = res.data.result; const data = res.data.result;
dataStore.fetchData(data); dataStore.fetchData(data);
}) })
@ -75,31 +37,23 @@ async function getList() {
} }
/** /**
* ลบอม * ลบรายการการประช
* @param id ไอดของขอม * @param id รายการการประช
*/ */
function clickDelete(id: string) { function clickDelete(id: string) {
dialogRemove($q, async () => deleteData(id), `ลบข้อมูล`); dialogRemove($q, async () => {
} showLoader();
http
/** .delete(config.API.meetingById(id))
* ลบขอม .then(async () => {
* @param id type await getList();
*/ await success($q, "ลบข้อมูลสำเร็จ");
async function deleteData(id: string) { })
console.log(id); .catch((e) => {
showLoader(); messageError($q, e);
await http showLoader();
.delete(config.API.meetingById(id)) });
.then((res) => { });
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
await getList();
});
} }
/** /**
@ -107,7 +61,6 @@ async function deleteData(id: string) {
*/ */
onMounted(() => { onMounted(() => {
getList(); getList();
// get store
}); });
/** /**
@ -122,19 +75,22 @@ function resetFilter() {
} }
} }
function filterFn() { /**
getList(); *pagination ของตาราง
console.log("enter", filterKeyword.value); */
} const pagination = ref({
descending: false,
page: 1,
rowsPerPage: 10,
});
</script> </script>
<template> <template>
<div class="toptitle text-dark col-12 row items-center">รายการการประช</div> <div class="toptitle text-dark col-12 row items-center">รายการการประช</div>
<q-card flat bordered class="col-12 q-mt-sm q-pa-md"> <q-card flat bordered class="col-12 q-mt-sm q-pa-md">
<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> <div v-if="checkPermission($route)?.attrIsCreate">
<q-btn <q-btn
@click="router.push(`/evaluate/meeting/add`)" @click="router.push(`/evaluate/meeting/add`)"
size="12px"
flat flat
round round
color="add" color="add"
@ -154,7 +110,6 @@ function filterFn() {
outlined outlined
debounce="300" debounce="300"
placeholder="ค้นหา" placeholder="ค้นหา"
@keydown.enter.prevent="filterFn"
> >
<template v-slot:append> <template v-slot:append>
<q-icon v-if="filterKeyword == ''" name="search" /> <q-icon v-if="filterKeyword == ''" name="search" />
@ -197,17 +152,6 @@ function filterFn() {
v-model:pagination="pagination" v-model:pagination="pagination"
:visible-columns="dataStore.visibleColumns" :visible-columns="dataStore.visibleColumns"
> >
<!-- <template v-slot:pagination="scope">
<q-pagination
v-model="currentPage"
active-color="primary"
color="dark"
:max="Number(maxPage)"
size="sm"
boundary-links
direction-links
></q-pagination>
</template> -->
<template v-slot:header="props"> <template v-slot:header="props">
<q-tr :props="props"> <q-tr :props="props">
<q-th auto-width /> <q-th auto-width />
@ -217,26 +161,50 @@ function filterFn() {
</q-tr> </q-tr>
</template> </template>
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer"> <q-tr :props="props">
<q-td auto-width> <q-td auto-width>
<q-btn <q-btn
v-if="checkPermission($route)?.attrIsGet"
flat
dense
round
color="info"
icon="mdi-eye"
@click.pervent="
router.push(`/evaluate/meeting-detail/${props.row.id}`)
"
>
<q-tooltip>รายละเอยด</q-tooltip>
</q-btn>
<q-btn
v-if="
checkPermission($route)?.attrIsGet &&
checkPermission($route)?.attrIsUpdate
"
flat
dense
round
color="edit"
icon="edit"
@click.pervent="
router.push(`/evaluate/meeting/${props.row.id}`)
"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<q-btn
v-if="checkPermission($route)?.attrIsDelete"
dense dense
size="12px"
flat flat
round round
color="red" color="red"
@click="clickDelete(props.row.id)" @click.pervent="clickDelete(props.row.id)"
icon="mdi-delete" icon="mdi-delete"
> >
<q-tooltip>ลบขอม</q-tooltip> <q-tooltip>ลบขอม</q-tooltip>
</q-btn> </q-btn>
</q-td> </q-td>
<q-td <q-td v-for="col in props.cols" :key="col.name" :props="props">
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="router.push(`/evaluate/meeting/${props.row.id}`)"
>
<div v-if="col.name == 'no'"> <div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }} {{ props.rowIndex + 1 }}
</div> </div>
@ -244,7 +212,6 @@ function filterFn() {
{{ col.value }} {{ col.value }}
</div> </div>
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
</d-table> </d-table>

View file

@ -7,8 +7,8 @@ const directorPage = () =>
import("@/modules/12_evaluatePersonal/components/Director/MainPage.vue"); import("@/modules/12_evaluatePersonal/components/Director/MainPage.vue");
const directorAddPage = () => const directorAddPage = () =>
import("@/modules/12_evaluatePersonal/components/Director/AddPage.vue"); import("@/modules/12_evaluatePersonal/components/Director/AddPage.vue");
const directorEditPage = () => // const directorEditPage = () =>
import("@/modules/12_evaluatePersonal/components/Director/EditPage.vue"); // import("@/modules/12_evaluatePersonal/components/Director/EditPage.vue");
const meetingPage = () => const meetingPage = () =>
import("@/modules/12_evaluatePersonal/components/Meeting/MainPage.vue"); import("@/modules/12_evaluatePersonal/components/Meeting/MainPage.vue");
@ -58,16 +58,16 @@ export default [
Role: "STAFF", Role: "STAFF",
}, },
}, },
{ // {
path: "/evaluate/director/:id", // path: "/evaluate/director/:id",
name: "evaluateDirectorEdit", // name: "evaluateDirectorEdit",
component: directorEditPage, // component: directorEditPage,
meta: { // meta: {
Auth: true, // Auth: true,
Key: "SYS_EVA_INFO", // Key: "SYS_EVA_INFO",
Role: "STAFF", // Role: "STAFF",
}, // },
}, // },
{ {
path: "/evaluate/meeting", path: "/evaluate/meeting",
name: "evaluateMeeting", name: "evaluateMeeting",
@ -98,4 +98,14 @@ export default [
Role: "STAFF", Role: "STAFF",
}, },
}, },
{
path: "/evaluate/meeting-detail/:id",
name: "evaluateMeetingdetail",
component: meetingEditPage,
meta: {
Auth: true,
Key: "SYS_EVA_INFO",
Role: "STAFF",
},
},
]; ];