| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 | 
							- <template>
 
- 	<view class="app">
 
- 		<view class="cell">
 
- 			<text class="tit fill">头像</text>
 
- 			<view class="avatar-wrap" @click="chooseImage">
 
- 				<image class="avatar" :src="tempAvatar || userInfo.avatar || '/static/icon/default-avatar.png'" mode="aspectFill"></image>
 
- 				<!-- 进度遮盖 -->
 
- 				<view class="progress center"
 
- 					:class="{
 
- 						'no-transtion': uploadProgress === 0,
 
- 						show: uploadProgress != 100
 
- 					}"
 
- 					:style="{
 
- 						width: uploadProgress + '%',
 
- 						height: uploadProgress + '%',
 
- 					}"></view>
 
- 			</view>
 
- 		</view>
 
- 		<view class="cell b-b">
 
- 			<text class="tit fill">昵称</text>
 
- 			<input class="input" v-model="userInfo.nickname" type="text" maxlength="8" placeholder="请输入昵称" placeholder-class="placeholder">
 
- 		</view>
 
- 		<u-cell-group>
 
- 			<u-cell title="昵称" :value="userInfo.nickname" isLink @click="nicknameClick()"></u-cell>
 
- 		</u-cell-group>
 
- 		
 
- 		<u-modal :show="nicknameOpen" title="修改昵称" showCancelButton @confirm="nicknameSubmit" @cancel="nicknameCancel">
 
- 			<view class="slot-content">
 
- 				<u--form labelPosition="left" :model="nicknameForm" :rules="nicknameRules" ref="nicknameForm" errorType="toast">
 
- 					<u-form-item prop="nickname">
 
- 						<u--input v-model="nicknameForm.nickname" placeholder="请输入昵称" border="none"></u--input>
 
- 					</u-form-item>
 
- 				</u--form>
 
- 			</view>
 
- 		</u-modal>
 
- 		
 
- 	</view>
 
- </template>
 
- <script>
 
