Merge branch 'develop' into dev
Some checks failed
Build & Deploy on Dev / build (push) Failing after 2m38s

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2026-02-06 11:01:54 +07:00
commit aa90e8b9db
8 changed files with 65 additions and 9 deletions

View file

@ -26,6 +26,7 @@ export default {
placementPass: () => `${placement}/pass`, placementPass: () => `${placement}/pass`,
placementDefermentInfo: (id: string) => `${placement}/pass/deferment/${id}`, placementDefermentInfo: (id: string) => `${placement}/pass/deferment/${id}`,
placementDisclaimInfo: (id: string) => `${placement}/pass/disclaim/${id}`, placementDisclaimInfo: (id: string) => `${placement}/pass/disclaim/${id}`,
placementUpdatePass: `${placement}/pass/update-status`,
//personal //personal
placementPersonalId: (personalId: string) => placementPersonalId: (personalId: string) =>

View file

@ -589,10 +589,11 @@ onMounted(() => {
option-label="name" option-label="name"
option-value="name" option-value="name"
v-model="formData.prefix" v-model="formData.prefix"
clearable
class="inputgreen" class="inputgreen"
:options="store.Ops.prefixOps" :options="store.Ops.prefixOps"
:label="dataLabel.prefix" :label="dataLabel.prefix"
:rules="[(val: string) => !!val || `${'กรุณาเลือก คำนำหน้าชื่อ'}`]" :rules="[(val: string) => !!formData.rank || !!formData.prefix || `${'กรุณาเลือกคำนำหน้าชื่อ หรือยศ'}`]"
@filter="(inputValue: string, @filter="(inputValue: string,
doneFn: Function) => filterSelector(inputValue, doneFn, 'prefixOps' doneFn: Function) => filterSelector(inputValue, doneFn, 'prefixOps'
)" )"
@ -613,6 +614,7 @@ onMounted(() => {
input-debounce="0" input-debounce="0"
option-label="name" option-label="name"
option-value="name" option-value="name"
:rules="[(val: string) => !!formData.rank || !!formData.prefix || `${'กรุณาเลือกคำนำหน้าชื่อ หรือยศ'}`]"
v-model="formData.rank" v-model="formData.rank"
class="inputgreen" class="inputgreen"
:options="store.Ops.rankOps" :options="store.Ops.rankOps"

View file

@ -553,7 +553,6 @@ onMounted(async () => {
</q-form> </q-form>
<div class="col-12"> <div class="col-12">
{{ typeEmp }}
<!-- v-if="typeEmp != 'employee'" --> <!-- v-if="typeEmp != 'employee'" -->
<Workflow <Workflow
v-model:is-check-data="isCheckData" v-model:is-check-data="isCheckData"

View file

@ -22,6 +22,7 @@ import type {
DataOptionSys, DataOptionSys,
} from "@/modules/04_registryPerson/interface/index/Main"; } from "@/modules/04_registryPerson/interface/index/Main";
import type { ResponseObject } from "@/modules/04_registryPerson/interface/response/Profile"; import type { ResponseObject } from "@/modules/04_registryPerson/interface/response/Profile";
import { s } from "@fullcalendar/core/internal-common";
/** importComponents*/ /** importComponents*/
const CardNotPermission = defineAsyncComponent( const CardNotPermission = defineAsyncComponent(
@ -178,6 +179,9 @@ function imageActive(n: any) {
* @param file ไฟล * @param file ไฟล
*/ */
function resizeImage(file: File): Promise<File> { function resizeImage(file: File): Promise<File> {
if (!file) {
return Promise.reject("No file provided");
}
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const img = new Image(); const img = new Image();
const reader = new FileReader(); const reader = new FileReader();
@ -240,9 +244,9 @@ const newProfileFile = ref<any>(null);
/** ฟังก์ชันอัปโหลด*/ /** ฟังก์ชันอัปโหลด*/
async function uploadImg() { async function uploadImg() {
showLoader();
newProfileFile.value = await resizeImage(profileFile.value); newProfileFile.value = await resizeImage(profileFile.value);
closeImage(); closeImage();
showLoader();
await http await http
.post(config.API.orgProfileAvatarbyType(empType.value), { .post(config.API.orgProfileAvatarbyType(empType.value), {
profileId: empType.value == "" ? profileId.value : undefined, profileId: empType.value == "" ? profileId.value : undefined,

View file

@ -920,6 +920,28 @@ function onRefCommand(data: any) {
// commandId.value = 'bdf9da91-ba45-497a-a2b7-cc49e2446d97'; // // commandId.value = 'bdf9da91-ba45-497a-a2b7-cc49e2446d97'; //
} }
function onUpdateStatus(id: string) {
dialogConfirm(
$q,
async () => {
showLoader();
try {
await http.post(config.API.placementUpdatePass, {
personalId: id,
});
await success($q, "บันทึกสำเร็จ");
await getTable();
} catch (error) {
messageError($q, error);
} finally {
hideLoader();
}
},
"ยืนยันการส่งบรรจุ",
"ต้องการยืนยันการส่งบรรจุนี้ใช่หรือไม่ ?"
);
}
onMounted(async () => { onMounted(async () => {
await getWorkFlow(); await getWorkFlow();
await getTable(); await getTable();
@ -982,6 +1004,7 @@ onMounted(async () => {
</q-item-section> </q-item-section>
<q-item-section>รายละเอยด</q-item-section> <q-item-section>รายละเอยด</q-item-section>
</q-item> </q-item>
<q-item <q-item
v-if=" v-if="
props.row.nodeName !== null && props.row.nodeName !== null &&
@ -1011,6 +1034,7 @@ onMounted(async () => {
</q-item-section> </q-item-section>
<q-item-section>เลอกวนรายงานต</q-item-section> <q-item-section>เลอกวนรายงานต</q-item-section>
</q-item> </q-item>
<q-item <q-item
v-if=" v-if="
roleAdmin && roleAdmin &&
@ -1035,6 +1059,7 @@ onMounted(async () => {
</q-item-section> </q-item-section>
<q-item-section>นตำแหน</q-item-section> <q-item-section>นตำแหน</q-item-section>
</q-item> </q-item>
<q-item <q-item
v-if=" v-if="
props.row.bmaOfficer !== 'บุคคลภายนอก' && props.row.bmaOfficer !== 'บุคคลภายนอก' &&
@ -1087,6 +1112,26 @@ onMounted(async () => {
<q-item-section>เลอกหนวยงานทบการบรรจ</q-item-section> <q-item-section>เลอกหนวยงานทบการบรรจ</q-item-section>
</q-item> </q-item>
<q-item
v-if="checkPermission($route)?.attrOwnership == 'OWNER'"
clickable
v-close-popup
@click="onUpdateStatus(props.row.personalId)"
>
<q-item-section
style="min-width: 0px"
avatar
class="q-py-sm"
>
<q-icon
color="primary"
size="xs"
name="mdi-account-arrow-right-outline"
/>
</q-item-section>
<q-item-section>บรรจแล</q-item-section>
</q-item>
<!-- <q-item <!-- <q-item
v-if=" v-if="
props.row.bmaOfficer !== 'บุคคลภายนอก' && props.row.bmaOfficer !== 'บุคคลภายนอก' &&

View file

@ -328,6 +328,7 @@ watch(
map-options map-options
hide-selected hide-selected
fill-input fill-input
clearable
hide-bottom-space hide-bottom-space
input-debounce="0" input-debounce="0"
option-label="name" option-label="name"
@ -336,7 +337,7 @@ watch(
class="inputgreen" class="inputgreen"
:options="prefixOps" :options="prefixOps"
label="คำนำหน้าชื่อ" label="คำนำหน้าชื่อ"
:rules="[(val: string) => !!val || `${'กรุณาเลือก คำนำหน้าชื่อ'}`]" :rules="[(val: string) => !!formData.rank || !!formData.prefix || `${'กรุณาเลือกคำนำหน้าชื่อ หรือยศ'}`]"
@filter="(inputValue: string, @filter="(inputValue: string,
doneFn: Function) => filterSelector(inputValue, doneFn, 'prefix' doneFn: Function) => filterSelector(inputValue, doneFn, 'prefix'
)" )"
@ -360,6 +361,7 @@ watch(
v-model="formData.rank" v-model="formData.rank"
class="inputgreen" class="inputgreen"
:options="rankOps" :options="rankOps"
:rules="[(val: string) => !!formData.rank || !!formData.prefix || `${'กรุณาเลือกคำนำหน้าชื่อ หรือยศ'}`]"
label="ยศ" label="ยศ"
@filter="(inputValue: string, @filter="(inputValue: string,
doneFn: Function) => filterSelector(inputValue, doneFn, 'rank' doneFn: Function) => filterSelector(inputValue, doneFn, 'rank'

View file

@ -299,10 +299,10 @@ function clickList(id: string, isData: boolean = false) {
showLoader(); showLoader();
const url = const url =
numpage.value === 1 numpage.value === 1
? config.API.kpiPlan + `/edit` ? config.API.kpiPlan + `/edit-indicator`
: numpage.value === 2 : numpage.value === 2
? config.API.kpiRole + `/edit` ? config.API.kpiRole + `/edit-indicator`
: config.API.kpiSpecial + `/edit`; : config.API.kpiSpecial + `/edit-indicator`;
http http
.get(`${url}/${id}`) .get(`${url}/${id}`)
.then((res) => { .then((res) => {

View file

@ -4,6 +4,7 @@ import { useRoute, useRouter } from "vue-router";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import genReport from "@/plugins/genreport"; import genReport from "@/plugins/genreport";
import axios from "axios"; import axios from "axios";
import { checkPermission } from "@/utils/permissions";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
@ -676,7 +677,8 @@ onUnmounted(() => {
<q-btn <q-btn
v-if=" v-if="
store.rolePerson == 'USER' && store.rolePerson == 'USER' &&
store.dataEvaluation.evaluationStatus == 'NEW' store.dataEvaluation.evaluationStatus == 'NEW' &&
checkPermission($route)?.attrIsUpdate
" "
:disabled=" :disabled="
((store.dataEvaluation.posTypeName != 'อำนวยการ' || ((store.dataEvaluation.posTypeName != 'อำนวยการ' ||
@ -703,7 +705,8 @@ onUnmounted(() => {
store.rolePerson === 'USER' && store.rolePerson === 'USER' &&
store.tabMain === '2' && store.tabMain === '2' &&
store.dataEvaluation.evaluationStatus === 'APPROVE' && store.dataEvaluation.evaluationStatus === 'APPROVE' &&
store.dataEvaluation.evaluationReqEdit !== 'EVALUATOR' store.dataEvaluation.evaluationReqEdit !== 'EVALUATOR' &&
checkPermission($route)?.attrIsUpdate
" "
unelevated unelevated
round round