sadjv3_jishi/pages/my/userinfo.vue

423 lines
10 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>
<view>
<view class="usermain">
<view class="usermain-item ">
<view>头像</view>
<!-- #ifdef MP-WEIXIN -->
<view>
<button open-type="chooseAvatar" @chooseavatar="onChooseAvatar" style="background: #FFFFFF;">
<image src="../../static/logo.png" v-if="avatar==null" mode=""
style="width: 111rpx;height: 111rpx;border-radius: 50%;"></image>
<image v-else :src="avatar" mode="" style="width: 111rpx;height: 111rpx;border-radius: 50%;">
</image>
</button>
</view>
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<view @click="uploadImg()">
<image src="../../static/logo.png" v-if="avatar==null" mode=""
style="width: 111rpx;height: 111rpx;border-radius: 50%;"></image>
<image v-else :src="avatar" mode="" style="width: 111rpx;height: 111rpx;border-radius: 50%;">
</image>
</view>
<!-- #endif -->
</view>
<view class="usermain-item item-padding ">
<view>用户名</view>
<view>
<view class="cu-form-group">
<input type="nickname" v-model="userName" placeholder="请输入用户名" />
</view>
</view>
</view>
<view class="usermain-item item-padding ">
<view>年龄</view>
<view>
<view class="cu-form-group">
<input v-model="age" />
</view>
</view>
</view>
<!-- <view class="usermain-item item-padding">
<view >姓名</view>
<view class="cu-form-group">
<input v-model="realName" placeholder="请填写您的真实姓名" />
</view>
</view> -->
<view class="usermain-item item-padding ">
<view>手机</view>
<view>
<view class="cu-form-group" v-if="phone">
<input v-model="phone" disabled placeholder="请输入联系电话" />
</view>
<!-- #ifdef MP-WEIXIN -->
<view class="cu-form-group" v-if="!phone">
<button style="border: none;font-size: 28rpx;background: #FFFFFF;" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
授权手机号</button>
</view>
<!-- #endif -->
</view>
</view>
<view class="usermain-item item-padding ">
<view>性别</view>
<view>
<view class="cu-form-group">
<u-radio-group v-model="sex">
<u-radio shape="circle" active-color="#019c88" :name="1">男</u-radio>
<u-radio shape="circle" active-color="#019c88" :name="2"></u-radio>
</u-radio-group>
</view>
</view>
</view>
</view>
<view class="footer-btn">
<view class="usermain-btn" @click="messagebtn()">保存</view>
</view>
</view>
</template>
<script>
import * as websocketUtils from 'utils/websocketUtils.js';
export default {
data() {
return {
phone: '',
avatar: '../../static/logo.png',
userName: '',
nickName: '',
userId: '',
realName: '',
weChatId: "",
password: '',
platform: '',
createTime: '',
money: '',
jiFen: '',
status: '',
zhiFuBao: '',
zhiFuBaoName: '',
sex: 1,
age: 0
};
},
onLoad(e) {
this.getUserInfo()
// this.avatar = uni.getStorageSync('avatar')
},
methods: {
//小程序微信登录后获取手机号
getPhoneNumber: function(e) {
if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
console.log('用户拒绝提供手机号');
} else {
console.log('用户同意提供手机号');
console.log(e)
this.setPhoneByInsert(e.detail.encryptedData, e.detail.iv);
}
},
//小程序微信登录后获取手机号
setPhoneByInsert(decryptData, iv) {
let that = this;
uni.login({
provider: 'weixin',
success: function(loginRes) {
console.log(loginRes, '************')
let data = {
code: loginRes.code,
type: 2
}
that.$Request.get('/app/Login/wxLogin', data).then(res => {
if (res.code == 0) {
uni.setStorageSync('openId', res.data.open_id)
uni.setStorageSync('unionId', res.data.unionId)
// that.sessionkey = res.data.session_key;
let datat = {
decryptData: decryptData,
key: res.data.session_key,
iv: iv
};
that.$Request.postJson('/app/Login/selectPhone', datat).then(res => {
if (res.code == 0) {
that.phone = res.data.phoneNumber;
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
}
})
}
});
},
//微信填写能力获取头像
onChooseAvatar(e) {
console.log(e.detail.avatarUrl)
let that = this;
let token = uni.getStorageSync('token');
uni.showLoading({
title: '上传中...'
});
let userId = uni.getStorageSync('userId');
uni.uploadFile({
url: websocketUtils.uploadFileUrl(), //真实的接口地址
filePath: e.detail.avatarUrl,
header: {
token: token
},
name: 'file',
success: uploadFileRes => {
let url = JSON.parse(uploadFileRes.data);
that.avatar = url.data
uni.hideLoading();
}
});
},
goMyAddress() {
uni.navigateTo({
url: '../jifen/myaddress'
});
},
validateImageRatio(imagePath, targetRatio) {
return new Promise((resolve, reject) => {
uni.getImageInfo({
src: imagePath,
success: (info) => {
const size = info.size;
if (size / 1024 / 1024 > 4) {
// 图片大于2MB
uni.showToast({
icon:'error',
title:'图片超出2MB限制,请重新选择'
})
} else {
const { width, height } = info;
const actualRatio = width / height;
const isValid = Math.abs(actualRatio - targetRatio) < Number.EPSILON;
resolve(isValid);
}
},
fail: () => reject(false),
});
});
},
uploadImg() {
let token = uni.getStorageSync('token')
if (!token) {
this.goLoginInfo();
return;
}
let that = this;
var url = null;
uni.showActionSheet({
// itemList按钮的文字接受的是数组
itemList: ["查看头像", "从相册选择图片"],
success(e) {
var index = e.tapIndex
if (index === 0) {
// 用户点击了预览当前图片
// 可以自己实现当前头像链接的读取
let url = that.avatar;
let arr = []
arr.push(url)
uni.previewImage({
// 预览功能图片也必须是数组的
urls: arr
})
} else if (index === 1) {
uni.chooseImage({
count: 1, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function(res) {
uni.showLoading({
title: '上传中...'
});
let token = uni.getStorageSync('token');
let userId = uni.getStorageSync('userId');
that.validateImageRatio(res.tempFilePaths[0],4 / 5).then((isValid) => {
if (isValid) {
// 图片小于等于2MB
uni.uploadFile({
url: websocketUtils.uploadFileUrl(), //真实的接口地址
filePath: res.tempFilePaths[0],
header: {
token: token
},
name: 'file',
success: uploadFileRes => {
url = JSON.parse(uploadFileRes.data);
that.avatar = url.data
uni.hideLoading();
}
});
// 继续上传图片的逻辑...
} else {
uni.showToast({
title: '图片比例不符合要求请上传4:5的图片',
icon: 'none',
});
}
});
}
});
}
}
})
},
getUserInfo() {
let userId = uni.getStorageSync('userId')
this.$Request.get("/app/user/selectUserById").then(res => {
if (res.code == 0) {
this.$queue.setData('avatar', res.data.avatar);
this.$queue.setData('userId', res.data.userId);
this.$queue.setData('userName', res.data.userName);
this.$queue.setData('phone', res.data.phone);
this.$queue.setData('age', res.data.age);
this.sex = res.data.sex
this.age = res.data.age
this.phone = res.data.phone;
this.avatar = res.data.avatar;
this.userName = res.data.userName;
if (this.userName == null) {
this.userName = res.data.nickName;
} else {
this.userName = res.data.userName;
}
}
uni.hideLoading();
});
},
// 保存
messagebtn() {
if (!this.userName) {
// this.$queue.showToast('用户名不能为空');
uni.showToast({
title: "用户名不能为空",
icon: "none"
})
} else if (!this.phone) {
// this.$queue.showToast('用户名不能为空');
uni.showToast({
title: "联系电话不能为空",
icon: "none"
})
} else {
uni.showModal({
title: '温馨提示',
content: '确定保存信息',
success: e => {
if (e.confirm) {
this.$Request.postJson("/app/user/updateUser", {
userName: this.userName,
avatar: this.avatar,
phone: this.phone,
sex: this.sex,
age: this.age
}).then(res => {
if (res.code === 0) {
uni.showToast({
title: '保存成功',
icon: "none"
})
setTimeout(function() {
uni.navigateBack()
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: "none"
})
}
})
}
}
});
}
}
},
// userphone(){
// uni.navigateTo({
// url:'/pages/my/userphone'
// })
// }
};
</script>
<style>
page {
background: #f7f7f7;
}
button::after {
border: none;
}
.usermain {
background: #ffffff;
padding: 0 36rpx;
}
.usermain-item {
display: flex;
align-items: center;
padding: 10rpx 0;
justify-content: space-between;
border-bottom: 1rpx solid #f7f7f7;
}
.usermain-item.item-padding {
/* padding: 0; */
}
.cu-form-group {
padding: 0;
background: #ffffff;
text-align: right;
}
.cu-form-group input {
background: #ffffff;
font-size: 28rpx;
/* color: #fff; */
}
.footer-btn {
position: fixed;
width: 100%;
padding: 0 30rpx;
bottom: 0rpx;
left: 0;
right: 0;
background: #FFFFFF;
height: 110rpx;
line-height: 110rpx;
z-index: 999;
}
.footer-btn .usermain-btn {
background: linear-gradient(to right, #019c88, #21b590);
color: #FFFFFF;
margin: 16rpx 0;
width: 100%;
border-radius: 50rpx;
height: 78rpx;
line-height: 78rpx;
font-size: 30rpx;
text-align: center;
}
</style>