- 	export default {
 
- 		data() {
 
- 			return {
 
- 				uploadProgress: 100, //头像上传进度
 
- 				tempAvatar: '', 
 
- 				userInfo: {},
 
- 				nicknameOpen: false,
 
- 				nicknameForm: {
 
- 					nickname: ''
 
- 				},
 
- 				nicknameRules: {
 
- 					nickname: [{
 
- 						required: true,
 
- 						message: '请输入昵称'
 
- 					}]
 
- 				}
 
- 			}
 
- 		},
 
- 		computed: {
 
- 			curUserInfo(){
 
- 				return this.$store.state.userInfo
 
- 			}
 
- 		},
 
- 		watch: {
 
- 			curUserInfo(curUserInfo){
 
- 				const {avatar, nickname, gender} = curUserInfo;
 
- 				this.userInfo = {avatar, nickname, gender,};
 
- 			}
 
- 		},
 
- 		onLoad() {
 
- 			const {avatar, nickname, gender, anonymous} = this.curUserInfo;
 
- 			this.userInfo = {avatar, nickname, gender};
 
- 		},
 
- 		methods: {
 
- 			nicknameClick() {
 
- 				this.nicknameOpen = true;
 
- 				this.nicknameForm.nickname = this.userInfo.nickname;
 
- 			},
 
- 			nicknameCancel() {
 
- 				this.nicknameOpen = false;
 
- 			},
 
- 			nicknameSubmit() {
 
- 				this.$refs.nicknameForm.validate().then(() => {
 
- 					this.loading = true;
 
- 					// 执行登陆
 
- 					const { mobile, code, password} = this.form;
 
- 					const loginPromise = this.loginType == 'password' ? login(mobile, password) :
 
- 						smsLogin(mobile, code);
 
- 					loginPromise.then(data => {
 
- 						// 登陆成功
 
- 						this.loginSuccessCallBack(data);
 
- 					}).catch(errors => {
 
- 					}).finally(() => {
 
- 						this.loading = false;
 
- 					})
 
- 				}).catch(errors => {
 
- 				});
 
- 			},
 
- 			// 提交修改
 
- 			async confirm() {
 
- 				// 校验信息是否变化
 
- 				const {uploadProgress, userInfo, curUserInfo} = this;
 
- 				let isUpdate = false;
 
- 				for (let key in userInfo) {
 
- 					if(userInfo[key] !== curUserInfo[key]){
 
- 						isUpdate = true;
 
- 						break;
 
- 					}
 
- 				}
 
- 				if (isUpdate === false) {
 
- 					this.$util.msg('信息未修改');
 
- 					this.$refs.confirmBtn.stop();
 
- 					return;
 
- 				}
 
- 				if (!userInfo.avatar) {
 
- 					this.$util.msg('请上传头像');
 
- 					this.$refs.confirmBtn.stop();
 
- 					return;
 
- 				}
 
- 				if (uploadProgress !== 100) {
 
- 					this.$util.msg('请等待头像上传完毕');
 
- 					this.$refs.confirmBtn.stop();
 
- 					return;
 
- 				}
 
- 				if (!userInfo.nickname) {
 
- 					this.$util.msg('请输入您的昵称');
 
- 					this.$refs.confirmBtn.stop();
 
- 					return;
 
- 				}
 
- 				const res = await this.$request('user', 'update', userInfo);
 
- 				this.$refs.confirmBtn.stop();
 
- 				this.$util.msg(res.msg);
 
- 				if(res.status === 1){
 
- 					this.$store.dispatch('getUserInfo'); //刷新用户信息
 
- 					setTimeout(()=>{
 
- 						uni.navigateBack();
 
- 					}, 1000)
 
- 				}
 
- 			},
 
- 			// 选择头像
 
- 			chooseImage(){
 
- 				uni.chooseImage({
 
- 					count: 1,
 
- 					success: res=> {
 
- 						uni.navigateTo({
 
- 							url: `./cutImage/cut?src=${res.tempFilePaths[0]}` 
 
- 						});
 
- 					}
 
- 				});
 
- 			}, 
 
- 			// 裁剪回调
 
- 			async setAvatar(filePath){
 
- 				this.tempAvatar = filePath;
 
- 				this.uploadProgress = 0;
 
- 				const result = await uniCloud.uploadFile({
 
- 					filePath: filePath,
 
- 					cloudPath: + new Date() + ('000000' + Math.floor(Math.random() * 999999)).slice(-6) + '.jpg',
 
- 					onUploadProgress: e=> {
 
- 						this.uploadProgress = Math.round(
 
- 							(e.loaded * 100) / e.total
 
- 						);
 
- 					}
 
- 				});
 
- 				if(!result.fileID){
 
- 					this.$util.msg('头像上传失败');
 
- 					return;
 
- 				}
 
- 				if(typeof uniCloud.getTempFileURL === 'undefined'){
 
- 					this.userInfo.avatar = result.fileID;
 
- 				}else{
 
- 					const tempFiles = await uniCloud.getTempFileURL({
 
- 						fileList: [result.fileID]
 
- 					})
 
- 					const tempFile = tempFiles.fileList[0];
 
- 					if(tempFile.download_url || tempFile.fileID){
 
- 						this.userInfo.avatar = tempFile.download_url || tempFile.fileID;
 
- 					}else{
 
- 						this.$util.msg('头像上传失败');
 
- 					}
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- </script>
 
- <style scoped lang="scss">
 
- 	.app{
 
- 		padding-top: 16rpx;
 
- 	}
 
- 	.cell{
 
- 		display: flex;
 
- 		align-items: center;
 
- 		min-height: 110rpx;
 
- 		padding: 0 40rpx;
 
- 		
 
- 		&:first-child{
 
- 			margin-bottom: 10rpx;
 
- 		}
 
- 		&:after{
 
- 			left: 40rpx;
 
- 			right: 40rpx;
 
- 			border-color: #d8d8d8;
 
- 		}
 
- 		.tit{
 
- 			font-size: 30rpx;
 
- 			color: #333;
 
- 		}
 
- 		.avatar-wrap{
 
- 			width: 120rpx;
 
- 			height: 120rpx;
 
- 			position: relative;
 
- 			border-radius: 100rpx;
 
- 			overflow: hidden;
 
- 			
 
- 			.avatar{
 
- 				width: 100%;
 
- 				height: 100%;
 
- 				border-radius: 100rpx;
 
- 			}
 
- 			.progress{
 
- 				position: absolute;
 
- 				left: 50%;
 
- 				top: 50%;
 
- 				transform: translate(-50%, -50%);
 
- 				width: 100rpx;
 
- 				height: 100rpx;
 
- 				box-shadow: rgba(0,0,0,.6) 0px 0px 0px 2005px;
 
- 				border-radius: 100rpx;
 
- 				transition: .5s;
 
- 				opacity: 0;
 
- 				
 
- 				&.no-transtion{
 
- 					transition: 0s;
 
- 				}
 
- 				&.show{
 
- 					opacity: 1;
 
- 				}
 
- 			}
 
- 		}
 
- 		.input{
 
- 			flex: 1;
 
- 			text-align: right;
 
- 			font-size: 28rpx;
 
- 			color: #333;
 
- 		}
 
- 		switch{
 
- 			margin: 0;
 
- 			transform: scale(0.8) translateX(10rpx);
 
- 			transform-origin: center right;
 
- 		}
 
- 		.tip{
 
- 			margin-left: 20rpx;
 
- 			font-size: 28rpx;
 
- 			color: #999;
 
- 		}
 
- 		.checkbox{
 
- 			padding: 12rpx 0 12rpx 40rpx;
 
- 			font-size: 28rpx;
 
- 			color: #333;
 
- 			
 
- 			.mix-icon{
 
- 				margin-right: 12rpx;
 
- 				font-size: 36rpx;
 
- 				color: #ccc;
 
- 			}
 
- 			.icon-xuanzhong{
 
- 				color: $base-color;
 
- 			}
 
- 		}
 
- 	}
 
- </style>
 
 
  |