fix folder name 12 evaluate personal

This commit is contained in:
Warunee Tamkoo 2023-12-15 13:30:39 +07:00
parent cabe986fec
commit b3641876df
25 changed files with 99 additions and 172 deletions

View file

@ -0,0 +1,73 @@
<script setup lang="ts">
import { ref } from "vue";
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";
const store = useEvaluateDetailStore();
</script>
<template>
<q-stepper
v-model="store.step"
vertical
animated
flat
ref="stepper"
:bordered="false"
>
<q-step
keep-alive
:name="1"
prefix="1"
title="ตรวจสอบคุณสมบัติ"
:done="store.step > 1"
>
</q-step>
<q-step :name="2" prefix="2" title="จัดเตรียมเอกสาร" :done="store.step > 2">
</q-step>
<q-step :name="3" prefix="3" title="ตรวจสอบเอกสาร" :done="store.step > 3">
</q-step>
<q-step
:name="4"
prefix="4"
title="รอตรวจสอบคุณสมบัติ"
:done="store.step > 4"
>
</q-step>
<q-step
:name="5"
prefix="5"
title="ประกาศบนเว็บไซต์"
:done="store.step > 5"
>
</q-step>
<q-step
:name="6"
prefix="6"
title="จัดเตรียมเอกสารเล่ม 2"
:done="store.step > 6"
>
</q-step>
<q-step
:name="7"
prefix="7"
title="ตรวจสอบเอกสารเล่ม 2"
:done="store.step > 7"
>
</q-step>
<q-step :name="8" prefix="8" title="รอพิจารณาผล" :done="store.step > 8">
</q-step>
<q-step :name="9" prefix="9" title="เสร็จสิ้น" :done="store.step > 9">
</q-step>
</q-stepper>
</template>
<style scoped></style>

View file

@ -0,0 +1,137 @@
<script setup lang="ts">
import { onMounted } from "vue";
import { useQuasar } from "quasar";
import Stepper from "@/modules/12_evaluatePersonal/components/Detail/Stepper.vue";
import Step1 from "@/modules/12_evaluatePersonal/components/Detail/step/step1.vue";
import Step2 from "@/modules/12_evaluatePersonal/components/Detail/step/step2.vue";
import Step3 from "@/modules/12_evaluatePersonal/components/Detail/step/step3.vue";
import Step4 from "@/modules/12_evaluatePersonal/components/Detail/step/step4.vue";
import Step5 from "@/modules/12_evaluatePersonal/components/Detail/step/step5.vue";
import Step6 from "@/modules/12_evaluatePersonal/components/Detail/step/step6.vue";
import Step7 from "@/modules/12_evaluatePersonal/components/Detail/step/step7.vue";
import Step8 from "@/modules/12_evaluatePersonal/components/Detail/step/step8.vue";
import Step9 from "@/modules/12_evaluatePersonal/components/Detail/step/step9.vue";
import ViewStep1 from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewStep1.vue";
import ViewStep3 from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewStep3.vue";
import ViewStep7 from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewStep7.vue";
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";
import { useCounterMixin } from "@/stores/mixin";
const store = useEvaluateDetailStore();
const mixin = useCounterMixin();
const { dialogConfirm } = mixin;
const $q = useQuasar();
const externalLink =
"https://accreditation.ocsc.go.th/accreditation/search/curriculum";
function onCilckNextStep() {
store.step < 9 &&
dialogConfirm(
$q,
() => {
store.step++;
},
"ยืนยันการดำเนินการ",
"ต้องการยืนยันการดำเนินการต่อใช่หรือไม่?"
);
}
function onCilckprPeviousStep() {
store.step > 1 &&
dialogConfirm(
$q,
() => {
store.step--;
},
"ยืนยันการย้อนกลับ",
"ต้องการย้อนกลับใช่หรือไม่?"
);
}
onMounted(() => {
store.step = 1;
});
</script>
<template>
<div class="row q-col-gutter-md">
<div class="col-xs-12 col-sm-3">
<div class="toptitle">ประเมนชำนาญการ</div>
<Stepper />
</div>
<div class="col-xs-12 col-sm-9">
<div class="col-12 row">
<div class="toptitle">
{{ store.step }}.{{ store.titel[store.step - 1] }}
</div>
</div>
<div class="row q-col-gutter-md col-12">
<div
:class="
store.step === 2 ||
store.step === 4 ||
store.step === 5 ||
store.step === 6 ||
store.step === 8 ||
store.step === 9
? 'col-xs-12 col-sm-12 row'
: 'col-xs-12 col-sm-5 row'
"
>
<q-card flat bordered class="col-12 q-pa-md">
<q-card-section>
<Step1 v-if="store.step === 1" />
<Step2 v-if="store.step === 2" />
<Step3 v-if="store.step === 3" />
<Step4 v-if="store.step === 4" />
<Step5 v-if="store.step === 5" />
<Step6 v-if="store.step === 6" />
<Step7 v-if="store.step === 7" />
<Step8 v-if="store.step === 8" />
<Step9 v-if="store.step === 9" />
</q-card-section>
</q-card>
</div>
<div
class="col-xs-12 col-sm-7 row"
v-if="store.step === 1 || store.step === 3 || store.step === 7"
>
<q-card flat bordered class="col-12">
<q-card-section>
<ViewStep1 v-if="store.step === 1" />
<ViewStep3 v-if="store.step === 3" />
<ViewStep7 v-if="store.step === 7" /> </q-card-section
></q-card>
</div>
</div>
<div class="q-mt-md q-gutter-md" align="right">
<q-btn
v-if="store.step !== 1"
unelevated
outline
label="ย้อนกลับ"
color="public"
@click="onCilckprPeviousStep"
/>
<q-btn
unelevated
label="ดำเนินการต่อ"
color="public"
@click="onCilckNextStep"
/>
</div>
</div>
</div>
</template>
<style>
.q-stepper--vertical .q-stepper__step-inner {
padding: 0;
}
</style>

