YingXingAI/pages/my/personalResume/online.vue

442 lines
12 KiB
Vue
Raw Normal View History

2025-06-30 14:43:02 +08:00
<template>
<view>
<u-navbar :custom-back="goPageFn" title="在线简历"></u-navbar>
<view class="base-box">
<!-- 左侧头像 -->
<view class="base-left">
<u-avatar size="130" :src="$u.http.config.imgUrl + vuex_user.head"></u-avatar>
</view>
<!-- 右侧个人信息 -->
<view class="base-right">
<view class="base-item">
<text class="base-name">{{ vuex_user.name }}</text>
<text class="base-status">{{ baseMsg.startYear }}</text>
</view>
<view class="base-item" v-if="workFieldName">
{{ workFieldName }}</view
>
<view class="base-item">
{{ baseMsg.educationStr }}-{{ baseMsg.college }}-{{ baseMsg.major }}
</view>
<view class="base-item"> 手机号:{{ vuex_user.phone }}</view>
</view>
</view>
<!-- 线 -->
<view style="height: 20rpx"></view>
<!-- tabs -->
<u-tabs-swiper
ref="uTabs"
:list="tabList"
:current="tabsCurrent"
:is-scroll="false"
:active-item-style="{ color: '#3CB5FB', fontSize: '0.15rem' }"
:bar-style="{ background: '#3CB5FB' }"
@change="tabsChange"
></u-tabs-swiper>
<!-- 教育经历 -->
<template v-if="tabsCurrent === 0">
<view class="school-item" v-for="(x, xIndex) in educationList" :key="xIndex">
<!-- 学校logo -->
<view class="school-logo">
<u-avatar
size="80"
:src="$u.http.config.imgUrl + x.school.logo.slice(1)"
></u-avatar
></view>
<view class="school-msg">
<view class="school-name">{{ x.school.name }}</view>
<view class="school-desc"
>{{ x.startYear }}年入学 {{ x.major }} {{ x.educationStr }}</view
>
</view>
<view class="school-time"> {{ x.startYear + "-" + x.endYear }} </view>
</view>
<!-- <u-empty
v-if="!educationList.length"
text="暂无数据"
mode="list"
style="margin-top: 100rpx"
></u-empty> -->
<no-data v-if="!educationList.length" text="暂无数据" ></no-data
>
</template>
<!-- 工作经历 -->
<template v-if="tabsCurrent === 1">
<view
class="work-item"
v-for="(x, xIndex) in workInfoList"
:key="xIndex"
@click="editWorkFn(x)"
>
<view class="work-msg">
<text class="work-name">{{ x.corporateName }}</text>
<text class="work-job">{{ x.corporatePosition }}</text>
<view class="work-img">
<image
style="width: 20rpx; height: 25rpx; margin-left: 30rpx"
src="/static/common/img/row_right.png"
/>
</view>
</view>
<view class="work-date">
{{ x.startTime.slice(0, 7).replaceAll("-", "年") + "月" }}
{{ x.endTime.slice(0, 7).replaceAll("-", "年") + "月" }}
</view>
<view class="work-desc">{{ x.wordDesc || "-" }}</view>
</view>
<view style="padding-top: 100rpx">
<no-data v-if="!workInfoList.length" text="暂无数据" ></no-data
>
</view>
</template>
<!-- 项目经历 -->
<template v-if="tabsCurrent === 2">
<view
class="work-item"
v-for="(x, xIndex) in projectInfoList"
:key="xIndex"
@click="editProFn(x)"
>
<view class="work-msg">
<text class="work-name">{{ x.projectName }}</text>
<text class="work-job">{{ x.projectPosition }}</text>
<view class="work-img">
<image
style="width: 20rpx; height: 25rpx; margin-left: 30rpx"
src="/static/common/img/row_right.png"
/>
</view>
</view>
<view class="work-date">
{{ x.startTime.slice(0, 7).replaceAll("-", "年") + "月" }}
{{ x.endTime.slice(0, 7).replaceAll("-", "年") + "月" }}
</view>
<view class="work-desc">{{ x.projectDesc }}</view>
</view>
<view style="padding-top: 100rpx">
<no-data v-if="!projectInfoList.length" text="暂无数据" ></no-data
></view>
</template>
<!-- 线 -->
<view style="height: 200rpx"></view>
<!-- 按钮 -->
<view class="btn-box">
<u-button
v-if="tabsCurrent === 0"
style="width: 80%"
shape="circle"
type="primary"
@click="addEduFn"
>添加教育经历</u-button
>
<u-button
v-if="tabsCurrent === 1"
style="width: 80%"
shape="circle"
type="primary"
@click="addWorkFn"
>添加工作经历</u-button
>
<u-button
v-if="tabsCurrent === 2"
style="width: 80%;"
shape="circle"
type="primary"
@click="addProFn"
>添加项目经历</u-button
>
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import NoData from '@/components/NoData.vue';
export default {
components:{
NoData
},
data() {
return {
tabsCurrent: 0,
tabList: [
{
name: "教育经历",
},
{
name: "工作经历",
},
{
name: "项目经历",
},
],
baseMsg: {
id: "00dea3ba-dadb-4403-bf10-17c4b9682c94",
logo: "/upload/20230223/1677116584712.jpg",
school: "南昌理工学院",
certifyStatus: 1,
major: "计算机科学与技术",
college: "计算机信息工程学院",
startYear: "2025",
endYear: "2029",
educationStr: "本科",
isSelected: true,
},
// 教育经历
educationList: [],
// 工作经历
workInfoList: [],
// 项目经历
projectInfoList: [],
queryParams: {
type: 0,
},
// 获取个人职业
workFieldName:'',
};
},
onLoad(e) {
// Object.assign(this.queryParams, e);
// this.tabsCurrent = Number(this.queryParams.type);
},
onShow() {
this.getListFn();
this.getSchoolFn();
// 获取个人职业
this.getWorkNameFn();
},
methods: {
async getWorkNameFn(){
const res = await this.$u.apiList.GetWorkFile();
console.log(res,'res--职业列表');
this.workFieldName = res.find(x=>x.id === this.vuex_user.workFieldId)?.workFieldName;
},
goPageFn() {
uni.switchTab({
url: "/pages/my/my/my",
});
},
// 获取教育经历
async getSchoolFn() {
const req = {
userId: this.vuex_user.id,
};
const res = await this.$u.apiList.MyEducations(req);
console.log(res, "res--");
const findRow = res.find((x) => x.isSelected === true);
if (!findRow) {
/* uni.showToast({
title: "未查询到当前教育经历",
icon: "none",
}); */
this.$refs.uToast.show({
title: "未查询到当前教育经历",
type: "error",
});
return;
}
Object.assign(this.baseMsg, findRow);
this.baseMsg.name = this.vuex_user.name;
console.log(findRow, "findRow--");
},
tabsChange(i) {
// console.log(i, "i");
if (this.tabsCurrent !== i) {
this.tabsCurrent = i;
this.getListFn();
}
},
// 获取教育经历
async getListFn() {
const req = {
userId: this.vuex_user.id,
};
const res = await this.$u.apiList.ResumeUserApi(req);
console.log(res, "res--");
this.educationList = res.educationList;
this.workInfoList = res.workInfoList;
this.projectInfoList = res.projectInfoList;
},
//#region 教育经历相关
// 添加教育经历
addEduFn() {
this.$u.route({
url: "pages/my/AddEducation/AddEducation",
});
},
//#endregion
//#region 工作经历相关
// 获取工作经历
getWorkFn() {},
// 添加工作经历
addWorkFn() {
uni.navigateTo({
url: "/pages/my/personalResume/workPage?type=add",
});
},
// 编辑工作经历
editWorkFn(row) {
localStorage.setItem("workRow", JSON.stringify(row));
uni.navigateTo({
url: `/pages/my/personalResume/workPage?type=edit&id=${row.id}`,
});
},
//#endregion
//#region 项目经历相关
// 获取项目经历
getProFn() {},
// 添加项目经历
addProFn() {
uni.navigateTo({
url: "/pages/my/personalResume/proPage?type=add",
});
},
// 编辑项目经历
editProFn(row) {
localStorage.setItem("workRow", JSON.stringify(row));
uni.navigateTo({
url: "/pages/my/personalResume/proPage?type=edit&id=" + row.id,
});
},
//#endregion
},
computed: {
workFieldName() {
// return this.vuex_user?.workField?.workFieldName;
},
}
};
</script>
<style lang="scss" scoped>
.base-box {
display: flex;
min-height: 300rpx;
background-color: white;
padding-top: 20rpx;
.base-left {
width: 150rpx;
// border: 1px solid red;
display: flex;
justify-content: center;
}
.base-right {
flex: 1;
// border: 1px solid blue;
padding-left: 20rpx;
.base-item {
line-height: 60rpx;
color: rgba(0,0,0,0.4);
.base-name {
font-size: 30rpx;
color: black;
}
.base-status {
margin-left: 20rpx;
background-color: rgba(54, 110, 244,0.1);
color: #3db5fb;
padding:5rpx 15rpx;
border-radius: 30rpx;
font-size: 24rpx;
}
}
}
}
// 教育经历
.school-item {
border: 1px solid #f6f7fa;
background-color: white;
display: flex;
padding-left: 30rpx;
padding-right: 30rpx;
height: 148rpx;
align-items: center;
.school-logo {
display: flex;
justify-content: center;
align-items: center;
height: 100rpx;
}
.school-msg {
flex: 1;
display: flex;
justify-content: space-around;
flex-direction: column;
padding-top: 10rpx;
padding-bottom: 10rpx;
padding-left: 20rpx;
.school-name {
font-size: 32rpx;
color: black;
}
.school-desc {
font-size: 24rpx;
color:#999999;
margin-top: 20rpx;
}
}
.school-time {
padding-bottom: 40rpx;
font-size: 24rpx;
color:#999999;
// border: 1px solid blue;
}
}
// 工作经历
.work-item {
background-color: white;
padding: 30rpx;
border: 1px solid #f6f7fa;
.work-msg {
display: flex;
align-items: center;
.work-name {
font-size: 32rpx;
color: black;
// border: 1px solid green;
width: 440rpx;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏超出部分 */
text-overflow: ellipsis; /* 显示省略号 */
}
.work-job {
// border: 1px solid blue;
color: #999999;
width: 200rpx;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏超出部分 */
text-overflow: ellipsis; /* 显示省略号 */
}
.work-img {
// border: 1px solid yellow;
}
}
.work-date {
color: #999999;
margin-top: 20rpx;
}
.work-desc {
color: #666666;
margin-top: 15rpx;
word-break: break-all;
display: -webkit-box;
-webkit-line-clamp: 5; /* 限制在 5 行 */
-webkit-box-orient: vertical;
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
}
}
// 按钮
.btn-box {
position: fixed;
width: 100%;
bottom: 0;
height: 150rpx;
border-top: 1px solid #f1f2f6;
display: flex;
align-items: center;
justify-content: center;
background-color: white;
}
</style>