公司小程序
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.

473 lines
11 KiB

<!--个人中心-->>
<template>
<view class="main">
<u-navbar
title="个人主页"
:safeAreaInsetTop="true"
:fixed="true"
bgColor="#FFFFFF00"
:placeholder="true"
@leftClick="onBackTouched"
/>
<u-line :dashed="false" color="#E2E2E2" customStyle="border: 1rpx solid #E2E2E2;"></u-line>
<view class="body">
<u-form
labelPosition="left"
ref="form1"
:model="player"
:rules="rules"
:labelStyle="form_tile_title"
>
<u-form-item v-for="(item,index) in rules" :key="item.getValue(player)" :prop="index" borderBottom :ref="index" @click="onTouchOneItem">
<view class="form_item_global">
<text class="form_title_global">
{{item.title}}
</text>
<view v-if="index == 'headUrl'">
<image :src="item.getValue(player)" class="head"/>
</view>
<view v-else-if="index == 'phone'">
<!--手机号码要特殊处理-->
<button v-if="item.getValue(player) == ''" class="phone_get_button" open-type="getPhoneNumber" @getphonenumber="onTouchToGetPhone">点击获取手机号码></button>
<text v-else class="form_title_global">{{item.getValue(player)}}</text>
</view>
<view v-else style="width: 550rpx;height: 110rpx;display: flex;flex-direction: row;align-items: center;justify-content: flex-end;">
<input
:placeholder="item.message"
class="form_input_global"
placeholder-class="form_input_placeholder_global"
:value="item.getValue(player)"
@blur='(object)=>{
onBlurCallback(index,object);
}'
v-if="item.enableInput"
/>
<view v-else>
<text v-if="item.getValue(player) == ''" class="form_input_placeholder_global">{{item.message}}</text>
<text class="form_title_global" v-else>{{item.getValue(player)}}</text>
</view>
</view>
</view>
</u-form-item>
</u-form>
</view>
<u-gap height="37rpx" />
<view class="intro_box">
<text class="item_title" style="position: absolute;left: 0;">简介</text>
<view class="intro_area">
<textarea
class="textarea"
placeholder="请输入您的简单介绍"
placeholder-class='form_holder'
@blur="onEditPlayerIntro"
:value="player.introduction"
>
</textarea>
</view>
</view>
<u-gap height="40rpx" />
<button class="confirm_button_global" @click="doConfirm" hover-class="confirm_button_hover_class">
确认
</button>
<u-gap height="20rpx" />
<button class="cancel_button_global" hover-class="cancel_button_hover_class" @click="doLoginOut">退出登录</button>
<u-gap height="100rpx" />
<min-picker
:startTime="startTime"
:endTime="endTime"
@cancel="onDateSelectCanceled"
@sure="onDateSelectConfirm"
:show="isDateSelectShowing"
heightRpx="500"
:currentTime="currentTime"
></min-picker>
<u-modal :show="isShowLogoutModal"
title="提示"
content="您确定要退出当前账号吗?"
confirmText="退出"
@confirm="onConfirmLogout"
@cancel="onCancelLogout"
:closeOnClickOverlay="true"
:showCancelButton="true"
@close="onCancelLogout"
/>
</view>
</template>
<script>
var Define = getApp().globalData.Define;
var Player = getApp().globalData.Player;
import {post} from '@/common/api.js'
export default {
mounted() {
this.$refs.form1.setRules(this.rules);
},
data() {
return {
player : Player,
///生日选择器是否在活动中
isDateSelectShowing : false,
///是否显示退出提示的确认框
isShowLogoutModal : false,
rules:{
///头像
headUrl : {
type : 'string',
title : '头像',
message : '',
//是否允许输入
enableInput : false,
///获取里面的值
getValue(player){
if(player.headimgurl == ''){
return "../../static/images/wode/touxiang_6.png";
}
return player.headimgurl;
},
validator:(object)=>{},
},
name : {
type : 'string',
title : '昵称',
key : 'name',
message : '',
//是否允许输入
enableInput : false,
///获取里面的值
getValue(player){
if(player.nickname == ''){
return "没有获取到昵称";
}
return player.nickname;
},
validator:(object)=>{},
},
sex : {
type : 'string',
title : '性别',
key : 'sex',
message : '',
//是否允许输入
enableInput : false,
///获取里面的值
getValue(player){
if(player.sex == 0){
return "女";
}
return '男';
},
validator:(object)=>{},
},
phone : {
type : 'string',
title : '手机号码',
key : 'phone',
message : '',
//是否允许输入
enableInput : false,
///获取里面的值
getValue(player){
return player.phone;
},
validator:(object)=>{},
},
birthday : {
type : 'string',
title : '生日',
key : 'birthday',
message : '未选择',
//是否允许输入
enableInput : false,
///获取当前可以显示的值
getValue(player){
return player.birthday;
},
validator:(object)=>{},
},
profession : {
type : 'string',
title : '职业',
key : 'occupation',
message : '未填写',
//是否允许输入
enableInput : true,
trigger : 'blur',
///获取里面的值
getValue(player){
return player.occupation;
},
///输入了数据,这里验证
validator:(object)=>{
this.player.occupation = object.detail.value;
},
},
},
form_tile_title : {
width: '170rpx',
height: '37rpx',
fontSize: 26,
fontWeight: 500,
color: 'black',
},
startTime : [1900,1,1],
endTime : 2022,
currentTime : this.getCurrentDateSelectTime(),
};
},
methods:{
onBackTouched(){
uni.navigateBack({
});
},
///从player的birtday数据来初始化
getCurrentDateSelectTime(){
var player = Player;
if(player.birthday == ''){
return null;
}
var str = player.birthday;
//以-分割
var arr = str.split('-');
//需要转换称number
return [parseInt(arr[0]),parseInt(arr[1]),parseInt(arr[2])];
},
///显示生日选择器
onOpenDateSelect(){
this.isDateSelectShowing = true;
},
///当生日选择器点击了确认,返回了一个日志
onDateSelectConfirm(e){
console.log(e);
//关闭选择器
this.isDateSelectShowing = false;
//更新用户的生日系统
var year = parseInt(e.a);
var mouth = parseInt(e.b);
var day = parseInt(e.c);
var str = year + "-" + mouth + "-" + day;
this.player.birthday = str;
this.currentTime = [year,mouth,day];
},
///生日选择器取消了选择
onDateSelectCanceled(){
this.isDateSelectShowing = false;
},
///当前几了某一行item,回调参数为当前的prop,prop内容为rules里面的key
onTouchOneItem(prop){
console.log(prop);
if(prop == 'birthday'){
//点击的是生日,弹出生日选择器
this.isDateSelectShowing = true;
return;
}
if(prop == "phone"){
//弹出获取手机号码的授权信息
return;
}
},
///当某些输入框失去焦点
onBlurCallback(key,obj){
var item = this.rules[key];
if(item != null){
item.validator(obj);
}
},
///用户更新了自己的简介
onEditPlayerIntro(obj){
console.log(obj);
this.player.introduction = obj.detail.value;
},
///点击了确认按钮
async doConfirm(){
console.log("You just confirmed!");
let data = {
birthday : this.player.birthday,
introduction : this.player.introduction,
occupation : this.player.occupation,
};
uni.showLoading({
});
let res = await post('users/updateselfinfo',data);
console.log(res);
uni.hideLoading();
if(res.length > 1){
//成功以后,退出当前界面
uni.navigateBack({
});
}
},
///退出登录
doLoginOut(){
console.log("You just loginout!");
this.isShowLogoutModal = true;
},
///点击按钮,开始获取用户的手机号码
async onTouchToGetPhone(e){
console.log("获取手机号码的返回:",e);
var code = e.detail.code;
if(!code){
uni.showToast({
title:'您拒绝了手机获取授权'
})
return;
}
uni.showLoading();
var res = await post("users/wechatbindmobile",{code : code});
uni.hideLoading();
if(res.length <= 1){
//获取失败
return;
}
var info = res[1];
var code = info.data.code;
if(code != 0){
//有问题,返回。
return;
}
var data = info.data.data;
console.log(data);
var phonenumber = data.phonenumber;
this.player.phone = phonenumber;
},
///同意退出当前账号
onConfirmLogout(){
//干掉当前的token,让他从新去获取,把当前player里面数据都干掉
uni.clearStorageSync(); //清理掉所有缓存
var Player = getApp().globalData.Player;
Player.clear();
this.isShowLogoutModal = false;
uni.showToast({
title:'退出成功'
})
uni.navigateBack({
});
},
///取消退出,啥也不做
onCancelLogout(){
this.isShowLogoutModal = false;
}
}
}
</script>
<style lang="scss" scoped>
button::after{border: none;padding: 0;}
.body{
width: 702rpx;
height: 920rpx;
position: relative;
//background-color: #FFFFFF;
border-radius: 20rpx;
left: 24rpx;
}
.head{
width: 97rpx;
height: 97rpx;
position: absolute;
right: 20rpx;
top: 6rpx;
border-radius: 50%;
}
///点击获取手机号码的按钮
.phone_get_button{
width: 550rpx;
height: 110rpx;
background-color: #F6F6F6;
//text-align: right;
font-size: 28rpx;
color: #999999;
display: flex;
justify-content: flex-end;
align-items: center;
border: none;
}
.intro_box{
width: 702rpx;
height: 200rpx;
position: relative;
border-radius: 20rpx;
left: 24rpx;
//background-color: #0081FF;
}
.intro_area{
width: 702rpx;
height: 166rpx;
background: #FFFFFF;
border: 1rpx solid #E2E2E2;
opacity: 1;
border-radius: 12rpx;
position: absolute;
left: 0;
top: 60rpx;
}
.textarea{
width: 662rpx;
height: 126rpx;
//background-color: #1CBBB4;
left: 20rpx;
top: 20rpx;
font-size: 28rpx;
font-weight: 400;
color: #333333;
}
.confirm_button{
width: 702rpx;
height: 90rpx;
background: #D49B4B;
opacity: 1;
border-radius: 93rpx;
position: relative;
left: 24rpx;
top: 20rpx;
display: flex;
align-items: center;
justify-content: center;
}
.confirm_text{
width: 72rpx;
height: 50rpx;
font-size: 36rpx;
font-family: PingFang SC;
font-weight: 400;
color: #FFFFFF;
opacity: 1;
}
</style>