172 lines
3.5 KiB
Vue
172 lines
3.5 KiB
Vue
|
<template>
|
|||
|
<uni-popup ref="popup" type="bottom">
|
|||
|
<view class="box">
|
|||
|
<text class="headBox">绑定资料</text>
|
|||
|
<text class="tip">获取你的微信头像和昵称,完善你的个人资料</text>
|
|||
|
<view class="btnBox">
|
|||
|
<text @click="closeMe" class="close">关闭</text>
|
|||
|
<button class="agree uni-btn" type="primary" @click="getUserProfile">确定</button>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</uni-popup>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
const db = uniCloud.database();
|
|||
|
const usersTable = db.collection('uni-id-users')
|
|||
|
let userId = ''
|
|||
|
export default {
|
|||
|
emits:['next'],
|
|||
|
data() {
|
|||
|
return {}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
async open(uid){
|
|||
|
userId = uid
|
|||
|
this.$refs.popup.open()
|
|||
|
},
|
|||
|
async getUserProfile(){
|
|||
|
uni.showLoading();
|
|||
|
let res = await new Promise((callBack) => {
|
|||
|
uni.getUserProfile({
|
|||
|
desc: "用于设置账户昵称和头像",
|
|||
|
complete: (e) => {
|
|||
|
callBack(e)
|
|||
|
}
|
|||
|
})
|
|||
|
})
|
|||
|
if(res.errMsg != "getUserProfile:ok"){
|
|||
|
return this.closeMe()
|
|||
|
}
|
|||
|
let {avatarUrl,nickName} = res.userInfo;
|
|||
|
|
|||
|
let tempFilePath = await new Promise((callBack)=>{
|
|||
|
uni.downloadFile({
|
|||
|
url: avatarUrl,
|
|||
|
success: (res) => {
|
|||
|
if (res.statusCode === 200) {
|
|||
|
// console.log('下载成功');
|
|||
|
callBack(res.tempFilePath)
|
|||
|
}
|
|||
|
callBack()
|
|||
|
},
|
|||
|
fail: (err) => {
|
|||
|
console.error(err)
|
|||
|
},
|
|||
|
complete: (e) => {
|
|||
|
// console.log("downloadFile",e);
|
|||
|
}
|
|||
|
});
|
|||
|
})
|
|||
|
const extName = tempFilePath.split('.').pop() || 'jpg'
|
|||
|
const cloudPath = 'user/avatar/'+ userId+'/'+Date.now()+'-avatar.'+extName;
|
|||
|
const result = await uniCloud.uploadFile({
|
|||
|
filePath: tempFilePath,
|
|||
|
cloudPath,
|
|||
|
fileType:'image'
|
|||
|
});
|
|||
|
let userInfo = {
|
|||
|
"nickname":nickName,
|
|||
|
"avatar_file":{
|
|||
|
name:cloudPath,
|
|||
|
extname:"jpg",
|
|||
|
url:result.fileID
|
|||
|
}
|
|||
|
}
|
|||
|
this.doUpdate(userInfo,()=>{
|
|||
|
this.$refs.popup.close()
|
|||
|
})
|
|||
|
},
|
|||
|
closeMe(e){
|
|||
|
uni.showLoading();
|
|||
|
this.doUpdate({nickname:"匿名微信用户"},()=>{
|
|||
|
uni.hideLoading()
|
|||
|
this.$refs.popup.close()
|
|||
|
})
|
|||
|
},
|
|||
|
doUpdate(data,callback){
|
|||
|
// 使用 clientDB 提交数据
|
|||
|
usersTable.where('_id==$env.uid').update(data).then((res) => {
|
|||
|
callback(res)
|
|||
|
}).catch((err) => {
|
|||
|
uni.showModal({
|
|||
|
content: err.message || '请求服务失败',
|
|||
|
showCancel: false
|
|||
|
})
|
|||
|
callback(err)
|
|||
|
}).finally(() => {
|
|||
|
this.$emit('next')
|
|||
|
uni.hideLoading()
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
@import "@/uni_modules/uni-id-pages/common/login-page.scss";
|
|||
|
view{
|
|||
|
display: flex;
|
|||
|
}
|
|||
|
.box{
|
|||
|
background-color: #FFFFFF;
|
|||
|
height:200px;
|
|||
|
width: 750rpx;
|
|||
|
flex-direction: column;
|
|||
|
border-top-left-radius: 15px;
|
|||
|
border-top-right-radius: 15px;
|
|||
|
}
|
|||
|
.headBox{
|
|||
|
padding:20rpx;
|
|||
|
height:80rpx;
|
|||
|
line-height:80rpx;
|
|||
|
text-align: left;
|
|||
|
font-size:16px;
|
|||
|
color:#333333;
|
|||
|
margin-left: 15rpx;
|
|||
|
}
|
|||
|
.tip{
|
|||
|
color:#666666;
|
|||
|
text-align: left;
|
|||
|
justify-content: center;
|
|||
|
margin:10rpx 30rpx;
|
|||
|
font-size:18px;
|
|||
|
}
|
|||
|
.btnBox{
|
|||
|
margin-top:45rpx;
|
|||
|
justify-content: center;
|
|||
|
flex-direction: row;
|
|||
|
}
|
|||
|
.close,.agree{
|
|||
|
text-align: center;
|
|||
|
width:200rpx;
|
|||
|
height:80rpx;
|
|||
|
line-height:80rpx;
|
|||
|
border-radius:5px;
|
|||
|
margin:0 20rpx;
|
|||
|
font-size:14px;
|
|||
|
}
|
|||
|
.close{
|
|||
|
color:#999999;
|
|||
|
border-color: #EEEEEE;
|
|||
|
border-style: solid;
|
|||
|
border-width: 1px;
|
|||
|
background-color:#FFFFFF;
|
|||
|
}
|
|||
|
.close:active{
|
|||
|
color:#989898;
|
|||
|
background-color:#E2E2E2;
|
|||
|
}
|
|||
|
.agree{
|
|||
|
color:#FFFFFF;
|
|||
|
}
|
|||
|
/* #ifdef MP */
|
|||
|
.agree::after {
|
|||
|
border: none;
|
|||
|
}
|
|||
|
/* #endif */
|
|||
|
.agree:active{
|
|||
|
background-color:#F5F5F6;
|
|||
|
}
|
|||
|
</style>
|