hrms-mgt/src/components/CardProfile.vue

182 lines
5.3 KiB
Vue
Raw Normal View History

<script setup lang="ts">
import { ref, reactive, watch } from "vue";
import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
/** importType*/
import type { FormProfile } from "@/interface/main";
import type { DataProfile } from "@/modules/05_placement/interface/index/Main";
/** importComponents*/
import PopupPersonal from "@/components/Dialogs/PopupPersonalNew.vue";
/** impoerStore*/
import { useCounterMixin } from "@/stores/mixin";
/** use*/
const $q = useQuasar();
const { messageError, findOrgNameOld, findOrgName } = useCounterMixin();
/** propsDataProfile*/
const props = defineProps({
data: { type: Object, required: true },
2024-05-17 17:20:50 +07:00
type: { type: String, default: "" },
});
const profile = reactive<FormProfile>({
id: "",
avatar: "",
fullName: "",
position: "",
positionLevel: "",
organization: "",
});
const modalPersonal = ref<boolean>(false);
2024-05-02 18:09:29 +07:00
const profileId = ref<string | null>("");
function fetchDataProfile(data: DataProfile) {
2024-05-16 10:58:18 +07:00
if (data.profileId) {
2024-06-11 16:34:25 +07:00
fetchCheckAvatar(data.profileId);
2024-05-16 10:58:18 +07:00
}
profile.id = data.profileId;
profile.fullName = `${data.prefix ?? ""}${data.firstName ?? ""} ${
data.lastName ?? ""
} `;
if (data["posTypeNameOld"] !== undefined) {
profile.position =
data.positionOld == "" || data.positionOld == null
? "-"
: data.positionOld;
if (data.posTypeNameOld && data.posLevelNameOld) {
profile.positionLevel = `${data.posTypeNameOld} (${data.posLevelNameOld})`;
} else if (data.posTypeNameOld) {
profile.positionLevel = `${data.posTypeNameOld}`;
} else if (data.posLevelNameOld) {
profile.positionLevel = `(${data.posLevelNameOld})`;
} else profile.positionLevel = "-";
profile.organization = findOrgNameOld(data);
} else {
profile.position =
data.position == "" || data.position == null ? "-" : data.position;
if (data.posTypeName && data.posLevelName) {
profile.positionLevel = `${data.posTypeName} (${data.posLevelName})`;
} else if (data.posTypeName) {
profile.positionLevel = `${data.posTypeName}`;
} else if (data.posLevelName) {
profile.positionLevel = `(${data.posLevelName})`;
} else profile.positionLevel = "-";
profile.organization = findOrgName(data);
}
}
2024-06-11 16:34:25 +07:00
function fetchCheckAvatar(id: string) {
2024-08-29 11:17:29 +07:00
const path =
props.type === "employee"
? `profile-employee/avatar/profileEmployeeId-admin/${id}`
: `profile/avatar/profileId-admin/${id}`;
http.get(config.API.orgCheckAvatarCard(path)).then((res) => {
2024-06-11 16:34:25 +07:00
const data = res.data.result;
if (data.avatarName) {
fetchProfile(id, data.avatarName);
}
});
}
function fetchProfile(id: string, name: string) {
if (profile.avatar === "") {
http
2024-06-11 16:34:25 +07:00
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, `${name}`))
.then(async (res) => {
profile.avatar = res.data.downloadUrl;
});
}
}
function updatemodalPersonal(modal: boolean) {
modalPersonal.value = modal;
}
function onclickViewinfo() {
modalPersonal.value = true;
}
watch(
() => props.data,
2024-08-29 11:17:29 +07:00
async () => {
const dataMain = (await props.data) as DataProfile;
2024-05-02 18:09:29 +07:00
profileId.value = dataMain.profileId;
2024-08-29 11:17:29 +07:00
await fetchDataProfile(dataMain);
}
);
</script>
<template>
<q-card bordered class="row col-12 text-dark">
<div class="bg-grey-1 q-pa-sm col-12 row items-center text-primary">
<div class="q-pl-sm text-weight-bold text-subtitle2">
{{ profile.fullName }}
</div>
<q-space />
<q-btn
2024-05-02 18:09:29 +07:00
v-if="profileId"
outline
color="blue"
dense
icon-right="mdi-open-in-new"
class="q-px-sm"
label="ดูข้อมูลทะเบียนประวัติ"
@click="onclickViewinfo()"
/>
</div>
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-3 col-sm-2 col-md-1 row">
<q-img :src="profile.avatar" v-if="profile.avatar !== ''" />
<q-img src="@/assets/avatar_user.jpg" v-else />
</div>
2024-06-27 14:07:38 +07:00
<div class="col-xs-6 col-sm-3 row">
<div class="col-12 q-pl-md">
<div class="col-12 text-top">
{{ props.type == "employee" ? "ตำแหน่ง" : "ตำแหน่งในสายงาน" }}
</div>
<div class="col-12 text-detail">
{{ profile.position }}
</div>
</div>
</div>
2024-06-27 14:07:38 +07:00
<div class="col-xs-6 col-sm-3 row">
<div class="col-12">
<div class="col-12 text-top">
{{ props.type == "employee" ? "กลุ่มงาน" : "ประเภทตำแหน่ง" }}
</div>
<div class="col-12 text-detail">
{{ profile.positionLevel }}
</div>
</div>
</div>
2024-06-27 14:07:38 +07:00
<div class="col-xs-6 col-sm-3 row">
<div class="col-12">
<div class="col-12 text-top">งก</div>
<div class="col-12 text-detail">
{{ profile.organization }}
</div>
</div>
</div>
</div>
</div>
</q-card>
<PopupPersonal
:modal="modalPersonal"
:id="profile.id"
@update:modal="updatemodalPersonal"
2024-05-17 17:20:50 +07:00
:type="props.type"
/>
</template>
<style scoped></style>