<template> <view class="home"> <view class="form-area"> <u--form labelPosition="left" :model="form" :rules="rules" ref="Form1" :labelWidth="100" labelAlign="left"> <u-form-item label="姓名" prop="name" borderBottom> <u--input v-model="form.name" > </u--input> </u-form-item> <u-form-item label="工号" prop="ID" borderBottom> <u--input v-model="form.ID" disabled > </u--input> </u-form-item> <u-form-item label="手机号" prop="phone" borderBottom> <u--input v-model="form.phone" > </u--input> </u-form-item> <u-form-item label="邮箱" prop="email" borderBottom> <u--input v-model="form.email" > </u--input> </u-form-item> <u-form-item label="密码" prop="pwd" borderBottom> <view class="demo-layout" style="width: 300rpx;"> <u-button type="success" size="small" @click="toPopupShow">修改密码</u-button> </view> </u-form-item> </u--form> </view> <u-popup :show="popupShow" @close="popupShow = false" > <view class="popup-area"> <view class="form-area" style="padding:0 20rpx;"> <u--form labelPosition="left" :model="pwdForm" :rules="pwdRules" ref="Form2" :labelWidth="100" labelAlign="left"> <u-form-item label="旧密码" prop="oldpwd" > <u--input v-model="pwdForm.oldpwd" type="password" clearable password> </u--input> </u-form-item> <u-form-item label="新密码" prop="newpwd" > <u--input v-model="pwdForm.newpwd" type="password" clearable password> </u--input> </u-form-item> <u-form-item label="确认密码" prop="surepwd" > <u--input v-model="pwdForm.surepwd" type="password" clearable password> </u--input> </u-form-item> </u--form> </view> <view class="pwd-btn"> <u-button size="small" @click="popupShow = false">取消</u-button> <u-button type="success" size="small" @click="changePwd">确认</u-button> </view> </view> </u-popup> <view class="btn-area"> <!-- <u-button type="info" size="small" @click="toLogout">退出登录</u-button> --> <u-button type="success" size="small" @click="save">保存</u-button> </view> </view> </template> <script> import cache from '@/utils/storage.js' import { getInfo,saveUserInfo,savePassword } from '@/api/user.js' export default { data() { return { form:{ name:cache.session.getJSON('nickName'), ID:cache.session.getJSON('userName'), phone:cache.session.getJSON('phone'), email:cache.session.getJSON('email'), pwd:"" }, popupShow:false, userId:cache.session.getJSON('userId'), rules:{ name:[ { required: true, message: '请输入姓名', // blur和change事件触发检验 trigger: ['blur'] } ], phone:[ { message: '请输入手机号', // blur和change事件触发检验 trigger: ['blur'] }, { // 自定义验证函数,见上说明 validator: (rule, value, callback) => { // 上面有说,返回true表示校验通过,返回false表示不通过 // uni.$u.test.mobile()就是返回true或者false的 return uni.$u.test.mobile(value); }, message: '手机号码不正确', // 触发器可以同时用blur和change trigger: ['blur'], } ], email:[ { message: '请输入邮箱', // blur和change事件触发检验 trigger: ['blur'] }, { // 自定义验证函数,见上说明 validator: (rule, value, callback) => { // 上面有说,返回true表示校验通过,返回false表示不通过 // uni.$u.test.mobile()就是返回true或者false的 return uni.$u.test.email(value); }, message: '邮箱不正确', // 触发器可以同时用blur和change trigger: ['blur'], } ] }, pwdForm:{ oldpwd:"", newpwd:"", surepwd:"" }, pwdRules:{ oldpwd:[ { required: true, message: '请输入旧密码', // blur和change事件触发检验 trigger: ['blur'], }, { pattern: /^[0-9a-zA-Z]*$/g, // 正则检验前先将值转为字符串 transform(value) { return String(value); }, message: '密码只能包含字母或数字' }, { min: 6, max: 16, message: '长度在6-16个字符之间' } ], newpwd:[ { required: true, message: '请输入新密码', // blur和change事件触发检验 trigger: ['blur'], }, { pattern: /^[0-9a-zA-Z]*$/g, // 正则检验前先将值转为字符串 transform(value) { return String(value); }, message: '密码只能包含字母或数字' }, { min: 6, max: 16, message: '长度在6-16个字符之间' } ], surepwd:[ { required: true, message: '请确认密码', // blur和change事件触发检验 trigger: ['blur'], }, { pattern: /^[0-9a-zA-Z]*$/g, // 正则检验前先将值转为字符串 transform(value) { return String(value); }, message: '密码只能包含字母或数字' }, { min: 6, max: 16, message: '长度在6-16个字符之间' }, { validator: (rule, value, callback) => { if(value != this.pwdForm.newpwd){ return false; }else{ callback() } }, message: '密码与新密码不一致' } ] } }; }, methods:{ toPopupShow(){ this.popupShow = true this.pwdForm = { oldpwd:"", newpwd:"", surepwd:"" } }, save(){ const that = this uni.showLoading({ title:'保存中', icon:'none' }) this.$refs.Form1.validate().then(() => { let data = { email:this.form.email, nickName:this.form.name, phonenumber:this.form.phone, userId:this.userId } saveUserInfo(data).then(res=>{ uni.hideLoading() console.log(res) uni.showToast({ icon:'success', title:"修改成功!" }) // uni.$u.toast() if(res.data.code===200 && res.data.msg === "操作成功"){ that.initInfo() } }) }).catch(errors => { uni.hideLoading() uni.$u.toast(errors[0].message) }) }, changePwd(){ uni.showLoading({ title:'修改中', icon:'none' }) this.$refs.Form2.validate().then(() => { savePassword(this.pwdForm.oldpwd,this.pwdForm.newpwd).then(res=>{ // console.log(res) uni.hideLoading() uni.$u.toast("修改成功!") that.pwdForm = { oldpwd:"", newpwd:"", surepwd:"" } }) }).catch(errors => { uni.hideLoading() uni.$u.toast(errors[0].message) }) }, initInfo(){ const that = this getInfo().then(res=>{ if(res.data.code===200){ cache.session.setJSON('role',res.data.roles[0]) cache.session.setJSON('phone',res.data.user.phonenumber) cache.session.setJSON('email',res.data.user.email) cache.session.setJSON('nickName',res.data.user.nickName) cache.session.setJSON('userName',res.data.user.userName) cache.session.setJSON('userId',res.data.user.userId) that.form = { name:res.data.user.nickName, ID:res.data.user.userName, phone:res.data.user.phonenumber, email:res.data.user.email, pwd:"" } } }) } }, onReady() { this.$refs.Form1.setRules(this.rules) this.$refs.Form2.setRules(this.pwdRules) } } </script> <style lang="scss" scoped> .home{ position: relative; height: 100vh; } .layout-row{ padding:50rpx 30rpx; border-bottom:1rpx solid #c6c6c6; font-size: 30rpx; } .form-area{ /deep/.u-form-item{ line-height: 300%; font-size: 30rpx; } /deep/ .u-form-item__body{ padding-right: 20rpx; } /deep/ .u-form-item__body__left__content__label{ padding-left:40rpx } } .btn-area{ position: absolute; width: 100%; bottom: 100rpx; box-sizing: border-box; padding: 0px 200rpx; // right: 50rpx; // display: flex; // /deep/.u-button{ // margin: 30rpx; // } } .popup-area{ height: 700rpx; box-sizing: border-box; // padding: 0 30rpx; .pwd-btn{ display: flex; padding-top: 50rpx; /deep/.u-button{ margin: 30rpx; } } } </style>