View file

@ -0,0 +1,62 @@
<script setup lang="ts">
import { ref, onMounted } from "vue";
import { useQuasar } from "quasar";
import Stepper from "@/modules/12_evaluatePersonal/components/Detail/Stepper.vue";
import Step1 from "@/modules/12_evaluatePersonal/components/Detail/step/step1.vue";
import Step2 from "@/modules/12_evaluatePersonal/components/Detail/step/step2.vue";
import Step3 from "@/modules/12_evaluatePersonal/components/Detail/step/step3.vue";
import Step4 from "@/modules/12_evaluatePersonal/components/Detail/step/step4.vue";
import Step5 from "@/modules/12_evaluatePersonal/components/Detail/step/step5.vue";
import Step6 from "@/modules/12_evaluatePersonal/components/Detail/step/step6.vue";
import Step7 from "@/modules/12_evaluatePersonal/components/Detail/step/step7.vue";
import Step8 from "@/modules/12_evaluatePersonal/components/Detail/step/step8.vue";
import Step9 from "@/modules/12_evaluatePersonal/components/Detail/step/step9.vue";
import ViewStep1 from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewStep1.vue";
import ViewStep3 from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewStep3.vue";
import ViewStep7 from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewStep7.vue";
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";
import { useCounterMixin } from "@/stores/mixin";
const store = useEvaluateDetailStore();
const mixin = useCounterMixin();
const { dialogConfirm } = mixin;
const $q = useQuasar();
function onCilckNextStep() {
store.step < 9 &&
dialogConfirm($q, () => {
store.step++;
});
}
function onCilckprPeviousStep() {
store.step > 1 &&
dialogConfirm($q, () => {
store.step--;
});
}
onMounted(() => {
store.step = 1;
});
</script>
<template>
<div class="row col-12">
<div class="toptitle">กรรมการและการประช</div>
<div class="row col-12">
<q-card> xx </q-card>
</div>
</div>
</template>
<style>
.q-stepper--vertical .q-stepper__step-inner {
padding: 0;
}
</style>

View file

@ -0,0 +1,117 @@
<script setup lang="ts">
import { reactive } from "vue";
const formData = reactive<any>({
isEducationalQft: false, //
isGovermantServiceHtr: false, //
isOperatingExp: false, //
isMinPeriodOfTenure: false, //
isHaveSpecificQft: false, //
isHaveProLicense: false, //
isHaveMinPeriodOrHoldPos: false, // ]
});
</script>
<template>
<q-list>
<q-item v-ripple>
<q-item-section avatar>
<q-checkbox
keep-color
color="primary"
v-model="formData.isEducationalQft"
/>
</q-item-section>
<q-item-section>
<q-item-label>ณวการศกษา </q-item-label>
</q-item-section>
</q-item>
<q-item v-ripple>
<q-item-section avatar>
<q-checkbox
keep-color
color="primary"
v-model="formData.isGovermantServiceHtr"
/>
</q-item-section>
<q-item-section>
<q-item-label>ประวการรบราชการ </q-item-label>
</q-item-section>
</q-item>
<q-item v-ripple>
<q-item-section avatar>
<q-checkbox
keep-color
color="primary"
v-model="formData.isOperatingExp"
/>
</q-item-section>
<q-item-section>
<q-item-label>ประสบการณในการปฏงาน </q-item-label>
</q-item-section>
</q-item>
<q-item v-ripple>
<q-item-section avatar>
<q-checkbox
keep-color
color="primary"
v-model="formData.isMinPeriodOfTenure"
/>
</q-item-section>
<q-item-section>
<q-item-label
>ระยะเวลาขนตำในการดำรงตำแหนงในสายงานทขอเขารบการคดเลอก</q-item-label
>
</q-item-section>
</q-item>
<q-item v-ripple>
<q-item-section avatar>
<q-checkbox
keep-color
color="primary"
v-model="formData.isHaveSpecificQft"
/>
</q-item-section>
<q-item-section>
<q-item-label
>ณสมบตรงตามคณสมบเฉพาะ สำหรบตำแหนงทกำหนด
ในมาตรฐานกำหนดตำแหน</q-item-label
>
</q-item-section>
</q-item>
<q-item v-ripple>
<q-item-section avatar>
<q-checkbox
keep-color
color="primary"
v-model="formData.isHaveProLicense"
/>
</q-item-section>
<q-item-section>
<q-item-label
>ใบอนญาตประกอบวชาชพของสายงานตางๆ และ/หร
ณวเพมเตมครบถวนตามท .. กำหนด (แพทยพยาบาล ศวกรโยธา
สถาปน ฯลฯ)</q-item-label
>
</q-item-section>
</q-item>
<q-item v-ripple>
<q-item-section avatar>
<q-checkbox
keep-color
color="primary"
v-model="formData.isHaveMinPeriodOrHoldPos"
/>
</q-item-section>
<q-item-section>
<q-item-label
>ระยะเวลาขนตำในการดำรงตำแหนงหรอเคย
ดำรงตำแหนงในสายงานทจะคดเลอก
ตามคณวของบคคลและระดบตำแหนงทจะคดเลอก</q-item-label
>
</q-item-section>
</q-item>
</q-list>
</template>
<style scoped></style>

