แก้รายงาน (ข้อความและการทำงาน)

This commit is contained in:
Warunee Tamkoo 2025-03-31 10:50:40 +07:00
parent e61eb15d66
commit e5f2e71632
14 changed files with 226 additions and 184 deletions

View file

@ -1,6 +1,6 @@
<script setup lang="ts">
import axios from "axios";
import { ref, onMounted } from "vue";
import { ref } from "vue";
import { VuePDF, usePDF } from "@tato30/vue-pdf";
import { useQuasar } from "quasar";
@ -17,7 +17,7 @@ import genReportXLSX from "@/plugins/genreportxlsx";
const isReport = ref<boolean>(true);
const mixin = useCounterMixin();
const $q = useQuasar();
const { showLoader, hideLoader, date2Thai, dateToISO, messageError } = mixin;
const { showLoader, hideLoader, messageError } = mixin;
const isLoadPDF = ref<boolean>(false);
@ -150,9 +150,14 @@ function clearFilter() {
detailReport.value = undefined;
}
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">
รายงานสถสำหรบการสอบแขงข
{{
$route.name == "reportExam"
? "รายงานสรรหา"
: "รายงานสถิติสำหรับการสอบแข่งขัน"
}}
</div>
<q-form greedy @submit.prevent @validation-success="getReportRecruit">

View file

