fix: ปรับโหลด ขอโอน อุทรณ์/ร้องทุกข์ ขอลาออก

This commit is contained in:
setthawutttty 2025-08-06 14:40:36 +07:00
parent 2050ac6b9e
commit 04184c0d70
8 changed files with 113 additions and 56 deletions

View file

@ -1,6 +1,6 @@
<script setup lang="ts">
import { ref, onMounted } from "vue";
import { useQuasar } from "quasar";
import { is, useQuasar } from "quasar";
import type { QForm, QTableProps } from "quasar";
import { useRouter, useRoute } from "vue-router";
@ -20,6 +20,8 @@ import Dialog from "@/modules/03_retire/views/DialogRetire.vue";
import Header from "@/components/DialogHeader.vue";
import Workflow from "@/components/Workflow/Main.vue";
import SkeletonTable from "@/components/SkeletonTable.vue";
const $q = useQuasar();
const route = useRoute();
const router = useRouter();
@ -44,6 +46,7 @@ const id = ref<string>(
? route.params.id.toString()
: ""
); // id path
const isLoad = ref<boolean>(false);
const rowsApprover = ref<RowsType>();
const myform = ref<QForm | null>(null); //form
const tranferOrg = ref(""); //
@ -201,7 +204,7 @@ function cancelResing() {
* @param id ไอดของขอม
*/
async function fectDataresign(id: string) {
showLoader();
isLoad.value = true;
await http
.get(config.API.resingByidType(link.value, id))
.then((res) => {
@ -225,13 +228,12 @@ async function fectDataresign(id: string) {
};
files.value = data.docs;
dataDetail.value = data;
isLoad.value = false;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
.finally(() => {});
}
/**
@ -318,6 +320,7 @@ onMounted(async () => {
<div class="col-12 row q-col-gutter-sm q-pa-md">
<q-input
v-if="!isLoad"
:class="
routeName !== 'AddRetire'
? 'col-md-9 col-xs-12'
@ -332,7 +335,9 @@ onMounted(async () => {
:readonly="routeName != 'AddRetire'"
:rules="[(val:string) => !!val || `${'กรุณากรอกสถานที่ยื่นขอลาออกจากราชการ'}`]"
/>
<div class="col-md-9 col-xs-12 inputgreen" v-else>
<q-skeleton type="QInput" height="40px" />
</div>
<!-- <datepicker
:class="
routeName !== 'AddRetire'
@ -383,6 +388,7 @@ onMounted(async () => {
</datepicker> -->
<datepicker
v-if="!isLoad"
:class="
routeName !== 'AddRetire'
? 'col-md-3 col-xs-12'
@ -428,7 +434,11 @@ onMounted(async () => {
</q-input>
</template>
</datepicker>
<div v-else class="col-md-3 col-xs-12">
<q-skeleton type="QInput" height="40px" />
</div>
<q-select
v-if="!isLoad"
v-model="noteReason"
:class="
routeName !== 'AddRetire' ? 'col-12' : 'col-12 inputgreen'
@ -448,6 +458,9 @@ onMounted(async () => {
]"
>
</q-select>
<div v-else class="col-12">
<q-skeleton type="QInput" height="40px" />
</div>
<q-input
:class="
routeName !== 'AddRetire' ? 'col-12' : 'col-12 inputgreen'
@ -595,6 +608,7 @@ onMounted(async () => {
<q-separator />
<div class="col-12 q-pa-sm">
<d-table
v-if="!isLoad"
ref="table"
:columns="columnsCommanders"
:rows="rowsApprover?.commanders ?? []"
@ -643,11 +657,11 @@ onMounted(async () => {
</q-tr>
</template>
</d-table>
<SkeletonTable v-else :columns="columnsCommanders" />
</div>
</q-card>
</div>
<!-- ผลการพจารณาของผอำนาจ -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
@ -662,7 +676,7 @@ onMounted(async () => {
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 row items-start">
<div class="col-12 text-top"> - นามสก</div>
<div class="col-12 text-detail">
<div class="col-12 text-detail" v-if="!isLoad">
{{
rowsApprover &&
rowsApprover.approvers &&
@ -671,10 +685,11 @@ onMounted(async () => {
: "-"
}}
</div>
<q-skeleton v-else type="text" width="150px" />
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
<div v-if="!isLoad" class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
@ -685,12 +700,13 @@ onMounted(async () => {
: "-"
}}
</div>
<q-skeleton v-else type="text" width="150px" />
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">
นสดทายทบย
</div>
<div class="col-12 text-detail">
<div v-if="!isLoad" class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
@ -701,12 +717,13 @@ onMounted(async () => {
: "-"
}}
</div>
<q-skeleton v-else type="text" width="150px" />
</div>
<div class="col-xs-12 row items-start">
<div class="col-12 text-top">
ความคดเหนและเหตผล
</div>
<div class="col-12 text-detail">
<div v-if="!isLoad" class="col-12 text-detail">
{{
rowsApprover &&
rowsApprover.approvers &&
@ -715,6 +732,7 @@ onMounted(async () => {
: "-"
}}
</div>
<q-skeleton v-else type="text" width="150px" />
</div>
</div>
</div>
@ -751,6 +769,7 @@ onMounted(async () => {
<q-separator />
<div class="col-12 q-pa-sm">
<d-table
v-if="!isLoad"
ref="table"
:columns="columnsCommanders"
:rows="rowsApprover?.cancelCommanders ?? []"
@ -799,11 +818,11 @@ onMounted(async () => {
</q-tr>
</template>
</d-table>
<SkeletonTable v-else :columns="columnsCommanders" />
</div>
</q-card>
</div>
<!-- ผลการพจารณาของผอำนาจ -->
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div

View file

@ -15,16 +15,21 @@ import type {
MainListResponse,
} from "@/modules/03_retire/interface/Main";
import SkeletonTable from "@/components/SkeletonTable.vue";
const $q = useQuasar();
const router = useRouter();
const link = ref<string>("");
const dataStore = useDataStore();
const mixin = useCounterMixin();
const { date2Thai, messageError, showLoader, hideLoader } = mixin;
const { date2Thai, messageError, showLoader, hideLoader, onSearchDataTable } =
mixin;
const RestData = useRestDataStore();
const { statusText } = RestData; //Func status to text
const isLoad = ref<boolean>(false);
const rows = ref<MainList[]>([]);
const rowsData = ref<MainList[]>([]);
const filter = ref<string>("");
const pagination = ref({
sortBy: "desc",
@ -91,11 +96,12 @@ const columns = ref<QTableProps["columns"]>([
/** ดึงข้อมูล */
async function fectListleave() {
isLoad.value = true;
await http
.get(config.API.listUserByType(link.value))
.then(async (res) => {
let data = await res.data.result;
rows.value = data.map((e: MainListResponse) => ({
const list = data.map((e: MainListResponse) => ({
id: e.id,
placeLeave: e.location,
dateStartLeave: date2Thai(e.sendDate),
@ -103,9 +109,13 @@ async function fectListleave() {
status: e.status,
statustext: statusText(e.status),
}));
rowsData.value = list;
rows.value = list;
isLoad.value = false;
})
.catch((e: any) => {
messageError($q, e);
isLoad.value = false;
})
.finally(() => {});
}
@ -117,10 +127,13 @@ async function clickAdd() {
router.push(`/retire/add`);
}
/** ทำก่อน mounted */
onBeforeMount(() => {
showLoader();
});
function onSearch() {
rows.value = onSearchDataTable(
filter.value,
rowsData.value,
columns.value ? columns.value : []
);
}
/**
* เรยกฟงกนทงหมดตอนเรยกใชไฟล
@ -128,7 +141,6 @@ onBeforeMount(() => {
onMounted(async () => {
link.value = await dataStore.getProFileType();
await fectListleave();
hideLoader();
});
</script>
<template>
@ -161,15 +173,10 @@ onMounted(async () => {
debounce="300"
placeholder="ค้นหา"
style="max-width: 200px"
@keydown.enter.prevent="onSearch"
>
<template v-slot:append>
<q-icon v-if="filter == ''" name="search" />
<q-icon
v-if="filter !== ''"
name="clear"
class="cursor-pointer"
@click="filter = ''"
/>
<q-icon name="search" />
</template>
</q-input>
<!-- แสดงคอลมนใน table -->
@ -193,6 +200,7 @@ onMounted(async () => {
</div>
<div>
<d-table
v-if="!isLoad"
flat
bordered
dense
@ -272,6 +280,7 @@ onMounted(async () => {
</div>
</template>
</d-table>
<SkeletonTable v-else :columns="columns" />
</div>
</q-card>
</div>