Files
ks-app-employment-service/pages/mine/mine.vue
2025-10-24 16:54:52 +08:00

413 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<AppLayout title="我的" back-gorund-color="#F4F4F4">
<!-- 自定义tabbar -->
<CustomTabBar :currentPage="4" />
<!-- 企业用户信息卡片 -->
<view v-if="userInfo.isCompanyUser === 0" class="company-info-card btn-feel" @click="seeDetail">
<view class="company-avatar">
<image class="company-avatar-img" :src="companyInfo.avatar || '/static/icon/company-default.png'"></image>
</view>
<view class="company-details">
<view class="company-name">{{ companyInfo.name || '科里喀什分公司' }}</view>
<view class="company-completeness">信息完整度 {{ companyInfo.completeness || '100%' }}</view>
</view>
<view class="company-arrow">
<uni-icons color="#A2A2A2" type="right" size="16"></uni-icons>
</view>
</view>
<!-- 求职者用户信息卡片 -->
<view v-else class="mine-userinfo btn-feel" @click="seeDetail">
<view class="userindo-head">
<image class="userindo-head-img" v-if="userInfo.sex === '0'" src="/static/icon/boy.png"></image>
<image class="userindo-head-img" v-else src="/static/icon/girl.png"></image>
</view>
<view class="userinfo-ls">
<view class="userinfo-ls-name">{{ userInfo.name || '暂无用户名' }}</view>
<view class="userinfo-ls-resume" v-if="isAbove90(Completion)">
简历完成度 {{ Completion }}建议优化
</view>
<view class="userinfo-ls-resume" v-else>简历完成度 {{ Completion }}</view>
</view>
</view>
<view class="mini-number">
<view class="numbe-item button-click" @click="navTo('/packageA/pages/Intendedposition/Intendedposition')">
<view class="mini-num">{{ counts.applyCount }}</view>
<view class="mini-text">投递</view>
</view>
<view class="numbe-item button-click" @click="navTo('/packageA/pages/collection/collection')">
<view class="mini-num">{{ counts.collectionCount }}</view>
<view class="mini-text">收藏</view>
</view>
<view class="numbe-item button-click" @click="navTo('/packageA/pages/browseJob/browseJob')">
<view class="mini-num">{{ counts.jobReviewCount }}</view>
<view class="mini-text">足迹</view>
</view>
<view class="numbe-item button-click" @click="navTo('/packageA/pages/reservation/reservation')">
<view class="mini-num">{{ counts.fairCollecitonCount }}</view>
<view class="mini-text">预约</view>
</view>
</view>
<view class="mini-cards">
<view class="card-top btn-feel">
<view class="top-title line_1">
<text>{{ userInfo.name || '暂无用户名' }}</text>
&nbsp;|&nbsp;
<dict-Label dictType="education" :value="userInfo.education"></dict-Label>
</view>
<view class="top-subTitle line_1">
<text v-for="(item, index) in userInfo.jobTitle" :key="index">
&nbsp;{{ item }}&nbsp;
<text v-if="userInfo.jobTitle.length - 1 !== index">|</text>
</text>
</view>
<view class="top-btn button-click" @click="navTo('/packageA/pages/personalInfo/personalInfo')">
修改简历
</view>
</view>
<view class="card-main">
<view class="main-title">服务专区</view>
<view class="main-row btn-feel">
<view class="row-left">
<image class="left-img" src="@/static/icon/server1.png"></image>
<text class="left-text">实名认证</text>
</view>
<view class="row-right">已认证</view>
</view>
<view class="main-row btn-feel">
<view class="row-left">
<image class="left-img" src="@/static/icon/server2.png"></image>
<text class="left-text">素质测评</text>
</view>
<view class="row-right">
<uni-icons color="#909090" type="right" size="14"></uni-icons>
</view>
</view>
<view class="main-row btn-feel">
<view class="row-left">
<image class="left-img" src="@/static/icon/server3.png"></image>
<text class="left-text">AI面试</text>
</view>
<view class="row-right">
<uni-icons color="#909090" type="right" size="14"></uni-icons>
</view>
</view>
<view class="main-row btn-feel">
<view class="row-left">
<image class="left-img" src="@/static/icon/server4.png"></image>
<text class="left-text">通知与提醒</text>
</view>
<view class="row-right">已开启</view>
</view>
</view>
<view class="card-back button-click" @click="logOut">退出登录</view>
<uni-popup ref="popup" type="dialog">
<uni-popup-dialog
mode="base"
title="确定退出登录吗?"
type="info"
:duration="2000"
:before-close="true"
@confirm="confirm"
@close="close"
></uni-popup-dialog>
</uni-popup>
</view>
<template #footer>
<!-- 统一使用系统tabBar -->
</template>
</AppLayout>
</template>
<script setup>
import { reactive, inject, watch, ref, onMounted, onUnmounted } from 'vue';
import { storeToRefs } from 'pinia';
import { onLoad, onShow } from '@dcloudio/uni-app';
const { $api, navTo } = inject('globalFunction');
import useUserStore from '@/stores/useUserStore';
import { tabbarManager } from '@/utils/tabbarManager';
const popup = ref(null);
const { userInfo, Completion } = storeToRefs(useUserStore());
const counts = ref({});
// 企业信息数据
const companyInfo = reactive({
name: '科里喀什分公司',
avatar: '/static/icon/company-avatar.png',
completeness: '100%'
});
function logOut() {
popup.value.open();
}
onShow(() => {
getUserstatistics();
// 更新自定义tabbar选中状态
tabbarManager.updateSelected(4);
});
// 监听退出登录事件,显示微信登录弹窗
onMounted(() => {
uni.$on('showLoginModal', () => {
// 这里可以显示微信登录弹窗
// 由于这个页面没有 WxAuthLogin 组件,我们跳转到首页让首页处理
uni.reLaunch({
url: '/pages/index/index'
});
});
});
onUnmounted(() => {
uni.$off('showLoginModal');
});
function close() {
popup.value.close();
}
function confirm() {
useUserStore().logOut();
}
const isAbove90 = (percent) => parseFloat(percent) < 90;
function getUserstatistics() {
$api.createRequest('/app/user/statistics').then((resData) => {
console.log(resData);
counts.value = resData.data;
});
}
function seeDetail() {
if (userInfo.isCompanyUser === 0) {
// 企业用户跳转到企业信息页面
navTo('/pages/mine/company-info');
} else {
// 求职者用户跳转到简历页面
navTo('/packageA/pages/myResume/myResume');
}
}
</script>
<style lang="stylus" scoped>
.card-top {
transition: transform 0.3s ease;
transform-style: preserve-3d;
}
.card-top.tilt {
transform: perspective(600px) rotateY(8deg) rotateX(4deg);
}
.mini-cards{
padding: 28rpx
.card-top{
background-image: url('@/static/icon/backAI2.png'), linear-gradient(to left, #9E74FD 0%, #256BFA 63%, #4180FF 100%);
background-repeat: no-repeat, no-repeat;
background-position: right top, center;
background-size: 396rpx 212rpx, cover;
padding: 36rpx 36rpx 64rpx 36rpx
border-radius: 20rpx 20rpx 0rpx 0rpx;
position: relative
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
.top-title{
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
width: auto;
max-width: 60%;
white-space: nowrap
overflow:visible;
}
.top-subTitle{
margin-top: 8rpx;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
width: auto;
max-width: 60%;
white-space: nowrap
overflow:hidden;
text-overflow: ellipsis;
}
.top-btn{
width: 164rpx;
height: 64rpx;
background: radial-gradient( 0% 24% at 57% 42%, rgba(255,255,255,0) 0%, rgba(255,255,255,0.27) 100%);
box-shadow: 0rpx 8rpx 40rpx 0rpx rgba(210,210,210,0.14);
border-radius: 80rpx 80rpx 80rpx 80rpx;
border: 2rpx solid #D2D2D2;
text-align: center
line-height: 64rpx
font-weight: 500;
font-size: 28rpx;
color: #FFFFFF;
position: absolute
right: 36rpx
top: 50rpx
}
}
.card-main{
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
position: relative;
top: -28rpx
padding: 26rpx 60rpx 0 32rpx
.main-title{
font-weight: 600;
font-size: 32rpx;
color: #000000;
}
.main-row{
display: flex
align-items: center
justify-content: space-between
.row-left{
display: flex
align-items: center
.left-img{
width: 44rpx;
height: 44rpx;
margin: 32rpx 16rpx 32rpx 10rpx
}
.left-text{
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
.row-right{
color: #6E6E6E;
font-size: 28rpx;
}
}
.main-row:last-child{
margin: 0
}
}
.card-back{
height: 96rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
text-align: center;
line-height: 96rpx
font-size: 28rpx;
color: #256BFA;
}
}
.mini-number{
padding: 24rpx
display: flex
justify-content: space-around
.numbe-item{
display: flex
flex-direction: column
justify-content: center
align-items: center
.mini-num{
font-family: DIN-Medium;
font-weight: 500;
font-size: 46rpx;
color: #333333;
}
.mini-text{
font-weight: 400;
font-size: 28rpx;
color: #6C7282;
}
}
}
.mine-userinfo
display: flex;
justify-content: flex-start;
align-items: center;
padding: 30rpx;
position: relative;
.userindo-head
width: 101rpx;
height: 101rpx;
overflow: hidden
border-radius: 50%
margin-right: 22rpx;
.userindo-head-img
width: 100%;
height: 100%;
.userinfo-ls
display: flex;
flex-direction: column;
align-items: flex-start;
.userinfo-ls-name
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
font-weight: 600;
font-size: 40rpx;
color: #333333;
border-radius: 50%
.userinfo-ls-resume
font-weight: 400;
font-size: 28rpx;
color: #6C7282;
.mine-userinfo::before
position: absolute;
right: 40rpx;
top: 50%;
content: '';
width: 4rpx;
height: 18rpx;
border-radius: 2rpx
background: #A2A2A2;
transform: translate(0, -50%) rotate(-45deg);
.mine-userinfo::after
position: absolute;
right: 40rpx;
top: calc(50% + 1rpx);
content: '';
width: 4rpx;
height: 18rpx;
border-radius: 2rpx
background: #A2A2A2;
transform: rotate(45deg)
// 企业信息卡片样式
.company-info-card {
display: flex;
align-items: center;
padding: 30rpx;
background: #FFFFFF;
margin: 20rpx;
border-radius: 20rpx;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
.company-avatar {
width: 100rpx;
height: 100rpx;
border-radius: 50%;
overflow: hidden;
margin-right: 24rpx;
.company-avatar-img {
width: 100%;
height: 100%;
}
}
.company-details {
flex: 1;
.company-name {
font-size: 36rpx;
font-weight: 600;
color: #333333;
margin-bottom: 8rpx;
}
.company-completeness {
font-size: 28rpx;
color: #6C7282;
}
}
.company-arrow {
margin-left: 20rpx;
}
}
</style>