379 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			379 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
|   | <template> | ||
|  | 	<view class="content"> | ||
|  | 		<view class="mine-top"> | ||
|  | 			<image class="mine-top-img" src="/static/images/mine-bg.png" mode=""></image> | ||
|  | 		</view> | ||
|  | 		<view class="mine-card"> | ||
|  | 			<view class="mine-card-left" v-if="user.userId"> | ||
|  | 				<button class="avatar-wrapper" type="balanced" open-type="chooseAvatar" @chooseavatar="onChooseavatar"> | ||
|  | 					<img class="mine-card-img" :src="user.avatar ? user.avatar : '/static/images/avatar1.png'" alt=""> | ||
|  | 				</button> | ||
|  | 			</view> | ||
|  | 			<view class="mine-card-left" v-else> | ||
|  | 				<img class="mine-card-img" :src="user.avatar ? user.avatar : '/static/images/avatar1.png'" alt=""> | ||
|  | 			</view> | ||
|  | 			<template v-if="user.userId"> | ||
|  | 				<view class="mine-card-right"> | ||
|  | 					<view class="mine-card-title" @click="nickNameInputShow = true"> | ||
|  | 						{{ user.nickName }} | ||
|  | 					</view> | ||
|  | 					<view class="mine-card-label"> | ||
|  | 						<u-icon name="phone-fill" color="#101010" size="13"></u-icon> | ||
|  | 						<view class="repeat-customer"> | ||
|  | 							{{ user.phonenumber }} | ||
|  | 						</view> | ||
|  | 					</view> | ||
|  | 				</view> | ||
|  | 			</template> | ||
|  | 			<view class="login" v-else @click="login"> | ||
|  | 				请点击登录 | ||
|  | 			</view> | ||
|  | 		</view> | ||
|  | 		<view class="menu-area"> | ||
|  | 			<view v-for="(item,index) in menuArr" :key="index" @click="menuClick(index)" class="cell"> | ||
|  | 				<image class="menu-img" :src="item.pic" mode="aspectFit"></image> | ||
|  | 				<text class="grid-text">{{item.title}}</text> | ||
|  | 			</view> | ||
|  | 		</view> | ||
|  | 		<view class="cell-area"> | ||
|  | 			<u-cell-group> | ||
|  | 				<u-cell v-for="item,index in cellArr" :key="index" :title="item.title" | ||
|  | 					:titleStyle="{fontSize:'30rpx',color:'#232220'}" :isLink="true" arrow-direction="right" size="large" | ||
|  | 					:url="item.url" @click="toCell(item.url)"> | ||
|  | 					<u-icon slot="icon" size="22" :name="item.icon" color="#FFA521"></u-icon> | ||
|  | 				</u-cell> | ||
|  | 				<u-cell @click="toAuthority" title="隐私权限" arrow-direction="right" size="large" :isLink="true" | ||
|  | 					:titleStyle="{fontSize:'30rpx',color:'#232220'}"> | ||
|  | 
 | ||
|  | 					<u-icon slot="icon" size="22" name="setting" color="#FFA521"></u-icon> | ||
|  | 				</u-cell> | ||
|  | 			</u-cell-group> | ||
|  | 		</view> | ||
|  | 		<u-popup :show="nickNameInputShow" mode="center" :closeable="true" @close="closenickNameInputPop"> | ||
|  | 			<view class="nickname-pop"> | ||
|  | 				<text class="nickname-label">您的新昵称(10字之内)</text> | ||
|  | 
 | ||
|  | 				<view class="nickname-input"> | ||
|  | 					<input type="nickname" class="input-style" maxlength="10" v-model="newNickName" placeholder="请输入昵称" | ||
|  | 						border="surround" @blur="bindblur" @input="bindinput" /> | ||
|  | 
 | ||
|  | 				</view> | ||
|  | 				<button class="button-style" type="primary" size="mini" @click="updateProfile">保存</button> | ||
|  | 
 | ||
|  | 			</view> | ||
|  | 		</u-popup> | ||
|  | 	</view> | ||
|  | </template> | ||
|  | 
 | ||