View file

@ -0,0 +1,564 @@
<script setup lang="ts">
import { ref } from "vue";
import keycloak from "@/plugins/keycloak";
import http from "@/plugins/http";
import config from "@/app.config";
import genReport from "@/plugins/genreport";
import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
const $q = useQuasar();
const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError } = mixin;
const fullName = ref<string>(
keycloak.tokenParsed ? keycloak.tokenParsed.name!.toString() : ""
);
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 modalView = ref<boolean>(false);
const numOfPages = ref<number>(0);
const page = ref<number>(1);
const pdfSrc = ref<any>();
function onClickViewPDF(file: any) {
pdfSrc.value = file.webkitRelativePath;
modalView.value = true;
}
/** ไปหน้าต่อไปของรายงาน */
function nextPage() {
if (page.value < numOfPages.value) {
page.value++;
}
}
/** กลับหน้าก่อนหน้าของรายงาน */
function backPage() {
if (page.value !== 1) {
page.value--;
}
}
async function onClickDowloadFile(
tp: string,
templateName: string,
fileName: string
) {
showLoader();
const data = Object.assign(
{ fullName: fullName.value },
tp === "EV1_005" || tp === "EV1_007"
? { organizationName: "หน่วยงาน" }
: null,
tp === "EV1_007" ? { positionName: "ตำแหน่ง" } : null,
tp === "EV1_007" ? { positionLeaveName: "ระดับ" } : null
);
const body = {
template: tp,
reportName: templateName,
data: data,
};
await genReport(body, fileName);
}
</script>
<template>
<div class="row q-col-gutter-md">
<!-- แบบพจารณาคณสมบคคล -->
<div class="col-6">
<q-card bordered style="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
แบบพจารณาคณสมบคคล
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-md col-12">
<div class="col-xs-12 col-sm-6 row">
<q-btn
class="col-12"
outline
icon="download"
label="ดาวน์โหลดต้นแบบ"
color="primary"
@click="
onClickDowloadFile(
'EV1_005',
'template-1',
'แบบพิจารณาคุณสมบัติบุคคล'
)
"
>
<q-tooltip> ดาวนโหลดตนแบบ </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-6 row">
<q-btn
v-if="fileEvaluation1"
class="col-12"
outline
icon="visibility"
label="ดูไฟล์เอกสาร"
color="primary"
@click="onClickViewPDF(fileEvaluation1)"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-11 row">
<q-file
v-model="fileEvaluation1"
class="col-12"
outlined
dense
hide-bottom-space
lazy-rules
accept=".pdf"
>
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
<div class="col-1 self-center text-center">
<q-btn flat round dense color="primary" icon="mdi-upload"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
</div>
</div>
</q-card>
</div>
<!-- แบบแสดงรายละเอยดการเสนอผลงาน -->
<div class="col-6">
<q-card bordered style="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
แบบแสดงรายละเอยดการเสนอผลงาน
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-md col-12">
<div class="col-xs-12 col-sm-6 row">
<q-btn
class="col-12"
outline
icon="download"
label="ดาวน์โหลดต้นแบบ"
color="primary"
@click="
onClickDowloadFile(
'EV1_006',
'template-2',
'แบบแสดงรายละเอียดการเสนอผลงาน'
)
"
>
<q-tooltip> ดาวนโหลดตนแบบ </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-6 row">
<q-btn
v-if="fileEvaluation2"
class="col-12"
outline
icon="visibility"
label="ดูไฟล์เอกสาร"
color="primary"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-11 row">
<q-file
v-model="fileEvaluation2"
class="col-12"
outlined
dense
hide-bottom-space
lazy-rules
accept=".pdf"
>
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
<div class="col-1 self-center text-center">
<q-btn flat round dense color="primary" icon="mdi-upload"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
</div>
</div>
</q-card>
</div>
<!-- แบบตรวจสอบความถกตองครบถวนของขอมลเพอประกอบการคดเลอกบคคล -->
<div class="col-6">
<q-card bordered style="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
แบบตรวจสอบความถกตองครบถวนของขอมลเพอประกอบการคดเลอกบคคล
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-md col-12">
<div class="col-xs-12 col-sm-6 row">
<q-btn
class="col-12"
outline
icon="download"
label="ดาวน์โหลดต้นแบบ"
color="primary"
@click="
onClickDowloadFile(
'EV1_007',
'template-3',
'แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล'
)
"
>
<q-tooltip> ดาวนโหลดตนแบบ </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-6 row">
<q-btn
v-if="fileEvaluation3"
class="col-12"
outline
icon="visibility"
label="ดูไฟล์เอกสาร"
color="primary"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-11 row">
<q-file
v-model="fileEvaluation3"
class="col-12"
outlined
dense
hide-bottom-space
lazy-rules
accept=".pdf"
>
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
<div class="col-1 self-center text-center">
<q-btn flat round dense color="primary" icon="mdi-upload"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
</div>
</div>
</q-card>
</div>
<!-- แบบประเมนคณลกษณะบคคล -->
<div class="col-6">
<q-card bordered style="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
แบบประเมนคณลกษณะบคคล
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-md col-12">
<div class="col-xs-12 col-sm-6 row">
<q-btn
class="col-12"
outline
icon="download"
label="ดาวน์โหลดต้นแบบ"
color="primary"
@click="
onClickDowloadFile(
'EV1_008',
'template-4',
'แบบประเมินคุณลักษณะบุคคล'
)
"
>
<q-tooltip> ดาวนโหลดตนแบบ </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-6 row">
<q-btn
v-if="fileEvaluation4"
class="col-12"
outline
icon="visibility"
label="ดูไฟล์เอกสาร"
color="primary"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-11 row">
<q-file
v-model="fileEvaluation4"
class="col-12"
outlined
dense
hide-bottom-space
lazy-rules
accept=".pdf"
>
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
<div class="col-1 self-center text-center">
<q-btn flat round dense color="primary" icon="mdi-upload"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
</div>
</div>
</q-card>
</div>
<!-- แบบสรปขอมลของผขอรบการคดเลอก -->
<div class="col-6">
<q-card bordered style="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
แบบสรปขอมลของผขอรบการคดเลอก
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-md col-12">
<div class="col-xs-12 col-sm-6 row">
<q-btn
class="col-12"
outline
icon="download"
label="ดาวน์โหลดต้นแบบ"
color="primary"
@click="
onClickDowloadFile(
'EV1_009',
'template-5',
'แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก'
)
"
>
>
<q-tooltip> ดาวนโหลดตนแบบ </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-6 row">
<q-btn
v-if="fileEvaluation5"
class="col-12"
outline
icon="visibility"
label="ดูไฟล์เอกสาร"
color="primary"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-11 row">
<q-file
v-model="fileEvaluation5"
class="col-12"
outlined
dense
hide-bottom-space
lazy-rules
accept=".pdf"
>
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
<div class="col-1 self-center text-center">
<q-btn flat round dense color="primary" icon="mdi-upload"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
</div>
</div>
</q-card>
</div>
<!--ผลงานทจะสงประเม -->
<div class="col-6">
<q-card bordered style="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
ผลงานทจะสงประเม
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-md col-12">
<div class="col-xs-12 col-sm-6 row">
<q-btn
class="col-12"
outline
icon="download"
label="ดาวน์โหลดต้นแบบ"
color="primary"
@click="
onClickDowloadFile(
'EV1_010',
'template-6',
'ผลงานที่จะส่งประเมิน'
)
"
>
<q-tooltip> ดาวนโหลดตนแบบ </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-6 row">
<q-btn
v-if="fileEvaluation6"
class="col-12"
outline
icon="visibility"
label="ดูไฟล์เอกสาร"
color="primary"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-11 row">
<q-file
v-model="fileEvaluation6"
class="col-12"
outlined
dense
hide-bottom-space
lazy-rules
accept=".pdf"
>
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
<div class="col-1 self-center text-center">
<q-btn flat round dense color="primary" icon="mdi-upload"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
</div>
</div>
</q-card>
</div>
</div>
<!-- Dialog Full Screen -->
<q-dialog
v-model="modalView"
persistent
:maximized="true"
transition-show="slide-up"
transition-hide="slide-down"
>
<q-card class="bg-white">
<div class="flex justify-end items-center align-center q-mr-md q-mt-sm">
<q-btn
icon="close"
unelevated
round
dense
style="color: #ff8080; background-color: #ffdede"
size="12px"
v-close-popup
/>
</div>
<div class="q-pa-md">
<div class="row items-start items-center">
<div class="col">
<q-btn
padding="xs"
icon="mdi-chevron-left"
color="grey-2"
text-color="grey-5"
size="md"
class="my-auto"
@click="backPage"
:disable="page == 1"
/>
</div>
<div class="col-12 col-md-auto">
<div class="q-pa-md flex">
หนาท {{ page }} จาก {{ numOfPages }}
</div>
</div>
<div class="col text-right">
<q-btn
padding="xs"
icon="mdi-chevron-right"
color="grey-2"
text-color="grey-5"
size="md"
@click="nextPage"
:disable="page === numOfPages"
/>
</div>
</div>
<div class="row items- items-center">
<VuePDF ref="vuePDFRef" :pdf="pdfSrc" :page="page" fit-parent />
</div>
<div class="row items- items-end">
<div class="col">
<q-btn
padding="xs"
icon="mdi-chevron-left"
color="grey-2"
text-color="grey-5"
size="md"
class="my-auto"
@click="backPage"
:disable="page == 1"
/>
</div>
<div class="col-12 col-md-auto">
<div class="q-pa-md flex">
หนาท {{ page }} จาก {{ numOfPages }}
</div>
</div>
<div class="col text-right">
<q-btn
padding="xs"
icon="mdi-chevron-right"
color="grey-2"
text-color="grey-5"
size="md"
@click="nextPage"
:disable="page === numOfPages"
/>
</div>
</div>
</div>
</q-card>
</q-dialog>
</template>
<style scoped></style>