@ -206,7 +206,7 @@ onMounted(() => {
<template>
<div class="toptitle text-dark col-12 row items-center">
รายงานบรรจ แตงต าย โอน
รายงานการบรรจ แตงต าย โอน
</div>
<q-form greedy @submit.prevent @validation-success="fetchDataReport">

View file

@ -228,7 +228,7 @@ onMounted(() => {
<template>
<div class="toptitle text-dark col-12 row items-center">
รายงานนจากราชการ
รายงานการนจากราชการ
</div>
<q-form greedy @submit.prevent @validation-success="fetchDataReport">

View file

@ -349,13 +349,13 @@ onMounted(async () => {
<div class="col-12">
<q-card class="q-pa-sm">
<div class="row q-col-gutter-sm no-wrap">
<div class="col-lg-2 col-md-3 col-sm-3 col-xs-12">
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<q-select
outlined
dense
v-model="employeeClass"
:options="employeeClassOption"
label="สถานภาพ"
label="ประเภทตำแหน่ง"
emit-value
map-options
option-label="name"

View file

@ -11,8 +11,8 @@ const SpecialTimeMain = () =>
import("@/modules/09_leave/views/04_SpecialTimeMain.vue");
const leaveReport = () => import("@/modules/09_leave/views/06_ReportMain.vue");
const CheckinReport = () =>
import("@/modules/09_leave/views/07_ReportCheckin.vue");
// const CheckinReport = () =>
// import("@/modules/09_leave/views/!07_ReportCheckin.vue");
export default [
{
path: "/round-time",
@ -96,9 +96,9 @@ export default [
},
{
path: "/checkinReport",
path: "/checkin-report",
name: "checkinReport",
component: CheckinReport,
component: leaveReport,
meta: {
Auth: true,
Key: "SYS_WORK_REPORT",

View file

@ -45,26 +45,49 @@ const dateMonth = ref<DataDateMonthObject>({
year: new Date().getFullYear(),
});
const pageName = ref<string>(route.name as string);
const dateWeek = ref<Date[]>(getCurrentWeek());
const date = ref<Date>(new Date());
const typeReport = ref<string>("");
const optionReport = ref<DataOption[]>([]);
const optionReportMain = ref<DataOption[]>([
{
id: "3",
name: "รายงานการเข้างาน",
},
{
id: "4",
name: "รายงานการเข้างานสาย",
},
{ id: "1", name: "รายงานการลางานตามประเภทการลา" },
{
id: "2",
name: "รายงานการลางาน จำแนกตามเพศ ประเภทการลา หน่วยงาน/ส่วนราชการ",
},
]);
const optionReportMain = ref<DataOption[]>(
route.name?.toString() === "reportLeave"
? [
{
id: "3",
name: "รายงานการเข้างาน",
},
{
id: "4",
name: "รายงานการเข้างานสาย",
},
{ id: "1", name: "รายงานการลางานตามประเภทการลา" },
{
id: "2",
name: "รายงานการลางาน จำแนกตามเพศ ประเภทการลา หน่วยงาน/ส่วนราชการ",
},
]
: route.name?.toString() === "leaveReport"
? [
{ id: "1", name: "รายงานการลางานตามประเภทการลา" },
{
id: "2",
name: "รายงานการลางาน จำแนกตามเพศ ประเภทการลา หน่วยงาน/ส่วนราชการ",
},
]
: [
{
id: "3",
name: "รายงานการเข้างาน",
},
{
id: "4",
name: "รายงานการเข้างานสาย",
},
]
);
const employeeClass = ref<string>("officer");
const yearType = ref<string>("FULL");
@ -380,14 +403,22 @@ onMounted(() => {
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">ญชแสดงวนลา</div>
<div class="toptitle text-dark col-12 row items-center">
{{
pageName === "reportLeave"
? "รายงานบันทึกเวลาและการลา"
: pageName === "leaveReport"
? "รายงานสถิติการลา"
: "รายงานสถิติการลงเวลา"
}}
</div>
<q-form greedy @submit.prevent @validation-success="onSearch">
<div class="row q-col-gutter-sm">
<div class="col-12">
<q-card class="q-pa-sm">
<div class="row q-col-gutter-sm no-wrap">
<div class="col-lg-2 col-md-3 col-sm-3 col-xs-12">
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<q-select
outlined
dense
@ -624,7 +655,6 @@ onMounted(() => {
<div class="row q-col-gutter-y-xs">
<div class="text-grey-8 text-caption">เลอกชวงเวลา</div>
<div class="col-12">
<q-select
class="bg-white"
dense

View file

@ -298,14 +298,16 @@ onMounted(async () => {
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">รายงานว</div>
<div class="toptitle text-dark col-12 row items-center">
รายงานการดำเนนการทางว
</div>
<q-form greedy @submit.prevent @validation-success="onUpdateFilter">
<div class="row q-col-gutter-sm">
<div class="col-12">
<q-card class="q-pa-sm">
<div class="row q-col-gutter-sm no-wrap">
<div class="col-lg-2 col-md-3 col-sm-3 col-xs-12">
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<q-select
outlined
dense

View file

@ -509,7 +509,7 @@ onMounted(() => {
<template>
<div class="toptitle text-dark col-12 row items-center">
รายงานประเมนผลการปฏราชการระดบบคคล
รายงานการประเมนผลฯ ระดบบคคล
</div>
<q-form greedy @submit.prevent @validation-success="fetchReport">
@ -655,7 +655,7 @@ onMounted(() => {
</template>
</datepicker>
</div>
<div class="col-12"><q-separator/></div>
<div class="col-12"><q-separator /></div>
<div class="col-12 q-px-sm">
<q-select
ref="roundRef"
@ -681,8 +681,11 @@ onMounted(() => {
"
/>
</div>
<div class="col-12"><q-separator/></div>
<div class="col-12 q-pb-xs q-px-sm" v-if="typeReport !== 'KPI8'">
<div class="col-12"><q-separator /></div>
<div
class="col-12 q-pb-xs q-px-sm"
v-if="typeReport !== 'KPI8'"
>
<q-select
class="bg-white"
:disable="roundOp.length === 0"

View file

@ -16,7 +16,7 @@ import type { OrgRevision } from "@/modules/02_organization/interface/response/o
import TreeView from "@/modules/21_report/components/01_org/Main.vue";
import StructureView from "@/modules/02_organization/components/StructureMain.vue";
import StructureOrgMain from "@/modules/02_organization/components/StructureOrgMain.vue";
import DialogHeader from "@/components/DialogHeader.vue";
// import DialogHeader from "@/components/DialogHeader.vue";
/** use*/
const $q = useQuasar();
@ -34,8 +34,8 @@ const historyId = ref<string>(""); // ID ประวัติโครงสร
const labelHistory = ref<string>("ประวัติโครงสร้าง"); //
const count = ref<number>(0);
const modalCommand = ref<boolean>(false); //
const modalRemark = ref<boolean>(false); //
// const modalCommand = ref<boolean>(false); //
// const modalRemark = ref<boolean>(false); //
/**
* function เรยกขอมลโครงสราง แบบปนและ แบบราง
@ -99,19 +99,19 @@ async function fetchHistory() {
});
}
/**
* function openPopup เพมโครงสร
* @param type ประเภทการเพมโครงาสร
*/
function ocClickAddStructure(type: string) {
modalNewStructure.value = !modalNewStructure.value;
typeStructure.value = type;
}
// /**
// * function openPopup
// * @param type
// */
// function ocClickAddStructure(type: string) {
// modalNewStructure.value = !modalNewStructure.value;
// typeStructure.value = type;
// }
/** function openPopup ตั้งเวลาเผยแพร่ */
function onClickDateTime() {
modalDateTime.value = !modalDateTime.value;
}
// /** function openPopup */
// function onClickDateTime() {
// modalDateTime.value = !modalDateTime.value;
// }
/**
* function เปดประวโครงสราง
@ -125,18 +125,18 @@ function onClickHistory(id: string, name: string) {
count.value++;
}
async function workflowSystem() {
http
.get(config.API.workflowKeycloakSystem("SYS_ORG"))
.then((res) => {
const data = res.data.result;
store.isOfficer = data.isOfficer;
store.isStaff = data.isStaff;
})
.catch((e) => {
messageError($q, e);
});
}
// async function workflowSystem() {
// http
// .get(config.API.workflowKeycloakSystem("SYS_ORG"))
// .then((res) => {
// const data = res.data.result;
// store.isOfficer = data.isOfficer;
// store.isStaff = data.isStaff;
// })
// .catch((e) => {
// messageError($q, e);
// });
// }
async function fetchCheckIslock(id: string) {
http
@ -150,20 +150,20 @@ async function fetchCheckIslock(id: string) {
});
}
watch(
() => store.typeOrganizational,
() => {
if (
store.typeOrganizational === "draft" &&
store.isOfficer === null &&
store.isStaff === null
) {
workflowSystem();
} else if (store.typeOrganizational === "draft") {
store.rootId = "";
}
}
);
// watch(
// () => store.typeOrganizational,
// () => {
// if (
// store.typeOrganizational === "draft" &&
// store.isOfficer === null &&
// store.isStaff === null
// ) {
// workflowSystem();
// } else if (store.typeOrganizational === "draft") {
// store.rootId = "";
// }
// }
// );
/**
* lifecycleHook ทำงานเมอมการเรยกใช Components
@ -177,11 +177,11 @@ onMounted(async () => {
<template>
<div class="row items-center">
<div class="toptitle text-dark row items-center q-py-xs">
รายงานโครงสรางตรากำล
รายงานโครงสรางและกรอบตรากำล
</div>
<q-space />
<div
<!-- <div
class="toptitle row items-center"
v-if="store.typeOrganizational === 'draft'"
>
@ -202,11 +202,11 @@ onMounted(async () => {
@click="onClickDateTime"
>
</q-btn>
</div>
</div> -->
</div>
<q-card flat bordered>
<div class="q-pa-xl" v-if="!isStatusData">
<!-- <div class="q-pa-xl" v-if="!isStatusData">
<q-card
flat
bordered
@ -244,57 +244,57 @@ onMounted(async () => {
</q-card>
</div>
<div v-else>
<q-card class="my-card">
<q-card-section class="q-pa-sm">
<q-toolbar class="q-gutter-md items-center" style="padding: 0px">
<q-btn-group outline>
<q-btn
dense
class="q-px-md"
:outline="store.typeOrganizational === 'current' ? false : true"
color="blue"
label="ปัจจุบัน"
:disable="store.activeId == '' || store.activeId == null"
@click="
(store.typeOrganizational = 'current'),
(labelHistory = 'ประวัติโครงสร้าง')
"
/>
<q-btn-dropdown
v-if="
checkPermission($route)?.attrOwnership == 'OWNER' &&
itemHistory.length > 0
"
dense
class="q-px-md"
color="blue"
:label="labelHistory"
@click="store.typeOrganizational = 'old'"
:outline="store.typeOrganizational === 'old' ? false : true"
>
<q-list>
<q-item
dense
clickable
v-close-popup
v-for="(item, index) in itemHistory"
:key="index"
@click="onClickHistory(item.id, item.name)"
>
<q-item-section>
<q-item-label
>{{ item.orgRevisionCreatedAt }}
{{ item.name }}</q-item-label
>
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</q-btn-group>
<div v-else> -->
<q-card class="my-card">
<q-card-section class="q-pa-sm">
<q-toolbar class="q-gutter-md items-center" style="padding: 0px">
<q-btn-group outline>
<q-btn
dense
class="q-px-md"
:outline="store.typeOrganizational === 'current' ? false : true"
color="blue"
label="ปัจจุบัน"
:disable="store.activeId == '' || store.activeId == null"
@click="
(store.typeOrganizational = 'current'),
(labelHistory = 'ประวัติโครงสร้าง')
"
/>
<q-btn-dropdown
v-if="
checkPermission($route)?.attrOwnership == 'OWNER' &&
itemHistory.length > 0
"
dense
class="q-px-md"
color="blue"
:label="labelHistory"
@click="store.typeOrganizational = 'old'"
:outline="store.typeOrganizational === 'old' ? false : true"
>
<q-list>
<q-item
dense
clickable
v-close-popup
v-for="(item, index) in itemHistory"
:key="index"
@click="onClickHistory(item.id, item.name)"
>
<q-item-section>
<q-item-label
>{{ item.orgRevisionCreatedAt }}
{{ item.name }}</q-item-label
>
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</q-btn-group>
<!-- <q-btn
v-if="store.remark"
flat
round
@ -303,59 +303,59 @@ onMounted(async () => {
@click="modalRemark = true"
>
<q-tooltip>หมายเหต</q-tooltip>
</q-btn>
</q-btn> -->
<q-space />
<q-btn
flat
dense
:color="store.statusView === 'list' ? 'grey-7' : 'grey-4'"
icon="mdi-file-tree"
@click="store.statusView = 'list'"
<q-space />
<q-btn
flat
dense
:color="store.statusView === 'list' ? 'grey-7' : 'grey-4'"
icon="mdi-file-tree"
@click="store.statusView = 'list'"
/>
<q-separator inset vertical />
<q-btn
flat
dense
icon="mdi-sitemap"
:color="store.statusView === 'tree' ? 'grey-7' : 'grey-4'"
@click="store.statusView = 'tree'"
/>
<q-separator inset vertical />
<q-btn
flat
dense
icon="mdi-account-group"
:color="store.statusView === 'org' ? 'grey-7' : 'grey-4'"
@click="store.statusView = 'org'"
/>
</q-toolbar>
</q-card-section>
<q-separator />
<q-card-section style="padding: 0px">
<q-tab-panels v-model="store.statusView" animated>
<q-tab-panel name="list" style="padding: 0px">
<TreeView
v-if="store.statusView === 'list'"
v-model:historyId="historyId"
v-model:count="count"
/>
<q-separator inset vertical />
<q-btn
flat
dense
icon="mdi-sitemap"
:color="store.statusView === 'tree' ? 'grey-7' : 'grey-4'"
@click="store.statusView = 'tree'"
/>
<q-separator inset vertical />
<q-btn
flat
dense
icon="mdi-account-group"
:color="store.statusView === 'org' ? 'grey-7' : 'grey-4'"
@click="store.statusView = 'org'"
/>
</q-toolbar>
</q-card-section>
<q-separator />
<q-card-section style="padding: 0px">
<q-tab-panels v-model="store.statusView" animated>
<q-tab-panel name="list" style="padding: 0px">
<TreeView
v-if="store.statusView === 'list'"
v-model:historyId="historyId"
v-model:count="count"
/>
</q-tab-panel>
</q-tab-panel>
<q-tab-panel name="tree" style="padding: 0px">
<StructureView v-if="store.statusView === 'tree'" />
</q-tab-panel>
<q-tab-panel name="tree" style="padding: 0px">
<StructureView v-if="store.statusView === 'tree'" />
</q-tab-panel>
<q-tab-panel name="org" style="padding: 0px">
<StructureOrgMain v-if="store.statusView === 'org'" />
</q-tab-panel>
</q-tab-panels>
</q-card-section>
</q-card>
</div>
<q-tab-panel name="org" style="padding: 0px">
<StructureOrgMain v-if="store.statusView === 'org'" />
</q-tab-panel>
</q-tab-panels>
</q-card-section>
</q-card>
<!-- </div> -->
</q-card>
<q-dialog v-model="modalRemark">
<!-- <q-dialog v-model="modalRemark">
<q-card style="width: 300px">
<DialogHeader tittle="หมายเหตุ" :close="() => (modalRemark = false)" />
@ -368,7 +368,7 @@ onMounted(async () => {
</div>
</q-card-section>
</q-card>
</q-dialog>
</q-dialog> -->
</template>
<style scoped></style>

View file

@ -832,7 +832,7 @@ watch(
<div class="row col-12 q-gutter-sm">
<q-card class="col-12 q-pa-sm">
<div class="row col-12 q-col-gutter-sm no-wrap">
<div class="col-lg-2 col-md-3 col-sm-3 col-xs-12">
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<q-select
outlined
dense

View file

@ -220,7 +220,7 @@ onMounted(async () => {
<template>
<div class="toptitle text-dark col-12 row items-center">
รายงานโครงการ/หลกสตรการฝกอบรมทหนวยงานของกรงเทพมหานครเปนผ
รายงานการพฒนาบคลากร/การศกษาต
</div>
<q-form greedy @submit.prevent @validation-success="getReport">

View file

@ -161,7 +161,7 @@ onMounted(() => {
<template>
<div class="toptitle text-dark col-12 row items-center">
รายงานประเมนบคคล
รายงานระบบประเมนบคคล
</div>
<q-form greedy @submit.prevent @validation-success="fetchReport">
<div class="row q-col-gutter-sm">

View file

@ -301,20 +301,22 @@ onMounted(() => {
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">รายงานเงนเดอน</div>
<div class="toptitle text-dark col-12 row items-center">
รายงานระบบเงนเดอน
</div>
<q-form greedy @submit.prevent @validation-success="fetchReportPDF">
<div class="row q-col-gutter-sm">
<div class="col-12">
<q-card class="q-pa-sm">
<div class="row q-col-gutter-sm no-wrap">
<div class="col-lg-2 col-md-3 col-sm-3 col-xs-12">
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<q-select
outlined
dense
v-model="employeeClass"
:options="employeeClassOption"
label="สภานภาพ"
label="ประเภทตำแหน่ง"
emit-value
map-options
option-label="name"