|  | <script> | ||
|  | 	export default { | ||
|  | 		data() { | ||
|  | 			return { | ||
|  | 				user: { | ||
|  | 					nickName: '', | ||
|  | 					avatar: '', | ||
|  | 					phonenumber: '' | ||
|  | 				}, | ||
|  | 				newNickName: '', | ||
|  | 				nickNameInputShow: false, | ||
|  | 				menuArr: [{ | ||
|  | 						name: 'photo', | ||
|  | 						title: '我的儿童', | ||
|  | 						pic: "/static/images/mine-child.png", | ||
|  | 						url: "/minePackage/pages/MineChild" | ||
|  | 					}, | ||
|  | 					{ | ||
|  | 						name: 'lock', | ||
|  | 						title: '历史测试', | ||
|  | 						pic: "/static/images/mine-test.png", | ||
|  | 						url: "/minePackage/pages/MineTest" | ||
|  | 					}, | ||
|  | 				], | ||
|  | 				cellArr: [{ | ||
|  | 						title: "我的收藏", | ||
|  | 						url: "/homePackage/pages/FavEssay", | ||
|  | 						icon: "star-fill" | ||
|  | 					}, | ||
|  | 					{ | ||
|  | 						title: "儿童绑定", | ||
|  | 						url: "/minePackage/pages/BindChild", | ||
|  | 						icon: "plus-people-fill" | ||
|  | 					}, | ||
|  | 				] | ||
|  | 			} | ||
|  | 		}, | ||
|  | 		onShow() { | ||
|  | 			console.log(135235); | ||
|  | 			console.log(this.$store.getters.token); | ||
|  | 			this.getUserInfo() | ||
|  | 		}, | ||
|  | 		methods: { | ||
|  | 			//登录
 | ||
|  | 			login() { | ||
|  | 				uni.navigateTo({ | ||
|  | 					url: "/loginPackage/pages/Login" | ||
|  | 				}) | ||
|  | 			}, | ||
|  | 			async getUserInfo() { | ||
|  | 				const res = await this.$myRequest({ | ||
|  | 					url: '/getAppInfo', | ||
|  | 					method: 'GET' | ||
|  | 				}) | ||
|  | 				this.user = res.data.user; | ||
|  | 				this.user.avatar = this.user.avatar ? this.baseUrl + res.data.user.avatar : require( | ||
|  | 					'@/static/images/default-avatar.png'); | ||
|  | 
 | ||
|  | 			}, | ||
|  | 			onChooseavatar(e) { | ||
|  | 				console.log(this.$store.getters.token); | ||
|  | 				console.log('114', e); | ||
|  | 				// this.user.avatar = e.detail.avatarUrl;
 | ||
|  | 				uni.uploadFile({ | ||
|  | 					url: this.baseUrl + '/system/user/profile/avatar', //仅为示例,非真实的接口地址
 | ||
|  | 					filePath: e.detail.avatarUrl, | ||
|  | 					name: 'avatarfile', | ||
|  | 					header: { | ||
|  | 						Authorization: this.$store.getters.token | ||
|  | 					}, | ||
|  | 					success: (uploadFileRes) => { | ||
|  | 						console.log(uploadFileRes); | ||
|  | 						if (uploadFileRes.statusCode == 200) { | ||
|  | 							this.getUserInfo() | ||
|  | 						} | ||
|  | 					} | ||
|  | 				}); | ||
|  | 			}, | ||
|  | 			menuClick(index) { | ||
|  | 				if (this.$store.getters.token) { | ||
|  | 					uni.navigateTo({ | ||
|  | 						url: this.menuArr[index].url | ||
|  | 					}) | ||
|  | 				} else { | ||
|  | 					uni.navigateTo({ | ||
|  | 						url: '/loginPackage/pages/Login' | ||
|  | 					}) | ||
|  | 				} | ||
|  | 
 | ||
|  | 			}, | ||
|  | 			closenickNameInputPop() { | ||
|  | 				this.nickNameInputShow = false | ||
|  | 			}, | ||
|  | 			bindblur(e) { | ||
|  | 				this.newNickName = e.detail.value; // 获取微信昵称
 | ||
|  | 			}, | ||
|  | 			bindinput(e) { | ||
|  | 				this.newNickName = e.detail.value; // 获取微信昵称
 | ||
|  | 			}, | ||
|  | 			toCell(url) { | ||
|  | 				if (this.$store.getters.token) { | ||
|  | 					// uni.navigateTo({
 | ||
|  | 					// 	url: url
 | ||
|  | 					// })
 | ||
|  | 				} else { | ||
|  | 					uni.navigateTo({ | ||
|  | 						url: '/loginPackage/pages/Login' | ||
|  | 					}) | ||
|  | 				} | ||
|  | 			}, | ||
|  | 			//授权设置
 | ||
|  | 			toAuthority() { | ||
|  | 				if (this.$store.getters.token) { | ||
|  | 					uni.openSetting({ | ||
|  | 						success(res) { | ||
|  | 							console.log('146', res.authSetting) | ||
|  | 						} | ||
|  | 					}); | ||
|  | 				} else { | ||
|  | 					uni.navigateTo({ | ||
|  | 						url: '/loginPackage/pages/Login' | ||
|  | 					}) | ||
|  | 				} | ||
|  | 
 | ||
|  | 			}, | ||
|  | 			// 修改昵称
 | ||
|  | 			async updateProfile() { | ||
|  | 				if (uni.$u.test.isEmpty(this.newNickName)) { | ||
|  | 					return uni.showToast({ | ||
|  | 						icon: 'error', | ||
|  | 						title: '请填写昵称' | ||
|  | 					}) | ||
|  | 				} | ||
|  | 				const res = await this.$myRequest({ | ||
|  | 					method: 'PUT', | ||
|  | 					url: '/system/user/profile/updateNickName', | ||
|  | 					data: { | ||
|  | 						nickName: this.newNickName | ||
|  | 					} | ||
|  | 				}) | ||
|  | 				if (res.data.code == 200) { | ||
|  | 					uni.showToast({ | ||
|  | 						title: '昵称修改成功' | ||
|  | 					}) | ||
|  | 					this.closenickNameInputPop() | ||
|  | 					this.getUserInfo() | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | 		} | ||
|  | 	} | ||
|  | </script> | ||
|  | 
 | ||
|  | <style lang="less" scoped> | ||
|  | 	/deep/ .u-popup__content { | ||
|  | 		width: 80%; | ||
|  | 		border-radius: 20rpx; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	.content { | ||
|  | 		position: relative; | ||
|  | 
 | ||
|  | 		.mine-top { | ||
|  | 			width: 100%; | ||
|  | 			height: 250rpx; | ||
|  | 
 | ||
|  | 			.mine-top-img { | ||
|  | 				width: 100%; | ||
|  | 				height: 100%; | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.mine-card { | ||
|  | 			position: absolute; | ||
|  | 			top: 60rpx; | ||
|  | 			width: 90%; | ||
|  | 			height: 300rpx; | ||
|  | 			left: 5%; | ||
|  | 			box-shadow: 0rpx 4rpx 8rpx 0rpx #E6E6E6; | ||
|  | 			border-radius: 20rpx; | ||
|  | 			background-color: #fff; | ||
|  | 			display: flex; | ||
|  | 			align-items: center; | ||
|  | 
 | ||
|  | 			.mine-card-right { | ||
|  | 				height: 220rpx; | ||
|  | 				display: flex; | ||
|  | 				flex-direction: column; | ||
|  | 				justify-content: space-around; | ||
|  | 
 | ||
|  | 				.mine-card-title { | ||
|  | 					font-weight: bold; | ||
|  | 					font-size: 36rpx; | ||
|  | 					color: #111111; | ||
|  | 				} | ||
|  | 
 | ||
|  | 				.mine-card-label { | ||
|  | 					display: flex; | ||
|  | 					align-items: center; | ||
|  | 
 | ||
|  | 
 | ||
|  | 					.repeat-customer { | ||
|  | 						color: #101010; | ||
|  | 						font-size: 26rpx; | ||
|  | 						margin-left: 10rpx; | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | 			.mine-card-left { | ||
|  | 				height: 180rpx; | ||
|  | 				width: 180rpx; | ||
|  | 				margin-left: 40rpx; | ||
|  | 				margin-right: 50rpx; | ||
|  | 				border-radius: 50%; | ||
|  | 				overflow: hidden; | ||
|  | 
 | ||
|  | 				.mine-card-img { | ||
|  | 					width: 100%; | ||
|  | 					height: 100%; | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.menu-area { | ||
|  | 			height: 240rpx; | ||
|  | 			width: 100%; | ||
|  | 			margin: 0 auto; | ||
|  | 			margin-top: 100rpx; | ||
|  | 			padding-left: 60rpx; | ||
|  | 			padding-right: 60rpx; | ||
|  | 			display: flex; | ||
|  | 			align-items: center; | ||
|  | 			justify-content: space-between; | ||
|  | 
 | ||
|  | 			.cell { | ||
|  | 				display: flex; | ||
|  | 				align-items: center; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			.menu-img { | ||
|  | 				width: 80rpx; | ||
|  | 				height: 80rpx; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			.grid-text { | ||
|  | 				font-size: 30rpx; | ||
|  | 				color: #101010; | ||
|  | 				margin-left: 10rpx; | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.cell-area { | ||
|  | 			width: 90%; | ||
|  | 			margin: 0 auto; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		/* 头像能力 按钮样式 */ | ||
|  | 		.avatar-wrapper { | ||
|  | 			height: 100%; | ||
|  | 			height: 100%; | ||
|  | 			margin: 0; | ||
|  | 			background-color: 0; | ||
|  | 			background: 0; | ||
|  | 			padding: 0; | ||
|  | 			border-radius: 0; | ||
|  | 			border-radius: 0; | ||
|  | 			border: 0; | ||
|  | 			overflow: hidden; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.avatar-wrapper::after { | ||
|  | 			border: none; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.nickname-pop { | ||
|  | 			padding: 70rpx 50rpx 0rpx; | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.nickname-input { | ||
|  | 			width: 100%; | ||
|  | 			font-size: 26rpx; | ||
|  | 			display: flex; | ||
|  | 			justify-content: space-between; | ||
|  | 			align-items: center; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.nickname-label { | ||
|  | 			display: block; | ||
|  | 			margin-bottom: 20rpx; | ||
|  | 			text-align: center; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.input-style { | ||
|  | 			border-bottom: 1px solid #007aff; | ||
|  | 			display: block; | ||
|  | 			width: 100%; | ||
|  | 			height: 80rpx; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		.button-style { | ||
|  | 			margin-top: 40rpx; | ||
|  | 			margin-left: calc(50% - 50rpx); | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	} | ||
|  | </style> |