password.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <template>
  2. <view class="password-container">
  3. <u-form :model="formData" :rules="rules" ref="formRef" labelPosition="top" :borderBottom="true"
  4. labelWidth="300px" error-type="toast">
  5. <u-form-item label="原密码" prop="oldPassword" borderBottom>
  6. <u-input v-model="formData.oldPassword" type="password" placeholder="请输入原密码" :border="false">
  7. </u-input>
  8. </u-form-item>
  9. <u-form-item label="新密码" prop="newPassword" borderBottom>
  10. <u-input v-model="formData.newPassword" type="password" placeholder="请输入新密码" :border="false">
  11. </u-input>
  12. </u-form-item>
  13. <u-form-item label="确认新密码" prop="confirmPassword" borderBottom>
  14. <u-input v-model="formData.confirmPassword" type="password" placeholder="请再次输入新密码" :border="false">
  15. </u-input>
  16. </u-form-item>
  17. </u-form>
  18. <view class="submit-btn">
  19. <u-button type="primary" text="修改密码" @click="submitForm" :loading="loading"></u-button>
  20. </view>
  21. </view>
  22. </template>
  23. <script setup>
  24. import {
  25. ref,
  26. reactive
  27. } from 'vue'
  28. // 表单引用
  29. const formRef = ref(null)
  30. // 加载状态
  31. const loading = ref(false)
  32. // 密码显示状态
  33. const showPassword = reactive({
  34. old: false,
  35. new: false,
  36. confirm: false
  37. })
  38. // 表单数据
  39. const formData = reactive({
  40. oldPassword: '',
  41. newPassword: '',
  42. confirmPassword: ''
  43. })
  44. // 表单验证规则
  45. const rules = {
  46. oldPassword: [{
  47. required: true,
  48. message: '请输入原密码',
  49. trigger: ['blur', 'change']
  50. }, {
  51. min: 6,
  52. message: '密码长度不能小于6位',
  53. trigger: ['blur', 'change']
  54. }],
  55. newPassword: [{
  56. required: true,
  57. message: '请输入新密码',
  58. trigger: ['blur', 'change']
  59. }, {
  60. min: 6,
  61. message: '密码长度不能小于6位',
  62. trigger: ['blur', 'change']
  63. }, {
  64. validator: (rule, value, callback) => {
  65. if (value === formData.oldPassword) {
  66. callback(new Error('新密码不能与原密码相同'))
  67. } else {
  68. callback()
  69. }
  70. },
  71. trigger: ['blur', 'change']
  72. }],
  73. confirmPassword: [{
  74. required: true,
  75. message: '请再次输入新密码',
  76. trigger: ['blur', 'change']
  77. }, {
  78. validator: (rule, value, callback) => {
  79. if (value !== formData.newPassword) {
  80. callback(new Error('两次输入的密码不一致'))
  81. } else {
  82. callback()
  83. }
  84. },
  85. trigger: ['blur', 'change']
  86. }]
  87. }
  88. // 提交表单
  89. function submitForm() {
  90. if (!formRef.value) return
  91. formRef.value.validate().then(valid => {
  92. if (valid) {
  93. loading.value = true
  94. // 这里添加修改密码的API调用
  95. uni.$u.http.post('/app/appUser/updatePwd', formData).then(res => {
  96. if (res.code == 200) {
  97. uni.showModal({
  98. title: '提示',
  99. content: '密码修改成功,是否确定要退出重新登录?',
  100. success: (res) => {
  101. if (res.confirm) {
  102. // 执行退出登录逻辑
  103. uni.clearStorageSync()
  104. uni.reLaunch({
  105. url: '/pages/login/login'
  106. })
  107. } else {
  108. uni.navigateBack({
  109. delta: 1
  110. })
  111. }
  112. }
  113. })
  114. }
  115. }).finally(() => {
  116. loading.value = false
  117. })
  118. }
  119. })
  120. }
  121. // 重置表单
  122. function resetForm() {
  123. if (!formRef.value) return
  124. formRef.value.resetFields()
  125. }
  126. </script>
  127. <style>
  128. page {
  129. background-color: #ffffff;
  130. }
  131. </style>
  132. <style lang="scss" scoped>
  133. .password-container {
  134. padding: 30rpx;
  135. box-sizing: border-box;
  136. :deep(.u-form) {
  137. .u-input {
  138. &__content {
  139. background-color: #f5f5f5;
  140. border-radius: 8rpx;
  141. padding: 20rpx;
  142. }
  143. }
  144. }
  145. .submit-btn {
  146. margin-top: 60rpx;
  147. padding: 0 20rpx;
  148. :deep(.u-button) {
  149. height: 88rpx;
  150. border-radius: 44rpx;
  151. }
  152. }
  153. }
  154. </style>