View file

@ -0,0 +1,80 @@
<script setup lang="ts">
import { reactive, ref } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";
const store = useEvaluateDetailStore();
const mixin = useCounterMixin();
const { date2Thai } = mixin;
const selectedItem = ref(1);
function handleItemClick(itemNumber: number) {
store.tabPanels = itemNumber.toString();
selectedItem.value = itemNumber;
}
</script>
<template>
<q-list separator>
<q-item
clickable
v-ripple
:active="selectedItem === 1 ? true : false"
active-class="text-primary"
@click="handleItemClick(1)"
>
<q-item-section>แบบพจารณาคณสมบคคล</q-item-section>
</q-item>
<q-item
clickable
v-ripple
:active="selectedItem === 2 ? true : false"
active-class="text-primary"
@click="handleItemClick(2)"
>
<q-item-section>แบบแสดงรายละเอยดการเสนอผลงาน</q-item-section>
</q-item>
<q-item
clickable
v-ripple
:active="selectedItem === 3 ? true : false"
active-class="text-primary"
@click="handleItemClick(3)"
>
<q-item-section
>แบบตรวจสอบความถกตองครบถวนของขอมลเพอประกอบการคดเลอกบคคล</q-item-section
>
</q-item>
<q-item
clickable
v-ripple
:active="selectedItem === 4 ? true : false"
active-class="text-primary"
@click="handleItemClick(4)"
>
<q-item-section> แบบประเมนคณลกษณะบคคล </q-item-section>
</q-item>
<q-item
clickable
v-ripple
:active="selectedItem === 5 ? true : false"
active-class="text-primary"
@click="handleItemClick(5)"
>
<q-item-section> แบบสรปขอมลของผขอรบการคดเลอก </q-item-section>
</q-item>
<q-item
clickable
v-ripple
:active="selectedItem === 6 ? true : false"
active-class="text-primary"
@click="handleItemClick(6)"
>
<q-item-section> ผลงานทจะสงประเม </q-item-section>
</q-item>
</q-list>
</template>
<style scoped></style>

