| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 | <template>	<view>		<view class="top-back"></view>		<view class="content">			<view class="margin-top" >				<uv-gap height="10" ></uv-gap>								<!-- <p style="font-size: 25px;">个人信息</p> -->				<uv-divider class="head-text" text="个人资料" textSize="26" textColor="#000"></uv-divider>								<uv-gap height="10" ></uv-gap>								<view class="margin-top"><!-- 昵称 -->					<view class="title">昵称</view>					<uv-gap height="10" ></uv-gap>										<view class="flex justify-between">						<input maxlength=20 class="" type="nickname" style="width: 60%;" v-model="user.name" 							placeholder-style="color: #cccccc; font-size: 24px; font-weight: 100;" placeholder="请输入昵称" 						/>						<image src="@/static/img/user.png" style="background-color: #fff;width: 15vw;height: 15vw;margin: 0 30px 5px;"></image>					</view>				</view>				<uv-divider customStyle="margin: 0 0"></uv-divider>								<uv-gap height="20" ></uv-gap>								<view><!-- 性别 -->					<view class="">						<view class="title">性别</view>						<uv-gap height="10" ></uv-gap>						<view class="flex justify-between">							<input placeholder="请选择性别" disabled="disabled" style="width: 60%;" name="input" v-model="gender" placeholder-style="color: #cccccc; font-size: 24px; font-weight: 100;" @click="changegender"></input>							<image @click="confirm({'indexs': [0]})" src="@/static/img/man.png" style="background-color: #fff;width: 15vw;height: 15vw;"></image>							<image @click="confirm({'indexs': [1]})" src="@/static/img/woman.png" style="background-color: #fff;width: 15vw;height: 15vw;"></image>						</view>					</view>					<uv-picker ref="picker" :columns="columns" @confirm="confirm"></uv-picker>				</view>				<uv-divider customStyle="margin: 0 0"></uv-divider>								<uv-gap height="20" ></uv-gap>								<view class="" style="margin-bottom: -20upx;"><!-- 年龄 -->					<view class="title">年龄</view>					<uv-gap height="10" ></uv-gap>					<input maxlength=3 class="weui-input" type="number" v-model="user.age" placeholder-style="color: #cccccc; font-size: 24px; font-weight: 100;" placeholder="请输入年龄" />				</view>				<uv-divider customStyle="margin: 0 0"></uv-divider>								<uv-gap height="10" ></uv-gap>							</view>				<uv-modal width=260 ref="modal" title="请将信息填写完整"  @confirm="confirm"></uv-modal>						</view>				<uv-button @click="update()" customStyle="position: fixed; bottom: 40px;width: calc(100vw - 60px);margin: 0 30px" shape="circle" size="large" color="#1678ff">保存</uv-button>	</view></template><script>	export default {		onLoad() {			this.user.name = uni.getStorageSync("name");			this.$user_api.user_get().then(res => {				this.user = this.$util.removeNullValues(res);				this.gender = this.user.gender === 0 ? '男' : '女';				uni.setStorageSync("name",res.name);				uni.setStorageSync("user",this.user);			});		},		onPullDownRefresh(){			this.user.name = uni.getStorageSync("name");			this.$user_api.user_get().then(res => {				this.user = this.$util.removeNullValues(res);				this.gender = this.user.gender === 0 ? '男' : '女';				uni.setStorageSync("name",res.name);				uni.setStorageSync("user",this.user);			});			setTimeout(() => {uni.stopPullDownRefresh();}, 1000);		},		data() {			return {				user:{					name: '',					gender: '',					age: '',				},				gender: '',				columns: [['男','女']],				request: 1,			}		},		methods: {			// inputBindBlur(){			// 	this.$content_check.textCheck(this.user.name, this, 'user.name');			// },			changegender() {				this.$refs.picker.open();			},			confirm(e) {				this.user.gender = e['indexs'][0];				this.gender = this.user.gender === 0 ? '男' : '女';			},			async update(){				if(this.user.name.length > 0){					//用户名必须由1到20个字符组成,并且只能包含字母、数字、汉字。					const regex = /^[a-zA-Z0-9\u4e00-\u9fa5]{1,20}$/;					const isValid = regex.test(this.user.name);										if (isValid) {						console.log("用户名有效");												if(this.request){							let user = uni.getStorageSync("user");														if(!this.$util.ObjectEqual(user,this.user)){																let isCheck = await this.$content_check.textCheck(this.user.name, this, 'user.name');								console.log('isCheck: ',isCheck);								if(isCheck !== true) return ;																this.request = 0;																uni.showLoading({title: '加载中...'});								console.log('this.user: ',this.user);								this.$user_api.user_update(this.$util.removeNullValues(this.user))									.then((res) => {										uni.setStorageSync("name",this.user.name);										uni.setStorageSync("user",this.user);										this.request = 1;										uni.hideLoading();										uni.showToast({duration:1000,icon:'success',title: '保存成功 !'});									}).catch((err) => {  										this.request = 1;										uni.hideLoading();										uni.showToast({icon:"error",title: '保存失败 !'});									});							}							else{								console.log("信息未改变");								uni.showToast({duration:1500,icon:"error",title: '信息未发生改变'});							}						}					} else {						console.log("用户名无效");						uni.showToast({duration:1500,icon:"none",title: '用户名只能包含字母和数字'});					}				}				else{					uni.showToast({duration:1500,icon:"none",title: '请输入用户名'});				}			}		}	}</script><style>	page {		height: 100vh;	}	.top-back{		height: 30px;		background-color: #1678ff;		color: #fff;		margin-bottom: -40px;	}	.top-back p{		height: 7.5vh;		display: flex; /* 使用flex布局来实现居中 */		justify-content: center; /* 水平居中 */		align-items: center; /* 垂直居中 */		font-size: 20px;		letter-spacing: 10px;		margin-left: 10px;		font-weight: 600;	}		.head-text{		letter-spacing: 5px;		font-weight: 600;	}	.title{		letter-spacing: 2px;		color: #8c92ad;		font-size: 18px;	}	input {		letter-spacing: 1px;	    width: 100%;		height: 8vh;	    padding-bottom: 5px;	    font-size: 24px;		font-weight: 600;		font-weight: 400;		color: #000;	    outline: none; /* 移除聚焦时的默认边框 */	}	.content {	  padding: 0 35px;	  border-radius: 25px;	  border: none;	  background-color: #ffffff;	}	.content image:active {		transform: translateY(2px) translateX(2px);	}</style>
 |