推广小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

388 lines
8.6 KiB

<template>
<view>
<view class="head-box"></view>
<uv-navbar autoBack title="个人资料" leftIconColor="#fff" :bgColor="bgColor" height="100rpx" :titleStyle="{color:'#fff'}"></uv-navbar>
<view class="content">
<button class="chooseAvatar" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<view class="img-box">
<image :src="info.headImage" mode=""></image>
<view>点击更换头像</view>
</view>
<!-- <view class="line">
<view class="">
头像
</view>
<view class="">
<image :src="userInfoForm.headImage" v-if="userInfoForm.headImage" style="width: 60rpx;height: 60rpx;"
mode=""></image>
<image src="../static/auth/headImage.png" v-else style="width: 50rpx;height: 50rpx;" mode=""></image>
</view>
</view> -->
</button>
<view class="name-box">
<view class="name-val">{{info.nickName}}</view>
<view class="sex-box">
<image v-if="info.sex == '男'" src="@/static/image/center/nan-icon.png" mode=""></image>
<image v-else src="@/static/image/center/nv-icon.png" mode=""></image>
</view>
<view class="age-box">{{calculateAge}}岁</view>
<!-- <image src="@/static/image/center/nv-icon.png" mode=""></image> -->
</view>
<view class="form-box">
<view class="form-box-line">
<view class="label-box">
<image src="./static/user-icon-1.png" mode="widthFix"></image>
<view>国籍</view>
</view>
<view class="value-box">
{{info.city || '未设置'}}
</view>
</view>
<view class="form-box-line">
<view class="label-box">
<image src="./static/user-icon-2.png" mode="widthFix"></image>
<view>学历</view>
</view>
<view class="value-box">
{{info.shcool || '未设置'}}
</view>
</view>
<view class="form-box-line">
<view class="label-box">
<image src="./static/user-icon-3.png" mode="widthFix"></image>
<view>行业</view>
</view>
<view class="value-box">
{{info.workValue || '未设置'}}
</view>
</view>
<view class="form-box-line">
<view class="label-box">
<image src="./static/user-icon-4.png" mode="widthFix"></image>
<view>电话</view>
</view>
<view class="value-box">
{{info.phone || '未设置'}}
</view>
</view>
<view class="form-box-line">
<view class="label-box">
<image src="./static/user-icon-5.png" mode="widthFix"></image>
<view>性别</view>
</view>
<view class="value-box">
{{info.sex || '未设置'}}
</view>
</view>
</view>
<view class="tips-box">
<view class="title-box">标签</view>
<view class="tips-val">
<view class="tips-item tips-1" v-for="(val,i) in stateArr" :key="i">{{val}}</view>
<!-- <view class="tips-item tips-2">985</view> -->
<!-- <view class="tips-item tips-3">设计师</view> -->
<!-- <view class="tips-item tips-4">行业大牛</view> -->
</view>
</view>
<view class="about-box">
<uv-divider text="关于我" textSize="28rpx"></uv-divider>
<view class="about-box-val">{{info.details || '未设置'}}</view>
</view>
</view>
<view class="btn-box">
<uv-button text="编辑信息" @click="editClick" color="#381615" shape="circle" :customStyle="btnCustomStyle"></uv-button>
</view>
</view>
</template>
<script>
export default{
data() {
return {
btnCustomStyle:{
color:'#FF5858'
},
bgColor:'transparent',
info:{},
}
},
onPageScroll(e) {
if(e.scrollTop > 50) {
this.bgColor = '#49070c'
}else{
this.bgColor = 'transparent'
}
},
onShow() {
this.getUserInfo()
},
computed:{
calculateAge() {
let today = new Date();
let birthDate = new Date(this.info.yearDate);
let age = today.getFullYear() - birthDate.getFullYear();
let m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
return age;
},
stateArr() {
let arr = this.info.state.split(',')
return arr
}
},
methods:{
onChooseAvatar(res) {
let self = this
self.$Oss.ossUpload(res.target.avatarUrl)
.then(url => {
self.info.headImage = url
this.$api('updateInfo',this.info, res => {
if (res.code == 200) {
uni.showToast({
title:'保存成功',
icon:'none'
})
}
})
})
},
getUserInfo() {
this.$api('getInfo', res => {
if (res.code == 200) {
this.info = res.result
}
})
},
editClick() {
uni.navigateTo({
url:'/pages_my/user-msg'
})
},
}
}
</script>
<style lang="scss">
page {
background-color: #060504;
}
</style>
<style lang="scss" scoped>
.chooseAvatar {
width: 100%;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
}
.head-box {
background: url('@/static/image/nav-bg.png') no-repeat;
background-size: 100% 100%;
width: 100%;
height: 534rpx;
position: absolute;
z-index: -1;
}
.content {
padding: 0 30rpx 170rpx;
padding-top: calc(var(--status-bar-height) + 110rpx);
.img-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-bottom: 40rpx;
image {
width: 176rpx;
height: 176rpx;
border-radius: 50%;
}
view {
font-weight: 400;
font-size: 24rpx;
color: #CCCCCC;
margin-top: 20rpx;
}
}
.name-box {
display: flex;
align-items: center;
.name-val {
font-weight: 600;
font-size: 32rpx;
color: #E6E6E6;
margin-right: 18rpx;
}
.sex-box {
background-color: #0D1A20;
width: 69rpx;
height: 36rpx;
border-radius: 18rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 10rpx;
image {
width: 25rpx;
height: 25rpx;
}
}
.age-box {
width: 85rpx;
height: 36rpx;
background: #261705;
border-radius: 18rpx;
display: flex;
align-items: center;
justify-content: center;
font-weight: 400;
font-size: 23rpx;
color: #FFA200;
}
}
.form-box {
background: #1B1713;
border-radius: 27rpx;
padding:0 40rpx;
margin-top: 25rpx;
margin-bottom: 44rpx;
.form-box-line {
height: 112rpx;
border-bottom: 1px solid #403D3A;
display: flex;
align-items: center;
justify-content: space-between;
&:last-child {
border: none;
}
.label-box {
font-weight: 400;
font-size: 31rpx;
color: #CCCCCC;
display: flex;
align-items: center;
image {
width: 35rpx;
height: 35rpx;
margin-right: 23rpx;
}
}
.value-box {
font-weight: 400;
font-size: 28rpx;
color: #CCCCCC;
}
}
.form-title {
font-weight: 500;
font-size: 28rpx;
color: #CCCCCC;
padding-top: 32rpx;
}
.choose-box {
margin-top: 28rpx;
display: flex;
flex-wrap: wrap;
.choose-item {
width: 137rpx;
height: 67rpx;
border-radius: 13rpx;
border: 1rpx solid #CCCCCC;
text-align: center;
line-height: 67rpx;
font-weight: 500;
font-size: 26rpx;
color: #CCCCCC;
margin-right: 15rpx;
margin-bottom: 24rpx;
&:nth-child(4n){
margin-right: 0;
}
}
.choose-class {
background-color: #341616;
color: #FF4747;
border: 1rpx solid #FF4747;
}
}
}
.title-box {
font-weight: 500;
font-size: 27rpx;
color: #666666;
}
.tips-box {
margin-top: 30rpx;
margin-bottom: 27rpx;
.tips-val {
display: flex;
align-items: center;
margin-top: 27rpx;
.tips-item {
width: 147rpx;
height: 72rpx;
border-radius: 13rpx;
font-weight: 500;
font-size: 28rpx;
line-height: 72rpx;
text-align: center;
margin-right: 20rpx;
margin-bottom: 10rpx;
flex-wrap: wrap;
&:nth-child(4n) {
margin-right: 0;
}
}
.tips-1 {
background-color: #1F1404;
color: #E17E09;
}
.tips-2 {
background-color: #1F0E0D;
color: #FF4747;
}
.tips-3 {
background-color: #051529;
color: #0979E1;
}
.tips-4 {
background-color: #191F0E;
color: #4EB477;
}
}
}
.about-box {
.about-box-val {
margin-top: 36rpx;
background: #171310;
border-radius: 20rpx;
padding: 60rpx 40rpx;
font-weight: 400;
font-size: 28rpx;
color: #CCCCCC;
line-height: 46rpx;
}
}
}
.btn-box {
background-color: #060504;
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 20rpx 40rpx;
height: 150rpx;
z-index: 999;
box-sizing: border-box;
}
</style>