View file

@ -0,0 +1,22 @@
<script setup lang="ts">
import { ref } from "vue";
const status = ref<string>("WAIT_CHECK_DOC_V1");
</script>
<template>
<div class="row">
<div class="col-12 text-center">
<q-badge
v-if="status == 'WAIT_CHECK_DOC_V1'"
outline
color="orange-5"
label="รอตรวจสอบคุณสมบัติ"
class="q-pa-sm"
style="font-size: 16px"
/>
</div>
</div>
</template>
<style scoped></style>

View file

@ -0,0 +1,26 @@
<script setup lang="ts">
import { ref } from "vue";
const status = ref<string>("ANNOUNCE_WEB");
const website = ref<string>("https://bma-ehr.frappet.com/");
</script>
<template>
<div class="row">
<div class="col-12 text-center q-">
<q-badge
v-if="status == 'ANNOUNCE_WEB'"
outline
color="primary"
label="ประกาศบนเว็บไซต์"
class="q-pa-sm"
style="font-size: 16px"
/>
<div>
<a :href="website" target="_blank">{{ website }}</a>
</div>
</div>
</div>
</template>
<style scoped></style>

View file

@ -0,0 +1,106 @@
<script setup lang="ts">
import { ref } from "vue";
import ViewPDF from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewPDF.vue";
const fileEvaluation1 = ref<any>();
const pdfSrc = ref<any>();
const modalView = ref<boolean>(false);
function onClickViewPDF(file: any) {
pdfSrc.value = file.webkitRelativePath;
modalView.value = true;
}
</script>
<template>
<div class="row q-col-gutter-md">
<div class="col-6">
<q-card bordered style="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
เอกสารเล 2
</div>
<div class="col-12"><q-separator /></div>
<div class="row">
<div class="col-12 q-pa-sm">
<div class="row q-col-gutter-md col-12">
<!-- <div class="col-xs-12 col-sm-6 row">
<q-btn
class="col-12"
outline
icon="download"
label="ดาวน์โหลดต้นแบบ"
color="primary"
>
<q-tooltip> ดาวนโหลดตนแบบ </q-tooltip></q-btn
>
</div> -->
<div class="col-xs-12 col-sm-6 row">
<q-btn
v-if="fileEvaluation1"
class="col-12"
outline
icon="visibility"
label="ดูไฟล์เอกสาร"
color="primary"
@click="onClickViewPDF(fileEvaluation1)"
>
<q-tooltip> ไฟลเอกสาร </q-tooltip></q-btn
>
</div>
<div class="col-xs-12 col-sm-11 row">
<q-file
v-model="fileEvaluation1"
class="col-12"
outlined
dense
hide-bottom-space
lazy-rules
accept=".pdf"
>
<template v-slot:prepend>
<q-icon name="attach_file" />
</template>
</q-file>
</div>
<div class="col-1 self-center text-center">
<q-btn flat round dense color="primary" icon="mdi-upload"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
</div>
</div>
</q-card>
</div>
</div>
<!-- Dialog Full Screen -->
<q-dialog
v-model="modalView"
persistent
:maximized="true"
transition-show="slide-up"
transition-hide="slide-down"
>
<q-card class="bg-white">
<div class="flex justify-end items-center align-center q-mr-md q-mt-sm">
<q-btn
icon="close"
unelevated
round
dense
style="color: #ff8080; background-color: #ffdede"
size="12px"
v-close-popup
/>
</div>
<div class="q-pa-md">
<ViewPDF />
</div>
</q-card>
</q-dialog>
</template>
<style scoped></style>

