Refactoring code module 06_evaluate

This commit is contained in:
STW_TTTY\stwtt 2024-09-04 14:52:04 +07:00
parent 4253226ac3
commit d03e3b9e98
22 changed files with 192 additions and 400 deletions

View file

@ -1,24 +1,17 @@
<script setup lang="ts">
import { ref, watch } from "vue";
import { useRouter } from "vue-router";
import { useQuasar } from "quasar";
/** import Components*/
import DialogHeader from "@/components/DialogHeader.vue";
/** import Store*/
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import DialogHeader from "@/components/DialogHeader.vue";
/** use*/
const router = useRouter();
const $q = useQuasar();
const mixin = useCounterMixin();
const store = useEvaluateStore();
const slide = ref<string>("1");
const { dialogConfirm } = mixin;
const props = defineProps({
modal: {
type: Boolean,

View file

@ -2,8 +2,11 @@
import { ref, reactive, onMounted, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import { useCounterMixin } from "@/stores/mixin";
/** import Type*/
import type {
@ -29,17 +32,12 @@ import ViewStep3 from "@/modules/06_evaluate/components/viewstep/viewStep3.vue";
import ViewStep7 from "@/modules/06_evaluate/components/viewstep/viewStep7.vue"; //
import PopupHistory from "@/modules/06_evaluate/components/viewstep/popupHistory.vue"; //
/** import Store*/
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import { useCounterMixin } from "@/stores/mixin";
/** use*/
const router = useRouter();
const route = useRoute();
const store = useEvaluateStore();
const mixin = useCounterMixin();
const $q = useQuasar();
const splitterModel = 20;
const {
showLoader,
@ -232,7 +230,6 @@ async function updateCheckSpec(data: FormSpec) {
*/
function updateFormDetail(data: any) {
formDetail.value = data;
console.log("🚀 ~ updateFormDetail ~ data:", data);
}
/** function เช็คการการคุณสมบัติ*/

View file

@ -1,19 +1,20 @@
<script setup lang="ts">
import { reactive, onMounted } from "vue";
import { useRouter } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
const router = useRouter();
import type { FormCommandSe } from "@/modules/06_evaluate/interface/evalute";
const $q = useQuasar();
const router = useRouter();
const mixin = useCounterMixin();
const { dialogConfirm, messageError, showLoader, hideLoader } = mixin;
const formData = reactive({
const formData = reactive<FormCommandSe>({
subject: "",
author: "",
commanderFullname: "",

View file

@ -1,20 +1,20 @@
<script setup lang="ts">
import { ref, reactive, watch, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import type { FormRef } from "@/modules/06_evaluate/interface/evalute";
import axios from "axios";
import http from "@/plugins/http";
import config from "@/app.config";
import genReport from "@/plugins/genreport";
import { useCounterMixin } from "@/stores/mixin";
const router = useRouter();
const route = useRoute();
import type {
FormRef,
FormCommand,
FormData,
} from "@/modules/06_evaluate/interface/evalute";
const evaluateId = ref<string>(route.params.id as string);
const profile = ref<any>();
const $q = useQuasar();
const mixin = useCounterMixin();
const {
@ -25,36 +25,31 @@ const {
date2Thai,
success,
} = mixin;
const router = useRouter();
const route = useRoute();
interface FormCommand {
commanderFullname: string;
commanderPosition: string;
commanderAboveFullname: string;
commanderAbovePosition: string;
author: string;
subject: string;
assignedPosition: string;
}
const evaluateId = ref<string>(route.params.id as string);
const profile = ref<any>();
/** form ผู้เซ็นเอกสาร*/
const formCommand = reactive<FormCommand>({
commanderFullname: "",
commanderPosition: "",
commanderAboveFullname: "",
commanderAbovePosition: "",
author: "",
subject: "",
commanderFullname: "", //
commanderPosition: "", //
commanderAboveFullname: "", // 1
commanderAbovePosition: "", // 1
author: "", //
subject: "", //
assignedPosition: "",
});
const formData = reactive<any>({
const formData = reactive<FormData>({
id: "",
subject: "",
author: "",
commanderFullname: "",
commanderPosition: "",
commanderAboveFullname: "",
commanderAbovePosition: "",
subject: "", //
author: "", //
commanderFullname: "", //
commanderPosition: "", //
commanderAboveFullname: "", // 1
commanderAbovePosition: "", // 1
});
const downloadFile1 = ref<string>("");
@ -65,12 +60,12 @@ const downloadFile5 = ref<string>("");
const downloadFile6 = ref<string>("");
/** ตัวแปร file*/
const fileEvaluation1 = ref<any>();
const fileEvaluation2 = ref<any>();
const fileEvaluation3 = ref<any>();
const fileEvaluation4 = ref<any>();
const fileEvaluation5 = ref<any>();
const fileEvaluation6 = ref<any>();
const fileEvaluation1 = ref<File | null>();
const fileEvaluation2 = ref<File | null>();
const fileEvaluation3 = ref<File | null>();
const fileEvaluation4 = ref<File | null>();
const fileEvaluation5 = ref<File | null>();
const fileEvaluation6 = ref<File | null>();
const fileEvaluation1Ref = ref<object | null>(null);
const fileEvaluation2Ref = ref<object | null>(null);
@ -98,60 +93,6 @@ const objectRef: FormRef = {
commanderAbovePosition: commanderAbovePositionRef,
};
const files = [
{
id: "file1",
fileName: "แบบพิจารณาคุณสมบัติบุคคล",
pathName: "1-แบบพิจารณาคุณสมบัติบุคคล",
tp: "EV1_005",
templateName: "template-1",
nameFile: "แบบพิจารณาคุณสมบัติบุคคล",
},
{
id: "file2",
fileName: "แบบแสดงรายละเอียดการเสนอผลงาน",
pathName: "2-แบบแสดงรายละเอียดการเสนอผลงาน",
tp: "EV1_006",
templateName: "template-2",
nameFile: "แบบแสดงรายละเอียดการเสนอผลงาน",
},
{
id: "file3",
fileName:
"แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)",
pathName:
"3-แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)",
tp: "EV1_007",
templateName: "template-3",
nameFile:
"แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)",
},
{
id: "file4",
fileName: "แบบประเมินคุณลักษณะบุคคล",
pathName: "4-แบบประเมินคุณลักษณะบุคคล",
tp: "EV1_008",
templateName: "template-4",
nameFile: "แบบประเมินคุณลักษณะบุคคล",
},
{
id: "file5",
fileName: "แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)",
pathName: "5-แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)",
tp: "EV1_009",
templateName: "template-5",
nameFile: "แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)",
},
{
id: "file6",
fileName: "ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)",
pathName: "6-ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)",
tp: "EV1_010",
templateName: "template-6",
nameFile: "ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)",
},
];
/**
* function ดาวนโหลดไฟล
* @param fileName อไฟล
@ -169,54 +110,24 @@ async function downloadFile(fileName: string) {
.then((res) => {
if (fileName === "1-แบบพิจารณาคุณสมบัติบุคคล") {
downloadFile1.value = res.data.downloadUrl;
// fileEvaluation1.value = res.data.upload;
} else if (fileName === "2-แบบแสดงรายละเอียดการเสนอผลงาน") {
downloadFile2.value = res.data.downloadUrl;
// fileEvaluation2.value = res.data.upload;
} else if (
fileName ===
"3-แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)"
) {
downloadFile3.value = res.data.downloadUrl;
// fileEvaluation3.value = res.data.upload;
} else if (fileName === "4-แบบประเมินคุณลักษณะบุคคล") {
downloadFile4.value = res.data.downloadUrl;
// fileEvaluation4.value = res.data.upload;
} else if (
fileName === "5-แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)"
) {
downloadFile5.value = res.data.downloadUrl;
// fileEvaluation5.value = res.data.upload;
} else if (fileName === "6-ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)") {
downloadFile6.value = res.data.downloadUrl;
// fileEvaluation6.value = res.data.upload;
}
})
.finally(() => {
const ref = {
commanderFullnameRef: commanderFullnameRef.value,
commanderPositionRef: commanderPositionRef.value,
commanderAboveFullnameRef: commanderAboveFullnameRef.value,
commanderAbovePositionRef: commanderAbovePositionRef.value,
fileEvaluation1Ref: fileEvaluation1Ref.value,
fileEvaluation2Ref: fileEvaluation2Ref.value,
fileEvaluation3Ref: fileEvaluation3Ref.value,
fileEvaluation4Ref: fileEvaluation4Ref.value,
fileEvaluation5Ref: fileEvaluation5Ref.value,
fileEvaluation6Ref: fileEvaluation6Ref.value,
performance: performanceRef.value,
performanceOwner: performanceOwnerRef.value,
downloadFile: [
downloadFile1.value,
downloadFile2.value,
downloadFile3.value,
downloadFile4.value,
downloadFile5.value,
downloadFile6.value,
],
statusUpload: false,
};
hideLoader();
});
}
@ -226,9 +137,7 @@ function onSubmit() {
showLoader();
http
.post(config.API.evaluationExpertise, formData)
.then((res) => {
// props.fetchActive?.();
})
.then((res) => {})
.catch((err) => {
messageError($q, err);
})

View file

@ -2,13 +2,11 @@
import { ref, watch } from "vue";
import type { QTableProps } from "quasar";
/***importComponents*/
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import Table from "@/components/Table.vue";
import DialogHeader from "@/components/DialogHeader.vue";
/** importStore*/
import { useEvaluateStore } from "@/modules/06_evaluate/store";
/**use*/
const store = useEvaluateStore();
@ -164,9 +162,6 @@ watch(props, () => {
>
<template #columns="props">
<q-tr :props="props">
<!-- <q-td key="no" :props="props">
{{ props.rowIndex + 1 }}
</q-td> -->
<q-td key="degree" :props="props">
{{ props.row.degree }}
</q-td>
@ -180,8 +175,6 @@ watch(props, () => {
{{ props.row.special }}
</q-td>
<q-td key="checked" :props="props">
<!-- v-if="educations?.find((x:any)=> (props.row.year && x.educationLevel == props.row.checked && x.year == props.row.year) || (!props.row.year && x.educationLevel == props.row.checked))" -->
<!-- {{ props.row.year }}-{{ props.row.checked }}-{{ educations }} -->
<q-icon
v-if="educations?.find((x:any)=> (props.row.year && x.educationLevel == props.row.checked && x.durationYear == props.row.year) || (!props.row.year && x.educationLevel == props.row.checked))"
name="checked"

View file

@ -2,20 +2,17 @@
import { ref, onMounted, watch } from "vue";
import { useRouter } from "vue-router";
import { useQuasar } from "quasar";
import config from "@/app.config";
import http from "@/plugins/http";
/**import Type */
import type { QTableProps } from "quasar";
/** import Store */
import config from "@/app.config";
import http from "@/plugins/http";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import { useCounterMixin } from "@/stores/mixin";
/** use*/
const $q = useQuasar();
const store = useEvaluateStore();
const mixin = useCounterMixin();
const $q = useQuasar();
const router = useRouter();
const { dialogRemove, showLoader, hideLoader, success, messageError } = mixin;
@ -140,16 +137,16 @@ function redirectToDetail(data: any) {
router.push(`/evaluate/detail/${data.typeparam.toLowerCase()}/${data.id}`);
}
/** function Callblck ทำงานเมื่อ pagination มีการเปลี่ยนแปลง */
watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
updateProp(pagination.value, currentPage.value);
});
/** Hook lifecycle*/
onMounted(() => {
store.columns = columns.value;
store.visibleColumns = visibleColumns.value;
});
/** function Callblck ทำงานเมื่อ pagination มีการเปลี่ยนแปลง */
watch([() => currentPage.value, () => pagination.value.rowsPerPage], () => {
updateProp(pagination.value, currentPage.value);
});
</script>
<template>

View file

@ -41,15 +41,6 @@ const columnsDrictor = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
// {
// name: "duty",
// align: "left",
// label: "",
// sortable: true,
// field: "duty",
// headerStyle: "font-size: 14px",
// style: "font-size: 14px",
// },
{
name: "email",
align: "left",

View file

@ -1,18 +1,15 @@
<script setup lang="ts">
import { reactive, onMounted, ref } from "vue";
/**importTyep*/
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import type {
PersonInformation,
FormSpec,
} from "@/modules/06_evaluate/interface/evalute";
/** importComponents*/
import PopupCheckFeatures from "@/modules/06_evaluate/components/PopupCheckFeatures.vue";
/** importStores*/
import { useEvaluateStore } from "@/modules/06_evaluate/store";
/** use*/
const store = useEvaluateStore();

View file

@ -1,18 +1,17 @@
<script setup lang="ts">
import { ref, watch, onMounted, reactive } from "vue";
import { useRouter, useRoute } from "vue-router";
import { VuePDF, usePDF } from "@tato30/vue-pdf";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import axios from "axios";
import http from "@/plugins/http";
import config from "@/app.config";
import axios from "axios";
import genReport from "@/plugins/genreport";
import { tokenParsed } from "@/plugins/auth";
import { VuePDF } from "@tato30/vue-pdf";
/** importType*/
import type { FormCommand } from "@/modules/06_evaluate/interface/evalute";
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
@ -21,7 +20,6 @@ const $q = useQuasar();
const store = useEvaluateStore();
const mixin = useCounterMixin();
const route = useRoute();
const { showLoader, hideLoader, date2Thai, messageError, success } = mixin;
const evaluateId = ref<string>(route.params.id.toString());
@ -86,12 +84,12 @@ function updateInput(val: any) {
}
/** ตัวแปร file*/
const fileEvaluation1 = ref<any>();
const fileEvaluation2 = ref<any>();
const fileEvaluation3 = ref<any>();
const fileEvaluation4 = ref<any>();
const fileEvaluation5 = ref<any>();
const fileEvaluation6 = ref<any>();
const fileEvaluation1 = ref<File | null>();
const fileEvaluation2 = ref<File | null>();
const fileEvaluation3 = ref<File | null>();
const fileEvaluation4 = ref<File | null>();
const fileEvaluation5 = ref<File | null>();
const fileEvaluation6 = ref<File | null>();
const modalView = ref<boolean>(false);
const numOfPages = ref<number>(0);
@ -399,32 +397,6 @@ async function downloadFile(fileName: string) {
});
}
/**lifecycle Hooks*/
onMounted(async () => {
const user = await tokenParsed();
if (user) {
formCommand.author = user.name;
}
showLoader();
await Promise.all([
fetcheSigner(evaluateId.value),
fetchCheckSpec(evaluateId.value),
downloadFile("1-แบบพิจารณาคุณสมบัติบุคคล"),
downloadFile("2-แบบแสดงรายละเอียดการเสนอผลงาน"),
downloadFile(
"3-แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)"
),
downloadFile("4-แบบประเมินคุณลักษณะบุคคล"),
downloadFile("5-แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)"),
downloadFile("6-ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)"),
]);
// .then(() => {
// setTimeout(() => {
// hideLoader();
// }, 2000);
// });
});
function getCommander() {
http
.get(config.API.searchCommander)
@ -475,6 +447,27 @@ watch(
}, 200);
}
);
/**lifecycle Hooks*/
onMounted(async () => {
const user = await tokenParsed();
if (user) {
formCommand.author = user.name;
}
showLoader();
await Promise.all([
fetcheSigner(evaluateId.value),
fetchCheckSpec(evaluateId.value),
downloadFile("1-แบบพิจารณาคุณสมบัติบุคคล"),
downloadFile("2-แบบแสดงรายละเอียดการเสนอผลงาน"),
downloadFile(
"3-แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)"
),
downloadFile("4-แบบประเมินคุณลักษณะบุคคล"),
downloadFile("5-แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)"),
downloadFile("6-ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)"),
]);
});
</script>
<template>
@ -488,10 +481,6 @@ watch(
<div class="col-12"><q-separator /></div>
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-sm">
<!-- <div class="text-weight-medium q-py-sm">
งคบบญชาชนต
</div> -->
<q-input
:readonly="store.currentStep != 2 || store.statusUpload"
ref="performanceRef"

View file

@ -2,15 +2,13 @@
import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import axios from "axios";
/** importStroe*/
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
/** use*/
const $q = useQuasar();
const store = useEvaluateStore();
const mixin = useCounterMixin();

View file

@ -2,15 +2,15 @@
import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import config from "@/app.config";
import http from "@/plugins/http";
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
import type { FileObject } from "@/modules/06_evaluate/interface/main";
/** use*/
const mixins = useCounterMixin();
const $q = useQuasar();
const mixins = useCounterMixin();
const route = useRoute();
const { date2Thai, success, showLoader, hideLoader } = mixins;
@ -22,7 +22,7 @@ const dateEndAnnounce = ref<string | null>(date2Thai(new Date()));
const statusFile = ref<boolean>(false);
/** เอกสารประกาศผลการคัดเลือกบุคคล*/
const items = ref<any>([
const items = ref<FileObject[]>([
{
label: "แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)",
fileName: "5-แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)",

View file

@ -2,20 +2,18 @@
import { ref, reactive, watch, onMounted } from "vue";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import axios from "axios";
import http from "@/plugins/http";
import config from "@/app.config";
import axios from "axios";
import { tokenParsed } from "@/plugins/auth";
/** importType*/
import type { FormCommand } from "@/modules/06_evaluate/interface/evalute";
/** importComponents*/
import ViewPDF from "@/modules/06_evaluate/components/viewstep/viewPDF.vue";
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import type { FormCommand } from "@/modules/06_evaluate/interface/evalute";
import ViewPDF from "@/modules/06_evaluate/components/viewstep/viewPDF.vue";
/** use*/
const $q = useQuasar();
const store = useEvaluateStore();
@ -211,19 +209,6 @@ function checkDoc() {
});
}
/** hook lifecycle*/
onMounted(async () => {
const user = await tokenParsed();
if (user) {
formCommand.author = user.name;
}
checkDoc();
if (store.currentStep > 2) {
fetcheSigner(evaluateId.value);
}
await fetchCheckDate();
});
function getCommander() {
http
.get(config.API.searchCommander)
@ -256,6 +241,19 @@ watch(
}, 200);
}
);
/** hook lifecycle*/
onMounted(async () => {
const user = await tokenParsed();
if (user) {
formCommand.author = user.name;
}
checkDoc();
if (store.currentStep > 2) {
fetcheSigner(evaluateId.value);
}
await fetchCheckDate();
});
</script>
<template>

View file

@ -2,18 +2,17 @@
import { onMounted, ref } from "vue";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import axios from "axios";
/** importStroe*/
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
/** use*/
const mixin = useCounterMixin();
const $q = useQuasar();
const mixin = useCounterMixin();
const route = useRoute();
const { showLoader, hideLoader, messageError } = mixin;
/** emit*/

View file

@ -3,17 +3,15 @@ import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import axios from "axios";
import http from "@/plugins/http";
import config from "@/app.config";
import genReport from "@/plugins/genreport";
/** importStore*/
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import { useCounterMixin } from "@/stores/mixin";
/**use*/
const store = useEvaluateStore();
const $q = useQuasar();
const store = useEvaluateStore();
const mixin = useCounterMixin();
const route = useRoute();
@ -23,7 +21,7 @@ const evaluateId = ref<string>(route.params.id.toString());
const status = ref<string>("WAIT_CHECK_DOC_V2");
const fileEvaluationEdit = ref<any>();
const fileEvaluationEdit = ref<File | null>();
const modalView = ref<boolean>(false);
const numOfPages = ref<number>(0);
@ -179,53 +177,11 @@ onMounted(async () => {
/>
</div>
<!-- <div class="col-12">
<q-card bordered style="border: 1px solid #d6dee1">
<q-card class="col-12 items-center">
<q-tabs
v-model="tabMenu"
dense
align="left"
inline-label
class="rounded-borders"
indicator-color="primary"
active-bg-color="teal-1"
active-class="text-primary"
>
<q-tab name="director" label="กรรมการ" />
<q-tab name="meeting" label="การประชุม" />
</q-tabs>
<q-separator />
<q-tab-panels v-model="tabMenu" animated>
<q-tab-panel name="director"
><TableDirector :type="tabMenu" :row="directorList"
/></q-tab-panel>
<q-tab-panel name="meeting">
<TableDirector :type="tabMenu" :row="meetingList"
/></q-tab-panel>
</q-tab-panels>
</q-card>
</q-card>
</div> -->
<div class="col-12">
<q-card class="shadow-0" bordered>
<div class="row col-12 bg-grey-1 q-px-sm q-py-xs items-center">
<div class="text-weight-medium">เอกสารเล 2 (ฉบบแกไข)</div>
<q-space />
<!-- <q-btn
v-if="downloadUrl != ''"
:href="downloadUrl"
target="_blank"
color="blue"
flat
dense
icon="visibility"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
> -->
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
@ -282,18 +238,6 @@ onMounted(async () => {
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<!-- <div>เอกสารเล 2 (ฉบบแกไข)</div>
<q-btn
v-if="downloadUrl != ''"
:href="downloadUrl"
target="_blank"
color="blue"
flat
dense
icon="visibility"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
> -->
</div>
</div>
</div>

View file

@ -1,18 +1,15 @@
<script setup lang="ts">
import { ref } from "vue";
import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router";
import { useRoute } from "vue-router";
import env from "@/api";
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
/** use*/
const mixin = useCounterMixin();
const $q = useQuasar();
const mixin = useCounterMixin();
const route = useRoute();
const router = useRouter();
const evaluateId = ref<string>(route.params.id.toString());

View file

@ -2,21 +2,19 @@
import { ref, watch, computed } from "vue";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import type { QTableProps } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import HeaderDialog from "@/components/DialogHeader.vue";
import type { QTableProps } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
const route = useRoute();
const $q = useQuasar();
const route = useRoute();
const mixins = useCounterMixin();
const { showLoader, hideLoader, date2Thai, messageError } = mixins;
// const evaluateId = ref<string>(route.params.id.toString());
const evaluateId = computed(() => {
const id = route.params.id ? route.params.id.toString() : "";
return id;

View file

@ -2,8 +2,11 @@
import { reactive, onMounted } from "vue";
import { useRoute } from "vue-router";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateDetailStore } from "@/modules/06_evaluate/stores/evaluteDetail";
/** importType*/
import type {
@ -14,16 +17,11 @@ import type {
/** importComponents*/
import TableData from "@/modules/06_evaluate/components/viewstep/tableStep1.vue";
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateDetailStore } from "@/modules/06_evaluate/stores/evaluteDetail";
/** use*/
const mixin = useCounterMixin();
const store = useEvaluateDetailStore();
const $q = useQuasar();
const route = useRoute();
const { showLoader, hideLoader, messageError, date2Thai } = mixin;
const {
columnsCertificates,
@ -242,10 +240,6 @@ function getData() {
}
onMounted(async () => {
// route.name === "evaluate-add" && (await fetchDetail());
// props.data && fetchCheckSpec(props.data);
// getData();
const promises = [];
if (route.name === "evaluate-add") {

View file

@ -1,9 +1,11 @@
<script setup lang="ts">
import { ref } from "vue";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import DialogHeader from "@/components/DialogHeader.vue";
import ViewPDF from "@/modules/06_evaluate/components/viewstep/viewPDF.vue";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
const props = defineProps({
pdfSrc: {
type: String,
@ -16,7 +18,6 @@ const props = defineProps({
const modalPerview = ref<boolean>(false);
const store = useEvaluateStore();
const tabPanels = store.tabPanels;
</script>
<template>

View file

@ -45,6 +45,25 @@ interface FormCommand {
assignedPosition: string;
}
interface FormCommandSe {
commanderFullname: string;
commanderPosition: string;
commanderAboveFullname: string;
commanderAbovePosition: string;
author: string;
subject: string;
}
interface FormData {
id: string;
commanderFullname: string;
commanderPosition: string;
commanderAboveFullname: string;
commanderAbovePosition: string;
author: string;
subject: string;
}
interface FormCommandRef {
commanderFullname: object | null;
commanderPosition: object | null;
@ -114,4 +133,6 @@ export type {
CertificatesForm,
ListMenu,
FormRef,
FormData,
FormCommandSe
};

View file

@ -3,4 +3,26 @@ interface OptionStatus {
label: string;
}
export type { OptionStatus };
interface FileObject {
label: string;
fileName: string;
}
interface MainList {
id: string;
typeparam:string;
type:string;
type_th:string;
dateSend:string;
status:string;
step:string;
}
interface ListResponse {
id:string
type:string
type_th:string
updatedAt:Date|null
step:string
}
export type { OptionStatus, FileObject,MainList,ListResponse };

View file

@ -3,6 +3,12 @@ import { ref } from "vue";
import type { QTableProps } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
import type {
MainList,
ListResponse,
} from "@/modules/06_evaluate/interface/main";
const mixin = useCounterMixin();
const { date2Thai } = mixin;
@ -10,14 +16,14 @@ export const useEvaluateStore = defineStore("evaluateStore", () => {
const filterKeyword = ref<string>("");
const columns = ref<QTableProps["columns"]>([]);
const visibleColumns = ref<string[]>([]);
const row = ref<any>();
const row = ref<MainList[]>([]);
/**
* function
* @param data
*/
async function fetchEvaluateList(data: any) {
const list = data.map((e: any) => ({
const list = data.map((e: ListResponse) => ({
id: e.id,
typeparam: e.type,
type: e.type,

View file

@ -2,27 +2,25 @@
import { ref, computed, onMounted, watch } from "vue";
import { useQuasar } from "quasar";
import { useRouter } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
/** import Type*/
import type { ListMenu } from "@/modules/06_evaluate/interface/evalute";
import type { OptionStatus } from "@/modules/06_evaluate/interface/main";
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import { useCounterMixin } from "@/stores/mixin";
/** import Components*/
import TableListEvaluate from "@/modules/06_evaluate/components/TableListEvaluate.vue"; //
import DialogMain from "@/modules/06_evaluate/components/DialogMain.vue"; // popup
/** import Store*/
import { useEvaluateStore } from "@/modules/06_evaluate/store";
import { useCounterMixin } from "@/stores/mixin";
/** import Type*/
import type { ListMenu } from "@/modules/06_evaluate/interface/evalute";
import type { OptionStatus } from "@/modules/06_evaluate/interface/main";
/** use*/
const $q = useQuasar();
const mixin = useCounterMixin();
const store = useEvaluateStore();
const router = useRouter();
const $q = useQuasar();
const { showLoader, hideLoader, messageError } = mixin;
/** ตัวแปร*/
@ -98,11 +96,6 @@ async function getProfileCheck() {
.get(config.API.profilePosition())
.then(async (res: any) => {
const data = res.data.result;
// data.posTypeRank = await 2;
// data.posLevelRank = await 4;
// console.log("posTypeRank===>",data.posTypeRank);
// console.log("posLevelRank===>",data.posLevelRank);
if (
data.posTypeRank != 2 ||
(data.posTypeRank == 2 && data.posLevelRank >= 4)
@ -187,17 +180,17 @@ function filterOption(val: any, update: Function) {
});
}
/** hook lifecycle*/
onMounted(async () => {
await fetchEvaluteList();
});
watch(
() => store.filterKeyword,
async () => {
store.filterKeyword === "" && (await fetchEvaluteList());
}
);
/** hook lifecycle*/
onMounted(async () => {
await fetchEvaluteList();
});
</script>
<template>
@ -253,35 +246,6 @@ watch(
</q-btn>
</div>
<q-space />
<!-- <div class="col-xs-12 col-sm-3 col-md-2">
<q-input
dense
outlined
v-model="store.filterKeyword"
label="ค้นหา"
debounce="300"
@keydown.enter.prevent="filterFn"
>
<template v-slot:append>
<q-icon name="search" />
</template>
</q-input>
</div> -->
<!-- <div class="col-xs-12 col-sm-3 col-md-2">
<q-select
v-model="store.visibleColumns"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="store.columns"
option-value="name"
options-cover
/>
</div> -->
</div>
<div class="row col-12 q-mb-sm q-col-gutter-sm">
<div class="col-xs-12 col-sm-3 col-md-2">
@ -313,23 +277,6 @@ watch(
</q-item>
</template>
</q-select>
<!-- <q-btn size="12px" flat round color="primary" icon="mdi-plus">
<q-menu>
<q-list style="min-width: auto">
<q-item
v-for="(item, index) in listMenu"
:key="index"
clickable
v-close-popup
@click.stop="onclickAddEvaluate(item)"
>
<q-item-section>{{ item.label }}</q-item-section>
<q-tooltip>{{ item.label }}</q-tooltip>
</q-item>
</q-list>
</q-menu>
<q-tooltip>เพมการประเมนบคคล</q-tooltip>
</q-btn> -->
</div>
<q-space />
<div class="col-xs-12 col-sm-3 col-md-2">