From 5825f72e26a024ce724e16b2547025636911274e Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Wed, 8 Oct 2025 16:59:13 +0700 Subject: [PATCH 1/7] fix(complaints):sort --- .../components/1_Complaint/MainPage.vue | 271 +++++++++--------- .../components/1_Complaint/TableComplaint.vue | 60 +--- .../components/DialogSearchAdvanced.vue | 23 +- 3 files changed, 167 insertions(+), 187 deletions(-) diff --git a/src/modules/11_discipline/components/1_Complaint/MainPage.vue b/src/modules/11_discipline/components/1_Complaint/MainPage.vue index c7fab72c0..cda75e312 100644 --- a/src/modules/11_discipline/components/1_Complaint/MainPage.vue +++ b/src/modules/11_discipline/components/1_Complaint/MainPage.vue @@ -11,6 +11,7 @@ import { checkPermission } from "@/utils/permissions"; import { useCounterMixin } from "@/stores/mixin"; import { useComplainstDataStore } from "@/modules/11_discipline/store/ComplaintsStore"; import { useDisciplineMainStore } from "@/modules/11_discipline/store/Main"; +import { usePagination } from "@/composables/usePagination"; import type { DataOption } from "@/modules/11_discipline/interface/index/Main"; @@ -25,51 +26,51 @@ const mixin = useCounterMixin(); const complainstStore = useComplainstDataStore(); const { fetchComplainst } = complainstStore; const { showLoader, messageError, hideLoader, convertDateToAPI } = mixin; +const { pagination, params, onRequest } = usePagination("", getList); -const filterRef = ref(null); -const filterTable = ref(""); const filterKeyword = ref(""); - -const toptitle = ref(0); const statusFilter = ref("NEW"); const option = ref(complainstStore.statusOptions); -const total = ref(0); -const totalList = ref(1); -const pagination = ref({ - sortBy: "createdAt", - descending: true, - page: 1, - rowsPerPage: 10, -}); - /** ดึงข้อมูล เรื่องร้องเรียน */ -async function getList(page?: number) { +async function getList() { const body = { - page: page ? page : pagination.value.page, - pageSize: pagination.value.rowsPerPage, + ...params.value, keyword: filterKeyword.value.trim(), status: statusFilter.value, - ...(store.formComplaint.dateReceived?.[0] && { dateReceivedStart: convertDateToAPI(store.formComplaint.dateReceived[0])}), - ...(store.formComplaint.dateReceived?.[1] && { dateReceivedEnd: convertDateToAPI(store.formComplaint.dateReceived[1])}), - ...(store.formComplaint.respondentType && { respondentType: store.formComplaint.respondentType}), - ...(store.formComplaint.offenseDetails && { offenseDetails: store.formComplaint.offenseDetails}), - ...(store.formComplaint.levelConsideration && { levelConsideration: store.formComplaint.levelConsideration}), - ...(store.formComplaint.dateConsideration?.[0] && { dateConsiderationStart: convertDateToAPI( store.formComplaint.dateConsideration[0])}), - ...(store.formComplaint.dateConsideration?.[1] && { dateConsiderationEnd: convertDateToAPI( store.formComplaint.dateConsideration[1])}), + ...(store.formComplaint.dateReceived?.[0] && { + dateReceivedStart: convertDateToAPI(store.formComplaint.dateReceived[0]), + }), + ...(store.formComplaint.dateReceived?.[1] && { + dateReceivedEnd: convertDateToAPI(store.formComplaint.dateReceived[1]), + }), + ...(store.formComplaint.respondentType && { + respondentType: store.formComplaint.respondentType, + }), + ...(store.formComplaint.offenseDetails && { + offenseDetails: store.formComplaint.offenseDetails, + }), + ...(store.formComplaint.levelConsideration && { + levelConsideration: store.formComplaint.levelConsideration, + }), + ...(store.formComplaint.dateConsideration?.[0] && { + dateConsiderationStart: convertDateToAPI( + store.formComplaint.dateConsideration[0] + ), + }), + ...(store.formComplaint.dateConsideration?.[1] && { + dateConsiderationEnd: convertDateToAPI( + store.formComplaint.dateConsideration[1] + ), + }), }; showLoader(); await http .post(config.API.complaintList(), body) - // .then(async (res) => { - totalList.value = Math.ceil( - res.data.result.total / pagination.value.rowsPerPage - ); - total.value = res.data.result.total; - toptitle.value = res.data.result.total; - const data = res.data.result.data; - await fetchComplainst(data); + const result = res.data.result; + pagination.value.rowsNumber = result.total; + await fetchComplainst(result.data); }) .catch((e) => { messageError($q, e); @@ -102,13 +103,6 @@ function getSearch() { getList(); } -watch( - () => pagination.value.rowsPerPage, - async () => { - getSearch(); - } -); - /** เรียกใช้งาน ฟังชั่น ตอนเริ่มโหลดหน้า */ onMounted(async () => { await getList(); @@ -119,99 +113,120 @@ onMounted(async () => {
รายการเรื่องร้องเรียน
- -
- - - - + +
+
+
+
+
+
+ + + + +
-
- เพิ่มเรื่องร้องเรียน +
+ เพิ่มเรื่องร้องเรียน +
+
+
+ +
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+
+
+
- - - - - - -
- -
- +
+ +
diff --git a/src/modules/11_discipline/components/1_Complaint/TableComplaint.vue b/src/modules/11_discipline/components/1_Complaint/TableComplaint.vue index ff67a7b59..a0bccc8fd 100644 --- a/src/modules/11_discipline/components/1_Complaint/TableComplaint.vue +++ b/src/modules/11_discipline/components/1_Complaint/TableComplaint.vue @@ -1,28 +1,24 @@ diff --git a/src/modules/11_discipline/components/DialogSearchAdvanced.vue b/src/modules/11_discipline/components/DialogSearchAdvanced.vue index 760575f16..73ab9ab3f 100644 --- a/src/modules/11_discipline/components/DialogSearchAdvanced.vue +++ b/src/modules/11_discipline/components/DialogSearchAdvanced.vue @@ -75,18 +75,17 @@ watchEffect(() => { }); + +
diff --git a/src/modules/11_discipline/components/DialogSearchAdvanced.vue b/src/modules/11_discipline/components/DialogSearchAdvanced.vue index 73ab9ab3f..3a858ab1d 100644 --- a/src/modules/11_discipline/components/DialogSearchAdvanced.vue +++ b/src/modules/11_discipline/components/DialogSearchAdvanced.vue @@ -1,5 +1,5 @@ - + diff --git a/src/modules/11_discipline/store/InvestigateDisStore.ts b/src/modules/11_discipline/store/InvestigateDisStore.ts index b775fc394..d93cdce23 100644 --- a/src/modules/11_discipline/store/InvestigateDisStore.ts +++ b/src/modules/11_discipline/store/InvestigateDisStore.ts @@ -4,7 +4,7 @@ import type { QTableProps } from "quasar"; import { useCounterMixin } from "@/stores/mixin"; -import type { Persons } from "@/modules/11_discipline/interface/request/Disciplinary"; +import type { Persons } from "@/modules/11_discipline/interface/request/disciplinary"; import type { investigateDisDataRowType, DataOption, @@ -81,7 +81,7 @@ export const useInvestigateDisStore = defineStore( "offenseDetails", "disciplinaryFaultLevel", "disciplinaryCaseFault", - "disciplinaryDate", + "disciplinaryDateStart", "dateReceived", "status", ]); @@ -113,8 +113,6 @@ export const useInvestigateDisStore = defineStore( field: "respondentType", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { name: "offenseDetails", @@ -124,8 +122,6 @@ export const useInvestigateDisStore = defineStore( field: "offenseDetails", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { name: "disciplinaryFaultLevel", @@ -135,8 +131,6 @@ export const useInvestigateDisStore = defineStore( field: "disciplinaryFaultLevel", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { name: "disciplinaryCaseFault", @@ -146,11 +140,9 @@ export const useInvestigateDisStore = defineStore( field: "disciplinaryCaseFault", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { - name: "disciplinaryDate", + name: "disciplinaryDateStart", align: "left", label: "วันที่สอบสวน", sortable: true, @@ -171,7 +163,7 @@ export const useInvestigateDisStore = defineStore( name: "status", align: "left", label: "สถานะ", - sortable: true, + sortable: false, field: "status", headerStyle: "font-size: 14px", style: "font-size: 14px", From ad80eae285ab543b86e8f7a533cb7759aba3ecbe Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 9 Oct 2025 11:05:57 +0700 Subject: [PATCH 4/7] fix(discipline-result):sort --- .../components/1_Complaint/MainPage.vue | 4 +- .../2_InvestigateFacts/MainPage.vue | 2 +- .../3_InvestigateDisciplinary/Table.vue | 2 +- .../components/4_Result/MainPage.vue | 78 ++-- .../components/4_Result/Table.vue | 393 ++++++++---------- .../11_discipline/store/ResultStore.ts | 14 +- 6 files changed, 204 insertions(+), 289 deletions(-) diff --git a/src/modules/11_discipline/components/1_Complaint/MainPage.vue b/src/modules/11_discipline/components/1_Complaint/MainPage.vue index ea5bb1766..baf855b80 100644 --- a/src/modules/11_discipline/components/1_Complaint/MainPage.vue +++ b/src/modules/11_discipline/components/1_Complaint/MainPage.vue @@ -158,7 +158,7 @@ onMounted(async () => {
{
-
+
diff --git a/src/modules/11_discipline/components/2_InvestigateFacts/MainPage.vue b/src/modules/11_discipline/components/2_InvestigateFacts/MainPage.vue index bad728924..088b511ca 100644 --- a/src/modules/11_discipline/components/2_InvestigateFacts/MainPage.vue +++ b/src/modules/11_discipline/components/2_InvestigateFacts/MainPage.vue @@ -175,7 +175,7 @@ onMounted(() => {
-
+
diff --git a/src/modules/11_discipline/components/3_InvestigateDisciplinary/Table.vue b/src/modules/11_discipline/components/3_InvestigateDisciplinary/Table.vue index aa332c0dc..04ae6b6ac 100644 --- a/src/modules/11_discipline/components/3_InvestigateDisciplinary/Table.vue +++ b/src/modules/11_discipline/components/3_InvestigateDisciplinary/Table.vue @@ -162,7 +162,7 @@ function filterOptionFn(val: string, update: Function) {
-
+
diff --git a/src/modules/11_discipline/components/4_Result/MainPage.vue b/src/modules/11_discipline/components/4_Result/MainPage.vue index 7e25a0d71..3483b5e62 100644 --- a/src/modules/11_discipline/components/4_Result/MainPage.vue +++ b/src/modules/11_discipline/components/4_Result/MainPage.vue @@ -8,7 +8,7 @@ import config from "@/app.config"; import { useCounterMixin } from "@/stores/mixin"; import { useDisciplineResultStore } from "@/modules/11_discipline/store/ResultStore"; import { useDisciplineMainStore } from "@/modules/11_discipline/store/Main"; -import type { Pagination } from "@/modules/03_recruiting/interface/index/Main"; +import { usePagination } from "@/composables/usePagination"; import Table from "@/modules/11_discipline/components/4_Result/Table.vue"; @@ -19,23 +19,15 @@ const storeResult = useDisciplineResultStore(); const store = useDisciplineMainStore(); const { showLoader, hideLoader, messageError, convertDateToAPI } = mixin; const { fetchList } = storeResult; +const { pagination, params, onRequest } = usePagination("", fetchListResult); const filter = ref(""); const status = ref("DONE"); -const total = ref(0); -const totalList = ref(1); -const pagination = ref({ - sortBy: "createdAt", - descending: true, - page: 1, - rowsPerPage: 10, -}); /** function เรียกรายการสรุปผลการพิจารณาทางวินัย*/ -async function fetchListResult(page?: number) { +async function fetchListResult() { const body = { - page: page ? page : pagination.value.page, - pageSize: pagination.value.rowsPerPage, + ...params.value, keyword: filter.value.trim(), status: status.value, ...(store.formResult.respondentType && { @@ -77,12 +69,9 @@ async function fetchListResult(page?: number) { await http .post(config.API.listResult(), body) .then(async (res) => { - const data = res.data.result.data; - totalList.value = Math.ceil( - res.data.result.total / pagination.value.rowsPerPage - ); - total.value = res.data.result.total; - await fetchList(data); + const result = res.data.result; + pagination.value.rowsNumber = result.total; + await fetchList(result.data); }) .catch((err) => { messageError($q, err); @@ -112,18 +101,11 @@ function filterStatus(statusReturn: string) { getSearch(); } -function getSearch(page?: number) { +function getSearch() { pagination.value.page = 1; - fetchListResult(page); + fetchListResult(); } -watch( - () => pagination.value.rowsPerPage, - async () => { - getSearch(); - } -); - /**เมื่อเริ่มโหลดหน้า * ส่งข้อมูลจำลองไปยัง store */ @@ -136,29 +118,25 @@ onMounted(async () => {
รายการสรุปผลการพิจารณาความผิดทางวินัย
- -
- -
-
+ + diff --git a/src/modules/11_discipline/components/4_Result/Table.vue b/src/modules/11_discipline/components/4_Result/Table.vue index 40efc64f6..259f2598e 100644 --- a/src/modules/11_discipline/components/4_Result/Table.vue +++ b/src/modules/11_discipline/components/4_Result/Table.vue @@ -1,22 +1,23 @@ - + diff --git a/src/modules/11_discipline/store/ResultStore.ts b/src/modules/11_discipline/store/ResultStore.ts index 54406a2fc..b7b4020c6 100644 --- a/src/modules/11_discipline/store/ResultStore.ts +++ b/src/modules/11_discipline/store/ResultStore.ts @@ -42,7 +42,7 @@ export const useDisciplineResultStore = defineStore( "offenseDetails", "disciplinaryFaultLevel", "disciplinaryCaseFault", - "disciplinaryDate", + "disciplinaryDateStart", "resultDisciplineType", "resultTitleType", "resultOc", @@ -77,8 +77,6 @@ export const useDisciplineResultStore = defineStore( field: "respondentType", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { name: "offenseDetails", @@ -88,8 +86,6 @@ export const useDisciplineResultStore = defineStore( field: "offenseDetails", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { name: "disciplinaryFaultLevel", @@ -99,8 +95,6 @@ export const useDisciplineResultStore = defineStore( field: "disciplinaryFaultLevel", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { name: "disciplinaryCaseFault", @@ -110,11 +104,9 @@ export const useDisciplineResultStore = defineStore( field: "disciplinaryCaseFault", headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, { - name: "disciplinaryDate", + name: "disciplinaryDateStart", align: "left", label: "วันที่สอบสวน", sortable: true, @@ -162,7 +154,7 @@ export const useDisciplineResultStore = defineStore( name: "status", align: "left", label: "สถานะ", - sortable: true, + sortable: false, field: "status", headerStyle: "font-size: 14px", style: "font-size: 14px", From dc3989acae2ac3ad5a98abaebf88584abd64dd1b Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 9 Oct 2025 11:53:45 +0700 Subject: [PATCH 5/7] fix(startDateSuspend):sort --- src/api/11_discipline/api.discipline.ts | 9 +- .../components/7_ListSuspend/ListsPage.vue | 515 ++++++++---------- 2 files changed, 236 insertions(+), 288 deletions(-) diff --git a/src/api/11_discipline/api.discipline.ts b/src/api/11_discipline/api.discipline.ts index 4bb3f94a2..a1a0e2bc9 100644 --- a/src/api/11_discipline/api.discipline.ts +++ b/src/api/11_discipline/api.discipline.ts @@ -82,13 +82,8 @@ export default { `${discipline}/director/${disciplineId}/${id}`, /** ผู้ถูกพักราชการ */ - suspendMain: ( - page: number, - pageSize: number, - keyword: string, - type: string - ) => - `${suspend}?page=${page}&pageSize=${pageSize}&keyword=${keyword}&profileType=${type}`, + suspendMain: suspend, + suspendById: (id: string) => `${suspend}/${id}`, suspendReport: () => `${suspend}/report`, diff --git a/src/modules/11_discipline/components/7_ListSuspend/ListsPage.vue b/src/modules/11_discipline/components/7_ListSuspend/ListsPage.vue index bb391a6a0..bb73d2036 100644 --- a/src/modules/11_discipline/components/7_ListSuspend/ListsPage.vue +++ b/src/modules/11_discipline/components/7_ListSuspend/ListsPage.vue @@ -1,5 +1,5 @@