View file

@ -0,0 +1,33 @@
<script setup lang="ts">
import { reactive, ref } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";
const store = useEvaluateDetailStore();
const mixin = useCounterMixin();
const { date2Thai } = mixin;
const selectedItem = ref(1);
function handleItemClick(itemNumber: number) {
store.tabPanels = itemNumber.toString();
selectedItem.value = itemNumber;
}
</script>
<template>
<q-list separator>
<q-item
clickable
v-ripple
:active="selectedItem === 1 ? true : false"
active-class="text-primary"
@click="handleItemClick(1)"
>
<q-item-section>เอกสารเล 2</q-item-section>
</q-item>
</q-list>
</template>
<style scoped></style>

View file

@ -0,0 +1,22 @@
<script setup lang="ts">
import { ref } from "vue";
const status = ref<string>("WAIT_CHECK_DOC_V2");
</script>
<template>
<div class="row">
<div class="col-12 text-center">
<q-badge
v-if="status == 'WAIT_CHECK_DOC_V2'"
outline
color="orange-5"
label="รอพิจารณาผลการประเมิน"
class="q-pa-sm"
style="font-size: 16px"
/>
</div>
</div>
</template>
<style scoped></style>

View file

@ -0,0 +1,22 @@
<script setup lang="ts">
import { ref } from "vue";
const status = ref<string>("DONE");
</script>
<template>
<div class="row">
<div class="col-12 text-center">
<q-badge
v-if="status == 'DONE'"
outline
color="green"
label="เสร็จสิ้น"
class="q-pa-sm"
style="font-size: 16px"
/>
</div>
</div>
</template>
<style scoped></style>

View file

