442 lines
11 KiB
Vue
442 lines
11 KiB
Vue
|
|
<template>
|
|||
|
|
<view :data-theme="theme">
|
|||
|
|
<form @submit="formSubmit" report-submit='true'>
|
|||
|
|
<view class='personal-data borderPad'>
|
|||
|
|
<view class='list borRadius14 bg--w111-fff mt20'>
|
|||
|
|
<view class="item acea-row row-between-wrapper">
|
|||
|
|
<view>头像</view>
|
|||
|
|
<!-- #ifndef MP -->
|
|||
|
|
<view class="pictrue" @click.stop='uploadpic'>
|
|||
|
|
<image :src='avatarUrl'></image>
|
|||
|
|
<image :src='editPng' class="alter"></image>
|
|||
|
|
</view>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
<!-- #ifdef MP -->
|
|||
|
|
<view class="pictrue">
|
|||
|
|
<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
|
|||
|
|
<image class="avatar" :src="avatarUrl"></image>
|
|||
|
|
</button>
|
|||
|
|
<image :src='editPng' class="alter"></image>
|
|||
|
|
</view>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between-wrapper'>
|
|||
|
|
<view>昵称</view>
|
|||
|
|
<view class='input fontColor'>
|
|||
|
|
<!-- #ifndef MP -->
|
|||
|
|
<input type='text' name='nickname' :value='nickname' maxlength="20"></input>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
<!-- #ifdef MP -->
|
|||
|
|
<input type="nickname" name='nickname' :value='nickname' class="weui-input"
|
|||
|
|
placeholder="请输入昵称" maxlength="20"/>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between-wrapper'>
|
|||
|
|
<view>性别</view>
|
|||
|
|
<view class='input'>
|
|||
|
|
<picker @change="bindSexChange" :value="sexindex" :range="sexList" range-key="name">
|
|||
|
|
<view class="uni-input">{{sexList[sexindex].name}}</view>
|
|||
|
|
</picker>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between-wrapper'>
|
|||
|
|
<view>出生日期</view>
|
|||
|
|
<view class='input'>
|
|||
|
|
<picker mode="date" :value="date"
|
|||
|
|
@change="bindDateChange">
|
|||
|
|
<view class="uni-input">{{date}}</view>
|
|||
|
|
</picker>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between-wrapper'>
|
|||
|
|
<view>地区</view>
|
|||
|
|
<view class='input'>
|
|||
|
|
<picker mode="multiSelector" :value="cityIndex" :range="cityData" @change="bindCityChange"
|
|||
|
|
@columnchange="selMonitor">
|
|||
|
|
<view class="uni-input">{{addressNode.province&&addressNode.city ? addressNode.province + ' , ' + addressNode.city : '-'}}
|
|||
|
|
</view>
|
|||
|
|
</picker>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<button class='modifyBnt bg-color' formType="submit">保存修改</button>
|
|||
|
|
</view>
|
|||
|
|
</form>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Author: CRMEB Team <admin@crmeb.com>
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
import {
|
|||
|
|
userEdit
|
|||
|
|
} from '@/api/user.js';
|
|||
|
|
import {
|
|||
|
|
getCity
|
|||
|
|
} from '@/api/api.js';
|
|||
|
|
import {
|
|||
|
|
toLogin
|
|||
|
|
} from '@/libs/login.js';
|
|||
|
|
import {
|
|||
|
|
mapGetters
|
|||
|
|
} from "vuex";
|
|||
|
|
import {
|
|||
|
|
Debounce
|
|||
|
|
} from '@/utils/validate.js'
|
|||
|
|
import city from "../static/js/city.js";
|
|||
|
|
let app = getApp();
|
|||
|
|
const CACHE_ADDRESS = {};
|
|||
|
|
export default {
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
memberInfo: {
|
|||
|
|
avatar: '',
|
|||
|
|
},
|
|||
|
|
userIndex: 0,
|
|||
|
|
wechat: false,
|
|||
|
|
theme: app.globalData.theme,
|
|||
|
|
editPng: '../../../static/images/alert1.png',
|
|||
|
|
sexList: [{
|
|||
|
|
val: 0,
|
|||
|
|
name: '未知'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
val: 1,
|
|||
|
|
name: '男'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
val: 2,
|
|||
|
|
name: '女'
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
sexindex: 0,
|
|||
|
|
date: '2000-01-01',
|
|||
|
|
sex: 0,
|
|||
|
|
cityData: city,
|
|||
|
|
cityIndex: 0,
|
|||
|
|
addressNode: {
|
|||
|
|
province: "请选择城市",
|
|||
|
|
city: ""
|
|||
|
|
},
|
|||
|
|
provinceList: [],
|
|||
|
|
cityAllList: [],
|
|||
|
|
avatarUrl: "",
|
|||
|
|
nickname: '',
|
|||
|
|
userInfo: null
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
computed: {
|
|||
|
|
...mapGetters(['isLogin']),
|
|||
|
|
startDate() {
|
|||
|
|
return this.getDate('start');
|
|||
|
|
},
|
|||
|
|
endDate() {
|
|||
|
|
return this.getDate('end');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
onLoad() {
|
|||
|
|
//this.loadAddress(1, 1);
|
|||
|
|
if (!this.isLogin) {
|
|||
|
|
toLogin();
|
|||
|
|
} else {
|
|||
|
|
this.getUserInfo();
|
|||
|
|
}
|
|||
|
|
this.getAddressData();
|
|||
|
|
// #ifdef H5
|
|||
|
|
let ua = navigator.userAgent.toLowerCase();
|
|||
|
|
if (ua.match(/MicroMessenger/i) == "micromessenger") {
|
|||
|
|
this.$set(this, 'wechat', false);
|
|||
|
|
} else {
|
|||
|
|
this.$set(this, 'wechat', true);
|
|||
|
|
}
|
|||
|
|
// #endif
|
|||
|
|
switch (this.theme) {
|
|||
|
|
case 'theme2':
|
|||
|
|
this.editPng = '../static/images/alert2.png'
|
|||
|
|
break;
|
|||
|
|
case 'theme3':
|
|||
|
|
this.editPng = '../static/images/alert3.png'
|
|||
|
|
break;
|
|||
|
|
case 'theme4':
|
|||
|
|
this.editPng = '../static/images/alert4.png'
|
|||
|
|
break;
|
|||
|
|
case 'theme5':
|
|||
|
|
this.editPng = '../static/images/alert5.png'
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
this.editPng = '../static/images/alert1.png'
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
getUserInfo(data) {
|
|||
|
|
this.$store.dispatch('USERINFO').then(res => {
|
|||
|
|
this.userInfo = res;
|
|||
|
|
this.avatarUrl = this.userInfo.avatar ? this.userInfo.avatar : '../static/images/f.png';
|
|||
|
|
this.nickname = this.userInfo.nickname ? this.userInfo.nickname : '-';
|
|||
|
|
this.date = this.userInfo.birthday || '2000-01-01';
|
|||
|
|
this.sexindex = this.userInfo.sex;
|
|||
|
|
this.sex = this.sexList[this.sexindex].val;
|
|||
|
|
this.addressNode = {
|
|||
|
|
province: this.userInfo.province,
|
|||
|
|
city: this.userInfo.city
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 小程序端上传头像
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
onChooseAvatar(e) {
|
|||
|
|
const {
|
|||
|
|
avatarUrl
|
|||
|
|
} = e.detail
|
|||
|
|
uni.showLoading({
|
|||
|
|
title: '加载中...'
|
|||
|
|
});
|
|||
|
|
this.$util.uploadImgs( avatarUrl, {
|
|||
|
|
url: 'upload/image',
|
|||
|
|
name: 'multipart',
|
|||
|
|
model: "maintain",
|
|||
|
|
pid: 0
|
|||
|
|
},(res) => {
|
|||
|
|
this.avatarUrl = res.data.url;
|
|||
|
|
uni.hideLoading();
|
|||
|
|
}, (err) => {
|
|||
|
|
uni.hideLoading();
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 监听省市区滚动
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
selMonitor(e) {
|
|||
|
|
const that = this
|
|||
|
|
let column = e.detail.column
|
|||
|
|
if (column == 0) {
|
|||
|
|
let index = e.detail.value
|
|||
|
|
let length = that.cityData[1].length
|
|||
|
|
// 改变市
|
|||
|
|
that.cityData[1].splice(0, length, ...that.cityAllList[index])
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 将省市区的数据转换为picker可用的多维数组
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
getAddressData() {
|
|||
|
|
// 所有城市列表,二维数组
|
|||
|
|
let cityAllList = [];
|
|||
|
|
// 省列表
|
|||
|
|
let provinceList = [];
|
|||
|
|
// cityData为省市区的json数据
|
|||
|
|
for (let key in this.cityData) {
|
|||
|
|
let newDataList = [];
|
|||
|
|
if (this.cityData[key].child) {
|
|||
|
|
for (let key2 in this.cityData[key].child) {
|
|||
|
|
newDataList.push(this.cityData[key].child[key2].city);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
provinceList.push(this.cityData[key].province);
|
|||
|
|
cityAllList.push(newDataList);
|
|||
|
|
}
|
|||
|
|
this.provinceList = provinceList;
|
|||
|
|
this.cityAllList = cityAllList;
|
|||
|
|
this.cityData = [provinceList, cityAllList[0]];
|
|||
|
|
},
|
|||
|
|
bindCityColumnChange(e) {
|
|||
|
|
let column = e.detail.column
|
|||
|
|
if (column == 0) {
|
|||
|
|
let index = e.detail.value
|
|||
|
|
this.cityData[1] = this.cityAllList[index]
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
bindCityChange(e) {
|
|||
|
|
let val = e.target.value
|
|||
|
|
this.addressNode = {
|
|||
|
|
province: this.cityData[0][val[0]],
|
|||
|
|
city: this.cityData[1][val[1]]
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
bindSexChange(e) {
|
|||
|
|
this.sexindex = e.detail.value;
|
|||
|
|
this.sex = this.sexList[this.sexindex].val;
|
|||
|
|
},
|
|||
|
|
bindDateChange: function(e) {
|
|||
|
|
this.date = e.detail.value
|
|||
|
|
},
|
|||
|
|
getDate(type) {
|
|||
|
|
const date = new Date();
|
|||
|
|
let year = date.getFullYear();
|
|||
|
|
let month = date.getMonth() + 1;
|
|||
|
|
let day = date.getDate();
|
|||
|
|
|
|||
|
|
if (type === 'start') {
|
|||
|
|
year = year - 60;
|
|||
|
|
} else if (type === 'end') {
|
|||
|
|
year = year + 2;
|
|||
|
|
}
|
|||
|
|
month = month > 9 ? month : '0' + month;
|
|||
|
|
day = day > 9 ? day : '0' + day;
|
|||
|
|
return `${year}-${month}-${day}`;
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 上传文件
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
uploadpic: function() {
|
|||
|
|
let that = this;
|
|||
|
|
that.$util.uploadImageOne({
|
|||
|
|
url: 'upload/image',
|
|||
|
|
name: 'multipart',
|
|||
|
|
model: "maintain",
|
|||
|
|
pid: 0,
|
|||
|
|
count: 1
|
|||
|
|
}, function(res) {
|
|||
|
|
that.avatarUrl = res;
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 提交修改
|
|||
|
|
*/
|
|||
|
|
formSubmit: Debounce(function(e) {
|
|||
|
|
let that = this,
|
|||
|
|
value = e.detail.value
|
|||
|
|
if (!value.nickname) return that.$util.Tips({
|
|||
|
|
title: '用户姓名不能为空'
|
|||
|
|
});
|
|||
|
|
value.avatar = that.avatarUrl ? that.avatarUrl : that.userInfo.avatar;
|
|||
|
|
uni.showLoading({
|
|||
|
|
title: '加载中...'
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
userEdit({
|
|||
|
|
avatar: value.avatar,
|
|||
|
|
birthday: that.date,
|
|||
|
|
city: this.addressNode.city,
|
|||
|
|
province: this.addressNode.province,
|
|||
|
|
nickname: value.nickname,
|
|||
|
|
sex: that.sex
|
|||
|
|
}).then(res => {
|
|||
|
|
uni.hideLoading();
|
|||
|
|
that.$util.Tips({
|
|||
|
|
title: '保存成功',
|
|||
|
|
icon: 'success'
|
|||
|
|
});
|
|||
|
|
setTimeout(function() {
|
|||
|
|
uni.reLaunch({
|
|||
|
|
url: '/pages/user/index',
|
|||
|
|
})
|
|||
|
|
}, 2000);
|
|||
|
|
|
|||
|
|
}).catch(msg => {
|
|||
|
|
uni.hideLoading();
|
|||
|
|
return that.$util.Tips({
|
|||
|
|
title: msg || '保存失败,您并没有修改'
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.fontColor {
|
|||
|
|
color: #868686;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .wrapper {
|
|||
|
|
margin: 10rpx 0;
|
|||
|
|
background-color: #fff;
|
|||
|
|
padding: 36rpx 30rpx 13rpx 30rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .wrapper .title {
|
|||
|
|
margin-bottom: 30rpx;
|
|||
|
|
font-size: 32rpx;
|
|||
|
|
color: #282828;
|
|||
|
|
}
|
|||
|
|
.list{
|
|||
|
|
padding: 0 30rpx;
|
|||
|
|
}
|
|||
|
|
.personal-data .list .item {
|
|||
|
|
border-bottom: 1rpx solid #f2f2f2;
|
|||
|
|
padding: 36rpx 0;
|
|||
|
|
font-size: 32rpx;
|
|||
|
|
color: #333333;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .list .item .phone {
|
|||
|
|
width: 160rpx;
|
|||
|
|
height: 56rpx;
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
color: #fff;
|
|||
|
|
line-height: 56rpx;
|
|||
|
|
border-radius: 32rpx
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .list .item .pictrue {
|
|||
|
|
width: 80rpx;
|
|||
|
|
height: 80rpx;
|
|||
|
|
position: relative;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .list .item .pictrue image {
|
|||
|
|
width: 80rpx;
|
|||
|
|
height: 80rpx;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .list .item .pictrue .alter {
|
|||
|
|
width: 30rpx;
|
|||
|
|
height: 30rpx;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
position: absolute;
|
|||
|
|
bottom: 0;
|
|||
|
|
right: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .list .item .input {
|
|||
|
|
width: 415rpx;
|
|||
|
|
text-align: right;
|
|||
|
|
color: #666666;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .list .item .input .id {
|
|||
|
|
width: 365rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .list .item .input .iconfont {
|
|||
|
|
font-size: 35rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.personal-data .modifyBnt {
|
|||
|
|
font-size: 32rpx;
|
|||
|
|
color: #fff;
|
|||
|
|
width: 690rpx;
|
|||
|
|
height: 90rpx;
|
|||
|
|
border-radius: 50rpx;
|
|||
|
|
text-align: center;
|
|||
|
|
line-height: 90rpx;
|
|||
|
|
margin: 76rpx auto 0 auto;
|
|||
|
|
}
|
|||
|
|
.personal-data .logOut {
|
|||
|
|
font-size: 32rpx;
|
|||
|
|
text-align: center;
|
|||
|
|
width: 690rpx;
|
|||
|
|
height: 90rpx;
|
|||
|
|
border-radius: 45rpx;
|
|||
|
|
margin: 30rpx auto 0 auto;
|
|||
|
|
}
|
|||
|
|
</style>
|