Files
dou_fire/pages/user/info.vue
2023-03-08 11:51:43 +08:00

177 lines
3.5 KiB
Vue

<template>
<view class="content">
<view class="info-flex">
<label>头像</label>
<u-avatar
class="upd-active"
shape="square"
:src="avatar.url"
:default-url="require('@/static/imgs/default-active.png')"
@click="updAvatar"
></u-avatar>
</view>
<view class="info-flex">
<label>昵称</label>
<input class="info-input" maxlength="8" v-model="nickname" type="text" placeholder="昵称" disabled @blur="onNickname">
</view>
<view class="info-flex">
<label>通讯地址</label>
<input class="info-input" v-model="sign.address" type="text" placeholder="输入通讯地址" :disabled="sign.isSign" @blur="onAddress">
</view>
</view>
</template>
<script>
import { info, updInfo } from '@/apis/interfaces/user.js'
import { uploads } from '@/apis/interfaces/uploading.js'
export default {
data() {
return {
nickname: '', // 用户昵称
avatar : {
url : '',
path: ''
}, // 上传头像
sign : {
isSign : false,
address : ''
}
};
},
created() {
this.getInfo()
},
methods: {
// 获取用户资料
getInfo(){
uni.showLoading({
title: '加载中...'
})
info().then(res => {
let { nickname, avatar, sign } = res
this.nickname = nickname
this.avatar = {
url : avatar,
path: ''
}
this.sign = sign
uni.hideLoading()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 更新昵称
onNickname(e){
this.updInfo('nickname', this.nickname)
},
// 更新通讯地址
onAddress(e){
this.updInfo('address', this.sign.address)
},
// 更新资料
updInfo(key, val){
uni.showLoading({
title: '加载中...',
mask : true
})
updInfo(key, val).then(res => {
uni.showToast({
title: '修改成功',
icon : 'none',
})
}).catch(err => {
this.getInfo()
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 更新头像
updAvatar(){
uni.chooseImage({
count: 1,
crop : {
width : 300,
height : 300
},
success: res => {
if(res.tempFilePaths.length > 0){
uni.showLoading({
title: '上传中...',
mask : true
})
uploads([{
name: 'avatar',
uri : res.tempFilePaths[0]
}]).then(updRes => {
let { path, url } = updRes
this.avatar = {
url : url[0],
path: path[0]
}
this.updInfo('avatar', path[0])
}).catch(updErr => {
uni.showToast({
title: updErr.message,
icon : 'none'
})
})
}
},
fail: err => {}
})
}
}
}
</script>
<style lang="scss">
.content{
padding-top: 30rpx;
}
// 编辑信息
.info-flex{
background: white;
padding: 20rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
line-height: 60rpx;
position: relative;
overflow: hidden;
&::after {
content: "";
position: absolute;
left: 30rpx;
bottom: 0;
width: 100%;
height: 1rpx;
z-index: 2;
background-image: linear-gradient(0deg, $border-color 50%, transparent 50%);
}
&:last-child::after{
display: none;
}
label{
font-size: 30rpx;
color: #111;
width: 200rpx;
}
.info-input{
width: calc(100% - 200rpx);
text-align: right;
}
.upd-active{
width: 88rpx;
height: 88rpx;
border-radius: $radius;
position: relative;
overflow: hidden;
}
}
</style>