@ -0,0 +1,180 @@
<script setup lang="ts">
import { ref } from "vue";
const splitterModel = ref(14);
const numOfPages = ref<number>(0);
const page = ref<number>(1);
const pdfSrc = ref<any>();
/** ไปหน้าต่อไปของรายงาน */
function nextPage() {
if (page.value < numOfPages.value) {
page.value++;
}
}
/** กลับหน้าก่อนหน้าของรายงาน */
function backPage() {
if (page.value !== 1) {
page.value--;
}
}
</script>
<template>
<q-splitter
v-model="splitterModel"
horizontal
style="
height: 50vh;
border: 1px solid rgb(210, 210, 210);
border-radius: 5px;
"
before-class="overflow-hidden disable"
separator-class="bg-white disabled"
>
<template v-slot:before>
<div class="q-px-sm">
<div class="row items-start items-center">
<div class="col">
<q-btn
padding="xs"
icon="mdi-chevron-left"
color="grey-2"
text-color="grey-5"
size="md"
class="my-auto"
@click="backPage"
:disable="page == 1"
/>
</div>
<div class="col-12 col-md-auto">
<div class="q-pa-md flex">
หนาท {{ page }} จาก {{ numOfPages }}
</div>
</div>
<div class="col text-right">
<q-btn
padding="xs"
icon="mdi-chevron-right"
color="grey-2"
text-color="grey-5"
size="md"
@click="nextPage"
:disable="page === numOfPages"
/>
</div>
</div>
</div>
</template>
<template v-slot:after>
<div class="q-pa-md">
<VuePDF ref="vuePDFRef" :pdf="pdfSrc" :page="page" fit-parent />
</div>
</template>
<template v-slot:default>
<div class="q-pa-md">
<div class="row items-start items-center">
<div class="col">
<q-btn
padding="xs"
icon="mdi-chevron-left"
color="grey-2"
text-color="grey-5"
size="md"
class="my-auto"
@click="backPage"
:disable="page == 1"
/>
</div>
<div class="col-12 col-md-auto">
<div class="q-pa-md flex">
หนาท {{ page }} จาก {{ numOfPages }}
</div>
</div>
<div class="col text-right">
<q-btn
padding="xs"
icon="mdi-chevron-right"
color="grey-2"
text-color="grey-5"
size="md"
@click="nextPage"
:disable="page === numOfPages"
/>
</div>
</div>
</div>
</template>
</q-splitter>
<!-- <q-card class="bg-white">
<div class="q-pa-md">
<div class="row items-start items-center">
<div class="col">
<q-btn
padding="xs"
icon="mdi-chevron-left"
color="grey-2"
text-color="grey-5"
size="md"
class="my-auto"
@click="backPage"
:disable="page == 1"
/>
</div>
<div class="col-12 col-md-auto">
<div class="q-pa-md flex">
หนาท {{ page }} จาก {{ numOfPages }}
</div>
</div>
<div class="col text-right">
<q-btn
padding="xs"
icon="mdi-chevron-right"
color="grey-2"
text-color="grey-5"
size="md"
@click="nextPage"
:disable="page === numOfPages"
/>
</div>
</div>
<div class="row items- items-center">
<VuePDF ref="vuePDFRef" :pdf="pdfSrc" :page="page" fit-parent />
</div>
<div class="row items- items-end">
<div class="col">
<q-btn
padding="xs"
icon="mdi-chevron-left"
color="grey-2"
text-color="grey-5"
size="md"
class="my-auto"
@click="backPage"
:disable="page == 1"
/>
</div>
<div class="col-12 col-md-auto">
<div class="q-pa-md flex">
หนาท {{ page }} จาก {{ numOfPages }}
</div>
</div>
<div class="col text-right">
<q-btn
padding="xs"
icon="mdi-chevron-right"
color="grey-2"
text-color="grey-5"
size="md"
@click="nextPage"
:disable="page === numOfPages"
/>
</div>
</div>
</div>
</q-card> -->
</template>
<style scoped></style>

View file

