Merge branch 'develop' into dev
All checks were successful
Build & Deploy on Dev / build (push) Successful in 2m40s

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2026-06-05 10:58:00 +07:00
commit 1da74091a2
25 changed files with 152 additions and 58 deletions

View file

@ -7,6 +7,7 @@ import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useStructureTree } from "@/stores/structureTree";
import { formatPosmasterNo } from "@/utils/function";
import type { QTableProps } from "quasar";
import type {
@ -282,12 +283,12 @@ async function getDataTable(id: string, level: number = 0) {
const listPosNo: DataPositionNo[] = dataMain.map((e: PositionMain) => ({
id: e.id,
isPosition: e.isPosition,
posMasterNo:
e.orgShortname +
(e.posMasterNoPrefix != null ? e.posMasterNoPrefix : "") +
" " +
e.posMasterNo +
(e.posMasterNoSuffix != null ? e.posMasterNoSuffix : ""),
posMasterNo: formatPosmasterNo(
e.orgShortname,
e.posMasterNoPrefix,
e.posMasterNo.toString(),
e.posMasterNoSuffix
),
positionName: e.positionName,
posTypeName: e.posTypeName,
posLevelName: e.posLevelName,

View file

@ -7,6 +7,7 @@ import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useStructureTree } from "@/stores/structureTree";
import { formatPosmasterNo } from "@/utils/function";
import type { QTableProps } from "quasar";
import type {
@ -263,12 +264,12 @@ async function getDataTable(id: string, level: number = 0) {
const listPosNo: DataPositionNo[] = dataMain.map((e: PositionMain) => ({
id: e.id,
isPosition: e.isPosition,
posMasterNo:
e.orgShortname +
(e.posMasterNoPrefix != null ? e.posMasterNoPrefix : "") +
" " +
e.posMasterNo +
(e.posMasterNoSuffix != null ? e.posMasterNoSuffix : ""),
posMasterNo: formatPosmasterNo(
e.orgShortname,
e.posMasterNoPrefix,
e.posMasterNo.toString(),
e.posMasterNoSuffix
),
positionName: e.positionName,
posTypeName: e.posTypeName,
posLevelName: e.posLevelName,

View file

@ -48,7 +48,7 @@ const modal = defineModel<boolean>("modal", { required: true });
let reqMaster = defineModel<FilterMaster>("reqMaster", { required: true });
const totalPage = defineModel<number>("totalPage", { required: true });
const nodeTree = defineModel<OrgTree[]>("nodeTree", { required: true });
const columns = defineModel<QTableProps[]>("columns", {});
const columns = defineModel<QTableProps['columns']>("columns", {});
const rows = defineModel<PosMaster2[]>("rows", { required: true });
const props = defineProps({
fetchDataTree: {

View file

@ -9,6 +9,7 @@ import { checkPermission } from "@/utils/permissions";
import { updateCurrentPage } from "@/utils/function";
import { useOrganizational } from "@/modules/02_organization/store/organizational";
import { useCounterMixin } from "@/stores/mixin";
import { formatPosmasterNo } from "@/utils/function";
/** importType*/
import type { QTableProps } from "quasar";
@ -205,6 +206,14 @@ const columns = ref<QTableProps["columns"]>([
sortable: false,
field: "posMasterNo",
headerStyle: "font-size: 14px",
format(val, row) {
return formatPosmasterNo(
row.orgShortname,
row.posMasterNoPrefix,
row.posMasterNoMain,
row.posMasterNoSuffix
);
},
style: "font-size: 14px",
},
{
@ -1124,7 +1133,7 @@ watch(
<DialogMovePos
v-model:modal="modalDialogMMove"
v-model:nodeTree="nodeTree"
v-model:columns="columns as QTableProps[]"
v-model:columns="columns"
v-model:rows="posMaster"
v-model:totalPage="totalPage"
v-model:reqMaster="reqMaster"

View file

@ -108,6 +108,11 @@ export const useOrganizational = defineStore("organizationalStore", () => {
posLevelName: e.isSit ? e.profilePoslevel : e.posLevelName,
posExecutiveName: e.posExecutiveName,
isSit: e.isSit,
orgShortname: e.orgShortname,
posMasterNoPrefix: e.posMasterNoPrefix,
posMasterNoSuffix: e.posMasterNoSuffix,
posMasterNoMain: e.posMasterNo,
}));
return newPosMaster || [];

View file

@ -1,5 +1,5 @@
import { defineStore } from "pinia";
import { ref } from "vue";
import { formatPosmasterNo } from "@/utils/function";
/** importType*/
import type { PositionMaim } from "@/modules/05_placement/interface/response/SelectOrg";
import type { DataPositionNo } from "@/modules/05_placement/interface/index/SelectOrg";
@ -12,12 +12,13 @@ export const useSelectOrgStore = defineStore("selectorg", () => {
const listPosNo: DataPositionNo[] = data.map((e: PositionMaim) => ({
id: e.id,
isPosition: e.isPosition,
posMasterNo:
e.orgShortname +
(e.posMasterNoPrefix != null ? e.posMasterNoPrefix : "") +
" " +
e.posMasterNo +
(e.posMasterNoSuffix != null ? e.posMasterNoSuffix : ""),
posMasterNo: formatPosmasterNo(
e.orgShortname,
e.posMasterNoPrefix,
e.posMasterNo.toString(),
e.posMasterNoSuffix
),
positionName: e.positionName,
posTypeName: e.posTypeName,
posLevelName: e.posLevelName,

View file

@ -77,7 +77,7 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format(val, row) {
return findPosMasterNoOld(row);
return row.positionNumberOld ?? "-";
},
},
{

View file

@ -5,6 +5,7 @@ import { useQuasar } from "quasar";
import { useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { useStructureTree } from "@/stores/structureTree";
import { formatPosmasterNo } from "@/utils/function";
import http from "@/plugins/http";
import config from "@/app.config";
@ -74,7 +75,12 @@ const columns = ref<QTableProps["columns"]>([
sortable: true,
field: "posMasterNo",
format(val, row) {
return `${row.orgShortname} ${row.posMasterNo}`;
return formatPosmasterNo(
row.orgShortname,
row.posMasterNoPrefix,
row.posMasterNo.toString(),
row.posMasterNoSuffix
);
},
headerStyle: "font-size: 14px",
style: "font-size: 14px",

View file

@ -50,7 +50,7 @@ const id = ref<string>(route.params.id as string); // id รายการป
const isLoadView = ref<boolean>(false); // view
const modalHistory = ref<boolean>(false); // popup
//
const formCommand = reactive<FormCommand>({
const formCommand = reactive({
elementaryFullName: "", //
elementaryPosition: "", //
abovelevelFullname: "", // 1

View file

@ -58,6 +58,7 @@ export const useEvalutuonStore = defineStore("EvalutuonStore", () => {
const dataList: EvaluateList[] = data.map(
(data: EvaluateRes) =>
({
...data,
id: data.id,
citizenId: data.citizenId,
fullName: data.fullName,
@ -133,7 +134,7 @@ export const useEvalutuonStore = defineStore("EvalutuonStore", () => {
align: "left",
label: "เลขที่ตำแหน่ง",
sortable: true,
field: "positionNumber",
field: "posNo",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},

View file

@ -351,7 +351,7 @@ onMounted(async () => {
</div>
</div>
<div v-else>
{{ !col.value ? "-" : col.value }}
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>

View file

@ -5,6 +5,7 @@ import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
import { useSalaryListSDataStore } from "@/modules/13_salary/store/SalaryListsStore";
import { usePagination } from "@/composables/usePagination";
import { formatPosmasterNo } from "@/utils/function";
import config from "@/app.config";
import http from "@/plugins/http";
@ -72,9 +73,12 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format(val, row) {
return row.orgShortName && row.posMasterNo
? `${row.orgShortName} ${row.posMasterNo}`
: "-";
return formatPosmasterNo(
row.orgShortName,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
);
},
},
{

View file

@ -19,6 +19,7 @@ import DialogMoveLevel from "@/modules/13_salary/components/04_salaryLists/Dialo
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
import { useSalaryListSDataStore } from "@/modules/13_salary/store/SalaryListsStore";
import { formatPosmasterNo } from "@/utils/function";
/** use*/
const $q = useQuasar();
@ -87,9 +88,12 @@ const baseColumns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format(val, row) {
return row.orgShortName && row.posMasterNo
? `${row.orgShortName} ${row.posMasterNo}`
: "-";
return formatPosmasterNo(
row.orgShortName,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
);
},
},
{

View file

@ -19,6 +19,7 @@ import DialogInfo from "@/modules/13_salary/components/DialogInfoMain.vue";
/** importStore*/
import { useCounterMixin } from "@/stores/mixin";
import { useSalaryListSDataStore } from "@/modules/13_salary/store/SalaryListsStore";
import { formatPosmasterNo } from "@/utils/function";
import http from "@/plugins/http";
import config from "@/app.config";
@ -98,9 +99,12 @@ const columns = ref<QTableColumn[]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format(val, row) {
return row.orgShortName && row.posMasterNo
? `${row.orgShortName} ${row.posMasterNo}`
: "-";
return formatPosmasterNo(
row.orgShortName,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
);
},
},
{

View file

@ -5,6 +5,7 @@ import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
import { useSalaryEmployeeListSDataStore } from "@/modules/13_salary/store/SalaryEmployeeListsStore";
import { usePagination } from "@/composables/usePagination";
import { formatPosmasterNo } from "@/utils/function";
import config from "@/app.config";
import http from "@/plugins/http";
@ -71,9 +72,12 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format(val, row) {
return row.orgShortName && row.posMasterNo
? `${row.orgShortName} ${row.posMasterNo}`
: "-";
return formatPosmasterNo(
row.orgShortName,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
);
},
},
{

View file

@ -5,6 +5,7 @@ import { useQuasar } from "quasar";
import { checkPermission } from "@/utils/permissions";
import { useCounterMixin } from "@/stores/mixin";
import { useSalaryEmployeeListSDataStore } from "@/modules/13_salary/store/SalaryEmployeeListsStore";
import { formatPosmasterNo } from "@/utils/function";
import config from "@/app.config";
import http from "@/plugins/http";
@ -84,6 +85,14 @@ const baseColumns = ref<QTableProps["columns"]>([
field: "orgShortName",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format(val, row) {
return formatPosmasterNo(
row.orgShortName,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
);
},
},
{
name: "position",

View file

@ -6,6 +6,7 @@ import { checkPermission } from "@/utils/permissions";
import { useCounterMixin } from "@/stores/mixin";
import { useSalaryEmployeeListSDataStore } from "@/modules/13_salary/store/SalaryEmployeeListsStore";
import { formatPosmasterNo } from "@/utils/function";
import http from "@/plugins/http";
import config from "@/app.config";
@ -98,9 +99,12 @@ const columns = ref<QTableColumn[]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
format(val, row) {
return row.orgShortName && row.posMasterNo
? `${row.orgShortName} ${row.posMasterNo}`
: "-";
return formatPosmasterNo(
row.orgShortName,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
);
},
},

View file

@ -5,6 +5,7 @@ import { useQuasar } from "quasar";
import { useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { usePositionEmp } from "@/modules/16_positionEmployee/store/organizational";
import { formatPosmasterNo } from "@/utils/function";
import http from "@/plugins/http";
import config from "@/app.config";
@ -135,11 +136,12 @@ async function fetchTable() {
const data = res.data.result.data;
const list = data.map((e: PosMaster) => ({
...e,
posMasterNo:
(e.orgShortname !== null ? e.orgShortname : "") +
(e.posMasterNoPrefix ? e.posMasterNoPrefix : "") +
(e.posMasterNo !== null ? e.posMasterNo : "") +
(e.posMasterNoSuffix !== null ? e.posMasterNoPrefix : ""),
posMasterNo: formatPosmasterNo(
e.orgShortname,
e.posMasterNoPrefix,
e.posMasterNo.toString(),
e.posMasterNoSuffix ?? ""
),
}));
rows.value = list;
})
@ -157,7 +159,7 @@ function updatePagination(newPagination: NewPagination) {
reqMaster.page = 1;
}
/**
/**
funcion นหาขอมลใน Table
*/
async function filterKeyword() {

View file

@ -5,7 +5,7 @@ import { useQuasar } from "quasar";
import { usePositionEmp } from "@/modules/16_positionEmployee/store/organizational";
import { useCounterMixin } from "@/stores/mixin";
import { checkPermission } from "@/utils/permissions";
import { updateCurrentPage } from "@/utils/function";
import { updateCurrentPage, formatPosmasterNo } from "@/utils/function";
import genreport from "@/plugins/genreportxlsx";
import config from "@/app.config";
import http from "@/plugins/http";
@ -145,6 +145,13 @@ const columns = ref<QTableProps["columns"]>([
label: "ตำแหน่งเลขที่",
sortable: false,
field: "posMasterNo",
format: (val: any, row: any) =>
formatPosmasterNo(
row.orgShortname,
row.posMasterNoPrefix,
row.posMasterNoMain,
row.posMasterNoSuffix
),
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},

View file

@ -80,6 +80,10 @@ export const usePositionEmp = defineStore("positionEmpStore", () => {
posLevelName: e.isSit ? e.profilePoslevel : e.posLevelName,
posExecutiveName: e.posExecutiveName,
isSit: e.isSit,
orgShortname: e.orgShortname,
posMasterNoPrefix: e.posMasterNoPrefix,
posMasterNoMain: e.posMasterNo,
posMasterNoSuffix: e.posMasterNoSuffix,
}));
return newPosMaster;

View file

@ -6,6 +6,7 @@ import { storeToRefs } from "pinia";
import { useCounterMixin } from "@/stores/mixin";
import { useRoute } from "vue-router";
import { useStructureTree } from "@/stores/structureTree";
import { formatPosmasterNo } from "@/utils/function";
import http from "@/plugins/http";
import config from "@/app.config";
@ -71,8 +72,18 @@ const columns = ref<QTableProps["columns"]>([
field: "posMasterNo",
format(val, row) {
return row.isSit
? `${row.orgShortname} ${row.posMasterNo}(นั่งทับตำแหน่ง)`
: `${row.orgShortname} ${row.posMasterNo}`;
? formatPosmasterNo(
row.orgShortname,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
) + " (นั่งทับตำแหน่ง)"
: formatPosmasterNo(
row.orgShortname,
row.posMasterNoPrefix,
row.posMasterNo,
row.posMasterNoSuffix
);
},
headerStyle: "font-size: 14px",
style: "font-size: 14px",
@ -207,7 +218,7 @@ async function fetchDataTree() {
function onSelectedOrgTree(data: OrgTree) {
orgTreeId.value = data.orgTreeId;
orgLevel.value = data.orgLevel;
fetchDataTable();
onSearchDataTable();
}
/**

View file

@ -50,7 +50,7 @@ const modal = defineModel<boolean>("modal", { required: true });
let reqMaster = defineModel<FilterMaster>("reqMaster", { required: true });
const totalPage = defineModel<number>("totalPage", { required: true });
const nodeTree = defineModel<OrgTree[]>("nodeTree", { required: true });
const columns = defineModel<QTableProps[]>("columns", {});
const columns = defineModel<QTableProps["columns"]>("columns", {});
const rows = defineModel<PosMaster2[]>("rows", { required: true });
const props = defineProps({
fetchDataTree: {

View file

@ -5,6 +5,7 @@ import { useQuasar } from "quasar";
import { useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { usePositionEmp } from "@/modules/20_positionTemp/store/organizational";
import { formatPosmasterNo } from "@/utils/function";
import http from "@/plugins/http";
import config from "@/app.config";
@ -135,11 +136,12 @@ async function fetchTable() {
const data = res.data.result.data;
const list = data.map((e: PosMaster) => ({
...e,
posMasterNo:
(e.orgShortname !== null ? e.orgShortname : "") +
(e.posMasterNoPrefix ? e.posMasterNoPrefix : "") +
(e.posMasterNo !== null ? e.posMasterNo : "") +
(e.posMasterNoSuffix !== null ? e.posMasterNoPrefix : ""),
posMasterNo: formatPosmasterNo(
e.orgShortname,
e.posMasterNoPrefix,
e.posMasterNo.toString(),
e.posMasterNoSuffix ?? ""
),
}));
rows.value = list;
})

View file

@ -719,7 +719,7 @@ watch(
<DialogMovePos
v-model:modal="modalDialogMMove"
v-model:nodeTree="nodeTree"
v-model:columns="columns as QTableProps[]"
v-model:columns="columns"
v-model:rows="posMaster"
v-model:totalPage="totalPage"
v-model:reqMaster="reqMaster"

View file

@ -94,3 +94,18 @@ export function validateFileSize(
return `ขนาดไฟล์ไม่เกิน ${maxSizeMB}MB`;
}
export function formatPosmasterNo(
orgShortname: string,
posMasterNoPrefix: string,
posMasterNo: string,
posMasterNoSuffix: string
) {
if (!orgShortname || !posMasterNo) return "";
const prefix = posMasterNoPrefix ? `${posMasterNoPrefix} ` : "";
const suffix = posMasterNoSuffix ? ` ${posMasterNoSuffix}` : "";
return `${orgShortname} ${prefix}${posMasterNo}${suffix}`.trim();
}