forgetPassword.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <template>
  2. <view class="page">
  3. <view :style="{'marginTop':'10rpx'}">
  4. <u--form labelPosition="left" :model="form" :rules="rules" ref="uForm">
  5. <u-form-item :labelWidth="80" label="手机号:" prop="username" ref="item1">
  6. <u--input v-model="form.username" placeholder="请输入手机号"></u--input>
  7. </u-form-item>
  8. <u-form-item :labelWidth="80" label="验证码:" prop="code" ref="item1">
  9. <view class="inputCode">
  10. <u--input v-model="form.code" placeholder="请输入验证码" ></u--input>
  11. </view>
  12. <u-button slot="right" @tap="getCode" :text="tips" type="success" size="small" :disabled="disabled1"></u-button>
  13. </u-form-item>
  14. <u-form-item :labelWidth="80" label="新密码:" prop="newPassword" ref="item1">
  15. <u--input v-model="form.newPassword" placeholder="请输入新密码" type="password"></u--input>
  16. </u-form-item>
  17. <u-form-item :labelWidth="80" label="确认密码:" prop="againPassword" ref="item1">
  18. <u--input v-model="form.againPassword" placeholder="再次确认新密码" type="password"></u--input>
  19. </u-form-item>
  20. </u--form>
  21. <view :style="{'marginTop':'100rpx'}">
  22. <button class="customStyle" @click="retrievePassword">提交</button>
  23. </view>
  24. </view>
  25. <u-code ref="uCode" @change="codeChange" seconds="60" @start="disabled1 = true" @end="disabled1 = false"></u-code>
  26. <!--#ifdef H5-->
  27. <liu-drag-button @clickBtn="back">返回</liu-drag-button>
  28. <!--#endif-->
  29. </view>
  30. </template>
  31. <script>
  32. export default {
  33. data() {
  34. return {
  35. disabled1:false,
  36. tips:'',
  37. form:{
  38. username:'',
  39. code:'',
  40. newPassword:'',
  41. againPassword:''
  42. },
  43. rules: {
  44. 'username': {
  45. type: 'string',
  46. required: true,
  47. min:11,
  48. max: 11,
  49. pattern:this.$phonePattern,
  50. message: '请输入正确的电话号码',
  51. trigger: ['blur', 'change']
  52. },
  53. 'code': {
  54. type: 'string',
  55. required: true,
  56. min:4,
  57. max: 6,
  58. message: '请输入验证码',
  59. trigger: ['blur', 'change']
  60. },
  61. 'newPassword': {
  62. type: 'string',
  63. min:6,
  64. max: 16,
  65. required: true,
  66. message: '请输入6-18位密码',
  67. trigger: ['blur', 'change']
  68. },
  69. 'againPassword': {
  70. type: 'string',
  71. min:6,
  72. max: 16,
  73. required: true,
  74. message: '请输入6-18位密码',
  75. trigger: ['blur', 'change']
  76. }
  77. },
  78. }
  79. },
  80. methods: {
  81. retrievePassword(){
  82. this.$refs.uForm.validate().then(res => {
  83. this.$api.login.retrievePassword(this.form).then(res=>{
  84. uni.showToast({
  85. icon: 'success',
  86. duration: 2000,
  87. title: '修改成功,即将跳转登录页'
  88. });
  89. setTimeout(()=>{
  90. this.logout()
  91. },2000)
  92. })
  93. })
  94. },
  95. logout(){
  96. this.$api.login.logout().then(res=>{
  97. uni.clearStorageSync();
  98. uni.navigateTo({
  99. url:'/pages/login/login'
  100. })
  101. })
  102. },
  103. back(){
  104. let pages = getCurrentPages()
  105. if (pages.length > 1){
  106. uni.navigateBack({
  107. delta: 1,
  108. fail:err=>{
  109. console.log(err)
  110. }
  111. })
  112. }else {
  113. uni.switchTab({
  114. url: '/pages/my/my'
  115. });
  116. }
  117. },
  118. codeChange(text) {
  119. this.tips = text;
  120. },
  121. getCode() {
  122. let regExp=new RegExp(this.$phonePattern);
  123. let b= regExp.test(this.form.username)
  124. if (!b){
  125. uni.$u.toast('请输入正确的手机号')
  126. return
  127. }
  128. if (this.$refs.uCode.canGetCode) {
  129. // 模拟向后端请求验证码
  130. uni.showLoading({
  131. title: '正在获取验证码'
  132. })
  133. this.$api.service.getSmsCode({phonenumber: this.form.username}).then(res=>{
  134. uni.hideLoading();
  135. // 这里此提示会被this.start()方法中的提示覆盖
  136. uni.$u.toast('验证码已发送');
  137. // 通知验证码组件内部开始倒计时
  138. this.$refs.uCode.start();
  139. })
  140. } else {
  141. uni.$u.toast('倒计时结束后再发送');
  142. }
  143. },
  144. }
  145. }
  146. </script>
  147. <style lang="scss" scoped>
  148. @import './index.rpx.css';
  149. </style>