@ -0,0 +1,304 @@
<script setup lang="ts">
import { storeToRefs } from "pinia";
import { useEvalutuonStore } from "@/modules/12_evaluatePersonal/store/Evaluate";
const storageEvalutuon = useEvalutuonStore();
const {
rows,
columnsLicense,
columnPeriodhistory,
columnTrainingHistory,
columnProjectsProposed,
} = storeToRefs(storageEvalutuon);
</script>
<template>
<q-card class="bg-grey-2">
<div class="text-weight-bold row items-center">
<span class="q-ml-lg q-my-sm">อมลสวนต</span>
</div>
<q-separator />
<q-card-actions class="q-ml-md">
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="นาย" label="คำนำหน้าชื่อ" />
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input
borderless
readonly
model-value="ธนพนธ์ แสงจันทร์"
label="ชื่อ - นามสกุล"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
borderless
model-value="19/03/44"
readonly
label="วันเดือนปีเกิด"
>
<template v-slot:prepend>
<q-icon class="size-icon" name="o_calendar_today" />
</template>
</q-input>
</div>
</q-card-actions>
<q-card-actions class="q-ml-md">
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="ไม่มี" label="ตำแหน่ง" />
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input
borderless
readonly
model-value="กย.11"
label="ตำแหน่งเลขที่"
/>
</div>
<div class="col-xs-9 col-sm-6 col-md-6">
<q-input
borderless
readonly
model-value="หน่วยใหม่กับหน่วยเก่า"
label="สังกัด"
/>
</div>
</q-card-actions>
<q-card-actions class="q-ml-md">
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="" label="เงินเดือน" />
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="" label="ระดับปัจจุบัน" />
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="" label="ระดับที่ประเมิน" />
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="1000 ปี" label="อายุราชการ" />
</div>
</q-card-actions>
</q-card>
<q-card class="bg-grey-2 q-mt-xl">
<div class=" text-weight-bold row items-center">
<span class="q-ml-lg q-my-sm">ประวการศกษา</span>
</div>
<q-separator />
<q-card-actions class="q-ml-md">
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input
borderless
readonly
model-value="ปริญญาตรี"
label="ระดับศึกษา"
/>
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input
borderless
readonly
model-value="มหาวิทยาลัยก."
label="สถานศึกษา"
/>
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless model-value="19/03/44" readonly label="ตั้งแต่">
<template v-slot:prepend>
<q-icon class="size-icon" name="o_calendar_today" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless model-value="19/03/44" readonly label="ถึง">
<template v-slot:prepend>
<q-icon class="size-icon" name="o_calendar_today" />
</template>
</q-input>
</div>
</q-card-actions>
<q-card-actions class="q-ml-md">
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
borderless
model-value="19/03/44"
readonly
label="วันทราสำเร็จการศึกษา"
>
<template v-slot:prepend>
<q-icon class="size-icon" name="o_calendar_today" />
</template>
</q-input>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
borderless
readonly
model-value="ปริญญาตรี"
label="วุฒิการศึกษาในตําแหน่ง"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
borderless
readonly
model-value="ปริญญาตรี"
label="วุฒิการศึกษา"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input borderless readonly model-value="-" label="สาขาวิชา/ทาง" />
</div>
</q-card-actions>
<q-card-actions class="q-ml-md">
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="-" label="ทุน" />
</div>
<div class="col-xs-6 col-sm-3 col-md-3">
<q-input borderless readonly model-value="3.33" label="เกรดเฉลี่ย" />
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input borderless readonly model-value="ไทย" label="ประเทศ" />
</div>
</q-card-actions>
</q-card>
<q-card class="bg-grey-2 q-mt-xl">
<div class=" text-weight-bold row items-center">
<span class="q-ml-lg q-my-sm">ใบอนญาตประกอบวชาช</span>
</div>
<q-separator />
<q-card-actions class="q-ma-md">
<div class="col-xs-12 col-sm-12 col-md-12">
<q-table
table-header-class="bg-grey-4 "
flat
bordered
:rows="rows"
:columns="columnsLicense"
>
</q-table>
</div>
</q-card-actions>
</q-card>
<q-card class="bg-grey-2 q-mt-xl">
<div class=" text-weight-bold row items-center">
<span class="q-ml-lg q-my-sm">ประวการรบราชการ</span>
</div>
<q-separator />
<q-card-actions class="q-ma-md">
<div class="col-xs-12 col-sm-12 col-md-12">
<q-table
table-header-class="bg-grey-4 "
flat
bordered
:rows="rows"
:columns="columnPeriodhistory"
>
</q-table>
</div>
</q-card-actions>
</q-card>
<q-card class="bg-grey-2 q-mt-xl">
<div class=" text-weight-bold row items-center">
<span class="q-ml-lg q-my-sm">ประวการฝกอบรมดงาน</span>
</div>
<q-separator />
<q-card-actions class="q-ma-md">
<div class="col-xs-12 col-sm-12 col-md-12">
<q-table
table-header-class="bg-grey-4 "
flat
bordered
:rows="rows"
:columns="columnTrainingHistory"
>
</q-table>
</div>
</q-card-actions>
</q-card>
<q-card class="bg-grey-2 q-mt-xl">
<div class=" text-weight-bold row items-center">
<span class="q-ml-lg q-my-sm">ประสบการณในการปฏงาน</span>
</div>
<q-separator />
<q-card-actions class="q-ma-md">
<div class="col-xs-12 col-sm-12 col-md-12">
<q-table
table-header-class="bg-grey-4 "
flat
bordered
:rows="rows"
:columns="columnTrainingHistory"
>
</q-table>
</div>
</q-card-actions>
</q-card>
<q-card class="bg-grey-2 q-mt-xl">
<div class=" text-weight-bold row items-center">
<span class="q-ml-lg q-my-sm">ผลงานทเคยเสนอขอประเม (าม)</span>
</div>
<q-separator />
<q-card-actions class="q-ma-md">
<div class="col-xs-12 col-sm-12 col-md-12">
<q-table
table-header-class="bg-grey-4 "
flat
bordered
:rows="rows"
:columns="columnProjectsProposed"
>
</q-table>
</div>
</q-card-actions>
</q-card>
</template>
<style scoped lang="scss">
.size-icon {
font-size: 20px; /* ปรับขนาดตามที่คุณต้องการ */
}
</style>
@/modules/12_evaluatePersonal/store/evaluate

View file

@ -0,0 +1,34 @@
<script setup lang="ts">
import ViewPDF from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewPDF.vue";
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";
const store = useEvaluateDetailStore();
</script>
<template>
<q-tab-panels v-model="store.tabPanels" animated swipeable vertical>
<q-tab-panel name="1">
<ViewPDF />
</q-tab-panel>
<q-tab-panel name="2">
<ViewPDF />
</q-tab-panel>
<q-tab-panel name="3">
<ViewPDF />
</q-tab-panel>
<q-tab-panel name="4">
<ViewPDF />
</q-tab-panel>
<q-tab-panel name="5">
<ViewPDF />
</q-tab-panel>
<q-tab-panel name="6">
<ViewPDF />
</q-tab-panel>
</q-tab-panels>
</template>
<style scoped></style>

View file

@ -0,0 +1,17 @@
<script setup lang="ts">
import ViewPDF from "@/modules/12_evaluatePersonal/components/Detail/viewstep/viewPDF.vue";
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";
const store = useEvaluateDetailStore();
</script>
<template>
<q-tab-panels v-model="store.tabPanels" animated swipeable vertical>
<q-tab-panel name="1">
<ViewPDF />
</q-tab-panel>
</q-tab-panels>
</template>
<style scoped></style>