Merge branch 'develop' into dev
All checks were successful
Build & Deploy on Dev / build (push) Successful in 3m2s
All checks were successful
Build & Deploy on Dev / build (push) Successful in 3m2s
This commit is contained in:
commit
32dfa12ef1
5 changed files with 228 additions and 43 deletions
|
|
@ -178,6 +178,8 @@ export default {
|
|||
`${workflow}/keycloak/isofficer/${type}`,
|
||||
|
||||
positionCondition: `${orgPos}/master/position-condition`,
|
||||
positionConditionEmp: `${organization}/employee/pos/master/position-condition`,
|
||||
|
||||
|
||||
keycloakLogSSO: `${organization}/keycloak/log/sso`,
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<script setup lang="ts">
|
||||
import { ref, reactive, watch } from "vue";
|
||||
import { ref, reactive, watch, computed } from "vue";
|
||||
import { useQuasar } from "quasar";
|
||||
|
||||
import http from "@/plugins/http";
|
||||
|
|
@ -63,6 +63,16 @@ const props = defineProps({
|
|||
positionHolderInfo: { type: Object, default: () => ({}) },
|
||||
});
|
||||
|
||||
const titlePopup = computed(() => {
|
||||
return props.actionType === "ADD"
|
||||
? "เพิ่มอัตรากำลัง"
|
||||
: props.actionType === "EDIT"
|
||||
? "แก้ไขอัตรากำลัง"
|
||||
: props.actionType === "COPY"
|
||||
? "คัดลอกอัตรากำลัง"
|
||||
: "";
|
||||
});
|
||||
|
||||
const isReadonly = ref<boolean>(false); // อ่านได้อย่างเดียว
|
||||
const isEdit = ref<boolean>(false); //การแก้ไข
|
||||
const modalAdd = ref<boolean>(false); //เพิ่ม แก้้ไขตำแหน่ง
|
||||
|
|
@ -582,12 +592,7 @@ watch(
|
|||
<template>
|
||||
<q-dialog v-model="props.modal" persistent>
|
||||
<q-card style="min-width: 80vw">
|
||||
<DialogHeader
|
||||
:tittle="
|
||||
props.actionType === 'ADD' ? 'เพิ่มอัตรากำลัง' : 'แก้ไขอัตรากำลัง'
|
||||
"
|
||||
:close="close"
|
||||
/>
|
||||
<DialogHeader :tittle="titlePopup" :close="close" />
|
||||
<q-separator />
|
||||
<q-form greedy @submit.prevent @validation-success="onSubmit">
|
||||
<q-card-section class="q-pa-sm fixed-height">
|
||||
|
|
|
|||
118
src/modules/16_positionEmployee/components/DialogCondition.vue
Normal file
118
src/modules/16_positionEmployee/components/DialogCondition.vue
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
<script setup lang="ts">
|
||||
import { reactive, watch } from "vue";
|
||||
import { useQuasar } from "quasar";
|
||||
|
||||
import { useCounterMixin } from "@/stores/mixin";
|
||||
import config from "@/app.config";
|
||||
import http from "@/plugins/http";
|
||||
|
||||
import type { PropType } from "vue";
|
||||
import type { DataPositionCondition } from "@/modules/19_condition/interface/response/Main";
|
||||
import type { FormPositionCondition } from "@/modules/19_condition/interface/request/Main";
|
||||
|
||||
import DialogHeader from "@/components/DialogHeader.vue";
|
||||
|
||||
const $q = useQuasar();
|
||||
const { showLoader, hideLoader, messageError, success, dialogConfirm } =
|
||||
useCounterMixin();
|
||||
|
||||
const modal = defineModel<boolean>("modal", { required: true });
|
||||
const props = defineProps({
|
||||
fetchData: { type: Function, required: true },
|
||||
dataCondition: {
|
||||
type: Object as PropType<DataPositionCondition>,
|
||||
default: () => ({}),
|
||||
},
|
||||
});
|
||||
|
||||
const formData = reactive<FormPositionCondition>({
|
||||
isCondition: false,
|
||||
conditionReason: "",
|
||||
});
|
||||
|
||||
function onCloseDialog() {
|
||||
modal.value = false;
|
||||
formData.isCondition = false;
|
||||
formData.conditionReason = "";
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
dialogConfirm($q, async () => {
|
||||
showLoader();
|
||||
formData.conditionReason =
|
||||
formData.isCondition === false ? "" : formData.conditionReason; // ถ้าไม่เลือกติดเงื่อนไขให้หมายเหตุเป็นค่าว่าง
|
||||
await http
|
||||
.put(
|
||||
config.API.positionConditionEmp + `/${props?.dataCondition?.id}`,
|
||||
formData
|
||||
)
|
||||
.then(async () => {
|
||||
onCloseDialog();
|
||||
await props.fetchData?.();
|
||||
success($q, "บันทึกข้อมูลสำเร็จ");
|
||||
})
|
||||
.catch((err) => {
|
||||
messageError($q, err);
|
||||
})
|
||||
.finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
watch(modal, () => {
|
||||
if (modal.value) {
|
||||
if (props.dataCondition) {
|
||||
formData.isCondition = props.dataCondition.isCondition;
|
||||
formData.conditionReason = props.dataCondition.conditionReason;
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<q-dialog v-model="modal" persistent>
|
||||
<q-card style="min-width: 30vw">
|
||||
<q-form greedy @submit.prevent @validation-success="onSubmit">
|
||||
<DialogHeader
|
||||
:tittle="`จัดการตำแหน่งติดเงื่อนไข`"
|
||||
:close="onCloseDialog"
|
||||
/>
|
||||
<q-separator />
|
||||
|
||||
<q-card-section class="q-pt-none">
|
||||
<div class="row q--col-gutter-sm">
|
||||
<div class="col-12">
|
||||
<q-checkbox
|
||||
color="primary"
|
||||
keep-color
|
||||
v-model="formData.isCondition"
|
||||
label="ตำแหน่งติดเงื่อนไข
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<q-input
|
||||
dense
|
||||
outlined
|
||||
v-model="formData.conditionReason"
|
||||
label="หมายเหตุ"
|
||||
type="textarea"
|
||||
class="inputgreen"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</q-card-section>
|
||||
|
||||
<q-separator />
|
||||
<q-card-actions align="right">
|
||||
<q-btn label="บันทึก" color="secondary" type="submit"
|
||||
><q-tooltip>บันทึกข้อมูล</q-tooltip></q-btn
|
||||
>
|
||||
</q-card-actions>
|
||||
</q-form>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<script setup lang="ts">
|
||||
import { ref, reactive, watch } from "vue";
|
||||
import { ref, reactive, watch, computed } from "vue";
|
||||
import { useQuasar } from "quasar";
|
||||
|
||||
import { useCounterMixin } from "@/stores/mixin";
|
||||
|
|
@ -49,6 +49,16 @@ const props = defineProps({
|
|||
shortName: { type: String, required: true },
|
||||
});
|
||||
|
||||
const titlePopup = computed(() => {
|
||||
return props.actionType === "ADD"
|
||||
? "เพิ่มอัตรากำลัง"
|
||||
: props.actionType === "EDIT"
|
||||
? "แก้ไขอัตรากำลัง"
|
||||
: props.actionType === "COPY"
|
||||
? "คัดลอกอัตรากำลัง"
|
||||
: "";
|
||||
});
|
||||
|
||||
const modalAdd = ref<boolean>(false); //เพิ่มข้อมูลตำแหน่ง
|
||||
const isEdit = ref<boolean>(false); //แก้ไขข้อมูล
|
||||
const isReadonly = ref<boolean>(false); // อ่านได้อย่างเดียว
|
||||
|
|
@ -192,10 +202,10 @@ function onSubmit() {
|
|||
};
|
||||
try {
|
||||
const url =
|
||||
props.actionType === "ADD"
|
||||
props.actionType === "ADD" || props.actionType === "COPY"
|
||||
? config.API.orgPosMasterEmp
|
||||
: config.API.orgPosMasterByIdEmp(props.rowId);
|
||||
await http[props.actionType === "ADD" ? "post" : "put"](url, body);
|
||||
await http[props.actionType === "ADD" || props.actionType === "COPY" ? "post" : "put"](url, body);
|
||||
await props.getSummary?.();
|
||||
await props.fetchDataTable?.(
|
||||
reqMaster.value.id,
|
||||
|
|
@ -349,12 +359,7 @@ watch(
|
|||
<template>
|
||||
<q-dialog v-model="props.modal" persistent>
|
||||
<q-card style="min-width: 80vw">
|
||||
<DialogHeader
|
||||
:tittle="
|
||||
props.actionType === 'ADD' ? 'เพิ่มอัตรากำลัง' : 'แก้ไขอัตรากำลัง'
|
||||
"
|
||||
:close="close"
|
||||
/>
|
||||
<DialogHeader :tittle="titlePopup" :close="close" />
|
||||
<q-separator />
|
||||
<q-form greedy @submit.prevent @validation-success="onSubmit">
|
||||
<q-card-section class="q-pa-sm fixed-height">
|
||||
|
|
|
|||
|
|
@ -10,9 +10,7 @@ import genreport from "@/plugins/genreportxlsx";
|
|||
import config from "@/app.config";
|
||||
import http from "@/plugins/http";
|
||||
|
||||
/**
|
||||
* importType
|
||||
*/
|
||||
/** importType*/
|
||||
import type { QTableProps } from "quasar";
|
||||
import type {
|
||||
ListMenu,
|
||||
|
|
@ -22,10 +20,9 @@ import type {
|
|||
import type { FilterMaster } from "@/modules/16_positionEmployee/interface/request/organizational";
|
||||
import type { PosMaster2 } from "@/modules/16_positionEmployee/interface/response/organizational";
|
||||
import type { DataPosition } from "@/modules/16_positionEmployee/interface/index/organizational";
|
||||
import type { DataPositionCondition } from "@/modules/19_condition/interface/response/Main";
|
||||
|
||||
/**
|
||||
* importComponents
|
||||
*/
|
||||
/** importComponents*/
|
||||
import DialogFormPosotion from "@/modules/16_positionEmployee/components/DialogFormPosition.vue";
|
||||
import DialogPositionDetail from "@/modules/16_positionEmployee/components/DialogPositionDetail.vue";
|
||||
import DialogSort from "@/modules/16_positionEmployee/components/DialogSortPosition.vue";
|
||||
|
|
@ -34,18 +31,15 @@ import DialogHistoryPos from "@/modules/16_positionEmployee/components/DialogHis
|
|||
import DialogSelectPerson from "@/modules/16_positionEmployee/components/DialogSelectPerson.vue";
|
||||
import DialogSuccession from "@/modules/16_positionEmployee/components/DialogSuccession.vue";
|
||||
import PopupPersonal from "@/components/Dialogs/PopupPersonalNew.vue";
|
||||
import DialogCondition from "@/modules/16_positionEmployee/components/DialogCondition.vue";
|
||||
|
||||
/**
|
||||
* ues
|
||||
*/
|
||||
/** ues*/
|
||||
const $q = useQuasar();
|
||||
const store = usePositionEmp();
|
||||
const { showLoader, hideLoader, messageError, success, dialogRemove } =
|
||||
useCounterMixin();
|
||||
|
||||
/**
|
||||
* prosp
|
||||
*/
|
||||
/** prosp*/
|
||||
const nodeTree = defineModel<any>("nodeTree", { required: true });
|
||||
const orgLevel = defineModel<number>("orgLevel", { required: true });
|
||||
const treeId = defineModel<string>("treeId", { required: true });
|
||||
|
|
@ -72,9 +66,7 @@ const props = defineProps({
|
|||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* modal popup
|
||||
*/
|
||||
/** modal popup*/
|
||||
const modalPerson = ref<boolean>(false); //ตัวแปร popup ข้อมูลทะเบียนประวัติ
|
||||
const personalId = ref<string>(""); //ตัวแปร id ข้อมูลทะเบียนประวัติ
|
||||
const dialogDetail = ref<boolean>(false); // รายละเอียดตำแหน่ง
|
||||
|
|
@ -84,6 +76,8 @@ const modalSort = ref<boolean>(false); // จัดลำดับ
|
|||
const modalDialogMMove = ref<boolean>(false); // ย้ายตำแหน่ง
|
||||
const modalDialogSuccession = ref<boolean>(false); // สืบทอดตำแหน่ง
|
||||
const modalDialogHistoryPos = ref<boolean>(false); // ประวัติตำแหน่ง
|
||||
const modalCondition = ref<boolean>(false); // จัดการตำแหน่งติดเงื่อนไข
|
||||
const dataCondition = ref<DataPositionCondition>();
|
||||
|
||||
const rowId = ref<string>("");
|
||||
const actionType = ref<string>("");
|
||||
|
|
@ -101,6 +95,18 @@ const listMenu = ref<ListMenu[]>([
|
|||
type: "EDIT",
|
||||
color: "edit",
|
||||
},
|
||||
{
|
||||
label: "คัดลอก",
|
||||
icon: "content_copy",
|
||||
type: "COPY",
|
||||
color: "blue-6",
|
||||
},
|
||||
{
|
||||
label: "จัดการตำแหน่งติดเงื่อนไข",
|
||||
icon: "mdi-account-alert",
|
||||
type: "CONDITION",
|
||||
color: "deep-orange",
|
||||
},
|
||||
{
|
||||
label: "ลบ",
|
||||
icon: "delete",
|
||||
|
|
@ -229,9 +235,7 @@ function onClickDelete(id: string) {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* fdunction จัดลำดับตำแหน่ง
|
||||
*/
|
||||
/** function เปิด popup จัดลำดับตำแหน่ง*/
|
||||
function onClickSort() {
|
||||
modalSort.value = true;
|
||||
}
|
||||
|
|
@ -274,9 +278,7 @@ function openSelectPerson(data: DataPosition[]) {
|
|||
dataDetailPos.value = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* ลบคนครอง
|
||||
*/
|
||||
/** function ลบคนครอง*/
|
||||
function removePerson(id: string) {
|
||||
dialogRemove(
|
||||
$q,
|
||||
|
|
@ -307,15 +309,14 @@ function removePerson(id: string) {
|
|||
|
||||
/**
|
||||
* function openPopup สืบทอดตำแหน่ง
|
||||
* @param id ที่ต้องการ
|
||||
*/
|
||||
function onClickInherit(id: string) {
|
||||
modalDialogSuccession.value = !modalDialogSuccession.value;
|
||||
rowId.value = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* ดึงข้อมูลสถิติจำนวนด้านบน
|
||||
*/
|
||||
/** ดึงข้อมูลสถิติจำนวนด้านบน*/
|
||||
function getSummary() {
|
||||
showLoader();
|
||||
http
|
||||
|
|
@ -348,9 +349,13 @@ function getSummary() {
|
|||
});
|
||||
}
|
||||
|
||||
/** function DownloadReport*/
|
||||
/**
|
||||
* function DownloadReport
|
||||
* @param val ประเภทเอกสารที่ต้องการดาวน์โหลด
|
||||
* @param name ชื่อเอกสารที่ต้องการดาวน์โหลด
|
||||
*
|
||||
*/
|
||||
async function onClickDownloadReport(val: string, name: string) {
|
||||
// รอ API
|
||||
showLoader();
|
||||
await http
|
||||
.get(config.API.orgReport(val) + `/${treeId.value}`)
|
||||
|
|
@ -373,6 +378,34 @@ const pagination = ref({
|
|||
rowsPerPage: reqMaster.value.pageSize,
|
||||
});
|
||||
|
||||
/**
|
||||
* function เปิด popup จัดการตำแหน่งติดเงื่อนไข
|
||||
* @param data ข้อมูลตำแหน่ง
|
||||
*/
|
||||
function onClickCodition(data: any) {
|
||||
dataCondition.value = {
|
||||
conditionReason: data.conditionReason
|
||||
? data.conditionReason.replace(/ /g, " \n")
|
||||
: "",
|
||||
id: data.id,
|
||||
isCondition: data.isCondition,
|
||||
orgShortname: data.orgShortname,
|
||||
posMasterNo: Number(data.posMasterNo),
|
||||
posMasterNoPrefix: data.posMasterNoPrefix,
|
||||
posMasterNoSuffix: data.posMasterNoSuffix,
|
||||
profilePosition: data.profilePosition,
|
||||
profilePoslevel: data.profilePoslevel,
|
||||
profilePostype: data.profilePostype,
|
||||
positions: [],
|
||||
};
|
||||
modalCondition.value = true;
|
||||
}
|
||||
|
||||
/** function fetchข้อมูลใหม่*/
|
||||
async function fetchDataCondition() {
|
||||
props.fetchDataTable?.(reqMaster.value.id, reqMaster.value.type, false);
|
||||
}
|
||||
|
||||
watch(
|
||||
() => modalDialogMMove.value,
|
||||
() => {
|
||||
|
|
@ -585,6 +618,10 @@ watch(
|
|||
? onClickHistoryPos(props.row.id)
|
||||
: item.type === 'INHERIT'
|
||||
? onClickInherit(props.row.id)
|
||||
: item.type === 'COPY'
|
||||
? onClickPosition('COPY', props.row.id)
|
||||
: item.type === 'CONDITION'
|
||||
? onClickCodition(props.row)
|
||||
: null
|
||||
"
|
||||
>
|
||||
|
|
@ -616,7 +653,12 @@ watch(
|
|||
</q-menu>
|
||||
</q-btn>
|
||||
</q-td>
|
||||
<q-td v-for="col in props.cols" :key="col.name" :props="props">
|
||||
<q-td
|
||||
v-for="col in props.cols"
|
||||
:key="col.name"
|
||||
:props="props"
|
||||
:class="props.row.isCondition ? 'text-red' : ''"
|
||||
>
|
||||
<div v-if="col.name == 'no'">
|
||||
{{
|
||||
(reqMaster.page - 1) * Number(reqMaster.pageSize) +
|
||||
|
|
@ -664,6 +706,12 @@ watch(
|
|||
>
|
||||
<q-tooltip>ดูข้อมูลในทะเบียนประวัติ</q-tooltip>
|
||||
</q-btn>
|
||||
|
||||
{{
|
||||
props.row.isCondition && props.row.conditionReason
|
||||
? `\r(${props.row.conditionReason})`
|
||||
: ""
|
||||
}}
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ col.value ? col.value : "-" }}
|
||||
|
|
@ -750,6 +798,13 @@ watch(
|
|||
@update:modal="(value:any)=>{modalPerson = value}"
|
||||
:type="'employee'"
|
||||
/>
|
||||
|
||||
<!-- จัดการตำแหน่งติดเงื่อนไข -->
|
||||
<DialogCondition
|
||||
v-model:modal="modalCondition"
|
||||
:fetch-data="fetchDataCondition"
|
||||
:data-condition="dataCondition"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue