简历详情页面开发
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
export default {
|
||||
// baseUrl: 'http://39.98.44.136:8080', // 测试
|
||||
baseUrl: 'http://222.80.110.161:80/api/ks', // 测试
|
||||
baseUrl: 'https://www.xjksly.cn/api/ks', // 测试
|
||||
// baseUrl: 'http://222.80.110.161:80/api/ks', // 测试
|
||||
// baseUrl: 'http://ks.zhaopinzao8dian.com/api/ks', // 测试
|
||||
|
||||
// LCBaseUrl:'http://10.110.145.145:9100',//内网端口
|
||||
|
||||
@@ -502,7 +502,7 @@ function previewImage(url, index) {
|
||||
|
||||
// 查看简历
|
||||
function viewResume(userId) {
|
||||
navTo(`/packageA/pages/myResume/myResume?userId=${userId}`);
|
||||
navTo(`/packageA/pages/resumeDetail/resumeDetail?userId=${userId}`);
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
385
packageA/pages/resumeDetail/resumeDetail.vue
Normal file
385
packageA/pages/resumeDetail/resumeDetail.vue
Normal file
@@ -0,0 +1,385 @@
|
||||
<template>
|
||||
<AppLayout backGorundColor="#F4F4F4">
|
||||
<template #headerleft>
|
||||
<view class="btnback">
|
||||
<image src="@/static/icon/back.png" @click="navBack"></image>
|
||||
</view>
|
||||
</template>
|
||||
<template #header>
|
||||
<view class="title">简历详情</view>
|
||||
</template>
|
||||
<view class="mys-container">
|
||||
<!-- 个人信息 -->
|
||||
<view class="mys-tops btn-feel">
|
||||
<view class="tops-left">
|
||||
<view class="name">
|
||||
<text>{{ userInfo.name || '暂无姓名' }}</text>
|
||||
</view>
|
||||
<view class="subName">
|
||||
<dict-Label class="mar_ri10" dictType="sex" :value="userInfo.sex"></dict-Label>
|
||||
<text class="mar_ri10">{{ userInfo.age }}岁</text>
|
||||
<dict-Label class="mar_ri10" dictType="education" :value="userInfo.education"></dict-Label>
|
||||
<dict-Label
|
||||
class="mar_ri10"
|
||||
dictType="affiliation"
|
||||
:value="userInfo.politicalAffiliation"
|
||||
></dict-Label>
|
||||
</view>
|
||||
<view class="subName">{{ userInfo.phone }}</view>
|
||||
</view>
|
||||
<view class="tops-right">
|
||||
<view class="right-imghead">
|
||||
<image v-if="userInfo.sex === '0'" src="@/static/icon/boy.png"></image>
|
||||
<image v-else src="@/static/icon/girl.png"></image>
|
||||
</view>
|
||||
<view class="right-sex">
|
||||
<image v-if="userInfo.sex === '0'" src="@/static/icon/boy1.png"></image>
|
||||
<image v-else src="@/static/icon/girl1.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 求职期望 -->
|
||||
<view class="mys-line"></view>
|
||||
<view class="mys-info">
|
||||
<view class="mys-h4">
|
||||
<text>求职期望</text>
|
||||
</view>
|
||||
<view class="mys-text">
|
||||
<text>期望薪资:</text>
|
||||
<text>{{ userInfo.salaryMin / 1000 }}k-{{ userInfo.salaryMax / 1000 }}k</text>
|
||||
</view>
|
||||
<view class="mys-text">
|
||||
<text>期望工作地:</text>
|
||||
<dict-Label dictType="area" :value="Number(userInfo.area)"></dict-Label>
|
||||
</view>
|
||||
<view class="mys-list">
|
||||
<view class="cards" v-for="(title, index) in userInfo.jobTitle" :key="index">
|
||||
{{ title }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 技能列表 -->
|
||||
<view class="work-experience-container">
|
||||
<view class="exp-header">
|
||||
<text class="exp-title">技能</text>
|
||||
</view>
|
||||
<view class="exp-list" v-if="userInfo.appSkillsList && userInfo.appSkillsList.length > 0">
|
||||
<view class="exp-item" v-for="(skill, index) in userInfo.appSkillsList" :key="skill.id">
|
||||
<view class="exp-company-row">
|
||||
<text class="exp-company">{{ skill.name }}</text>
|
||||
<text class="exp-position">{{ getSkillLevelText(skill.levels) }}</text>
|
||||
</view>
|
||||
<view class="exp-divider" v-if="index !== userInfo.appSkillsList.length - 1"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="exp-empty" v-else>
|
||||
<image class="empty-img" src="/static/icons/empty-work.png" mode="widthFix"></image>
|
||||
<text class="empty-text">暂无技能信息</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 工作经历 -->
|
||||
<view class="work-experience-container">
|
||||
<!-- 标题栏:仅显示标题 -->
|
||||
<view class="exp-header">
|
||||
<text class="exp-title">工作经历</text>
|
||||
</view>
|
||||
|
||||
<!-- 工作经历列表 -->
|
||||
<view class="exp-list" v-if="workExperiences.length > 0">
|
||||
<view class="exp-item" v-for="(item, index) in workExperiences" :key="item.id">
|
||||
<!-- 公司名称 + 职位 -->
|
||||
<view class="exp-company-row">
|
||||
<text class="exp-company">{{ item.companyName }}</text>
|
||||
<text class="exp-position">{{ item.position }}</text>
|
||||
</view>
|
||||
|
||||
<!-- 工作时间 -->
|
||||
<view class="exp-date-row">
|
||||
<text class="exp-label">工作时间:</text>
|
||||
<text class="exp-date">{{ item.startDate }} - {{ item.endDate || '至今' }}</text>
|
||||
</view>
|
||||
|
||||
<!-- 工作描述(支持多行) -->
|
||||
<view class="exp-desc-row" v-if="item.description">
|
||||
<text class="exp-label">工作描述:</text>
|
||||
<text class="exp-desc">{{ item.description }}</text>
|
||||
</view>
|
||||
|
||||
<!-- 分隔线(最后一项不显示) -->
|
||||
<view class="exp-divider" v-if="index !== workExperiences.length - 1"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 空状态提示(无工作经历时显示) -->
|
||||
<view class="exp-empty" v-else>
|
||||
<image class="empty-img" src="/static/icons/empty-work.png" mode="widthFix"></image>
|
||||
<text class="empty-text">暂无工作经历</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</AppLayout>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, inject, ref, onMounted } from 'vue';
|
||||
const { $api, navTo, navBack, config } = inject('globalFunction');
|
||||
import { onLoad } from '@dcloudio/uni-app';
|
||||
import useDictStore from '@/stores/useDictStore';
|
||||
const { getDictData } = useDictStore();
|
||||
|
||||
const userInfo = ref({});
|
||||
const workExperiences = ref([]);
|
||||
const isLoading = ref(false);
|
||||
|
||||
// 获取技能等级文本
|
||||
const getSkillLevelText = (level) => {
|
||||
const levelMap = {
|
||||
'1': '初级',
|
||||
'2': '中级',
|
||||
'3': '高级'
|
||||
};
|
||||
return levelMap[level] || level || '暂无等级';
|
||||
};
|
||||
|
||||
// 页面加载时获取数据
|
||||
onLoad((option) => {
|
||||
const { userId } = option;
|
||||
if (userId) {
|
||||
getResumeDetail(userId);
|
||||
}
|
||||
});
|
||||
|
||||
// 获取简历详情
|
||||
const getResumeDetail = async (userId) => {
|
||||
try {
|
||||
isLoading.value = true;
|
||||
const resData = await $api.createRequest(`/app/user/userResume/${userId}`);
|
||||
if (resData.code === 200) {
|
||||
userInfo.value = resData.data;
|
||||
// 从简历详情中获取工作经历,而不是单独请求
|
||||
workExperiences.value = resData.data.experiencesList || [];
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取简历详情失败:', error);
|
||||
$api.msg('获取简历详情失败');
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
image{
|
||||
width: 100%;
|
||||
height: 100%
|
||||
}
|
||||
.mys-container{
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
.mys-tops{
|
||||
display: flex
|
||||
justify-content: space-between
|
||||
padding: 52rpx 48rpx
|
||||
.tops-left{
|
||||
.name{
|
||||
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
|
||||
font-weight: 600;
|
||||
font-size: 44rpx;
|
||||
color: #333333;
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: flex-start
|
||||
}
|
||||
.subName{
|
||||
margin-top: 12rpx
|
||||
font-weight: 400;
|
||||
font-size: 32rpx;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
}
|
||||
.tops-right{
|
||||
position: relative
|
||||
.right-imghead{
|
||||
width: 136rpx;
|
||||
height: 136rpx;
|
||||
border-radius: 50%;
|
||||
background: #e8e8e8
|
||||
overflow: hidden
|
||||
}
|
||||
.right-sex{
|
||||
position: absolute
|
||||
right: -10rpx
|
||||
top: -10rpx
|
||||
width: 50rpx
|
||||
height: 50rpx
|
||||
}
|
||||
}
|
||||
}
|
||||
.mys-line{
|
||||
margin: 0 28rpx
|
||||
height: 0rpx;
|
||||
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
||||
border: 2rpx dashed #000000;
|
||||
opacity: 0.16;
|
||||
}
|
||||
.mys-info{
|
||||
padding: 28rpx
|
||||
.mys-h4{
|
||||
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
|
||||
font-weight: 600;
|
||||
font-size: 32rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 8rpx
|
||||
display: flex;
|
||||
justify-content: space-between
|
||||
align-items: center
|
||||
}
|
||||
.mys-text{
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #333333;
|
||||
margin-top: 16rpx
|
||||
}
|
||||
.mys-list{
|
||||
display: flex
|
||||
align-items: center
|
||||
flex-wrap: wrap;
|
||||
.cards{
|
||||
margin: 28rpx 28rpx 0 0
|
||||
height: 80rpx;
|
||||
padding: 0 38rpx;
|
||||
width: fit-content
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: center
|
||||
border-radius: 12rpx 12rpx 12rpx 12rpx;
|
||||
border: 2rpx solid #E8EAEE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 容器样式(适配多端,用rpx做单位) */
|
||||
.work-experience-container {
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
border-radius: 16rpx;
|
||||
margin: 20rpx;
|
||||
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 标题栏:两端对齐 */
|
||||
.exp-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 25rpx;
|
||||
}
|
||||
|
||||
.exp-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 经历列表容器 */
|
||||
.exp-list {
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
|
||||
/* 单个经历卡片 */
|
||||
.exp-item {
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
|
||||
/* 公司名称 + 职位(横向排列,职位右对齐) */
|
||||
.exp-company-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.exp-company {
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.exp-position {
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* 工作时间/描述:标签+内容横向排列 */
|
||||
.exp-date-row, .exp-desc-row {
|
||||
display: flex;
|
||||
margin-bottom: 12rpx;
|
||||
line-height: 1.6;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* 标签样式(固定宽度,统一对齐) */
|
||||
.exp-label {
|
||||
font-size: 26rpx;
|
||||
color: #000;
|
||||
min-width: 160rpx;
|
||||
}
|
||||
|
||||
/* 内容样式 */
|
||||
.exp-date, .exp-desc {
|
||||
font-size: 26rpx;
|
||||
color: #000000;
|
||||
flex: 1; /* 内容占满剩余宽度,支持换行 */
|
||||
}
|
||||
|
||||
/* 工作描述(支持多行换行) */
|
||||
.exp-desc {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
/* 分隔线 */
|
||||
.exp-divider {
|
||||
height: 1rpx;
|
||||
background-color: #f5f5f5;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
/* 空状态样式 */
|
||||
.exp-empty {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 80rpx 0;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.empty-img {
|
||||
width: 140rpx;
|
||||
height: auto;
|
||||
margin-bottom: 25rpx;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.empty-text {
|
||||
font-size: 26rpx;
|
||||
text-align: center;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.btnback{
|
||||
width: 64rpx;
|
||||
height: 64rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 36rpx;
|
||||
font-weight: 600;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
margin-right: 64rpx;
|
||||
}
|
||||
</style>
|
||||
@@ -298,6 +298,14 @@
|
||||
"navigationBarTitleText": " 企业详情",
|
||||
"navigationBarBackgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/resumeDetail/resumeDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "简历详情",
|
||||
"navigationBarBackgroundColor": "#4778EC",
|
||||
"navigationBarTextStyle": "white"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user