index.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <view class="container">
  3. <uni-forms ref="form" :modelValue="formData" :rules="rules" label-position="top" label-width="120">
  4. <uni-forms-item label="原密码" name="password" required>
  5. <input v-model="formData.password" placeholder="请输入原密码" :password="!password1" style="width:100%" />
  6. <!-- <uni-icons :type="password1?'eye-filled':'eye'" size="30" @click="pass1"></uni-icons> -->
  7. </uni-forms-item>
  8. <uni-forms-item label="新密码" name="newPassword" required>
  9. <input v-model="formData.newPassword" placeholder="请输入新密码" :password="!password2" style="width:100%" />
  10. <!-- <uni-icons :type="password2?'eye-filled':'eye'" size="30" @click="pass2"></uni-icons> -->
  11. </uni-forms-item>
  12. <uni-forms-item label="确认密码" name="conWord" required >
  13. <input v-model="formData.conWord" placeholder="请确认新密码" :password="!password3" style="width:100%" />
  14. <!-- <uni-icons :type="password3?'eye-filled':'eye'" size="30" @click="pass3"></uni-icons> -->
  15. </uni-forms-item>
  16. </uni-forms>
  17. <u-button @click="submit" class="submit" type="primary">提交</u-button>
  18. <uni-popup ref="inputDialog" type="dialog">
  19. <uni-popup-dialog ref="inputClose" mode="base" title="系统提示" placeholder="请输入内容" @confirm="confirm">
  20. 修改成功,是否重新登录?
  21. </uni-popup-dialog>
  22. </uni-popup>
  23. </view>
  24. </template>
  25. <script>
  26. import {
  27. encrypt
  28. } from '@/utils/jsencrypt.js'
  29. export default {
  30. data() {
  31. return {
  32. showPassword: false,
  33. // 表单数据
  34. formData: {
  35. password: null,
  36. newPassword: null,
  37. conWord: null
  38. },
  39. rules: {
  40. password: {
  41. rules: [{
  42. required: true,
  43. errorMessage: '请输入原密码',
  44. }, ]
  45. },
  46. newPassword: {
  47. rules: [{
  48. required: true,
  49. errorMessage: '请输入新密码',
  50. },
  51. {
  52. validateFunction: function(rule, value, data, callback) {
  53. if (data.password === data.newPassword) {
  54. callback('不能和与原密码相同')
  55. }
  56. return true
  57. }
  58. }
  59. ]
  60. },
  61. conWord: {
  62. rules: [{
  63. required: true,
  64. errorMessage: '请确认新密码',
  65. },
  66. {
  67. validateFunction: function(rule, value, data, callback) {
  68. if (data.conWord !== data.newPassword) {
  69. callback('两次输入密码不一致!')
  70. }
  71. return true
  72. }
  73. }
  74. ]
  75. }
  76. },
  77. password1: false,
  78. password2: false,
  79. password3: false
  80. }
  81. },
  82. methods: {
  83. submit() {
  84. this.$refs.form.validate().then(res => {
  85. this.$store.dispatch('user/updatePassword', this.formData).then(req => {
  86. if (req.data.code === 200) {
  87. this.$refs.inputDialog.open()
  88. } else {
  89. uni.showToast({
  90. title: req.data.msg,
  91. duration: 2000,
  92. icon: "error"
  93. });
  94. }
  95. })
  96. }).catch(err => {
  97. })
  98. },
  99. confirm() {
  100. uni.redirectTo({
  101. url: "/pages/login/index"
  102. })
  103. },
  104. pass1() {
  105. this.password1 = !this.password1
  106. },
  107. pass2() {
  108. this.password2 = !this.password2
  109. },
  110. pass3() {
  111. this.password3 = !this.password3
  112. }
  113. }
  114. }
  115. </script>
  116. <style lang="scss" scoped>
  117. .container {
  118. padding: 20rpx;
  119. }
  120. .submit {
  121. width: 400rpx;
  122. margin-top: 60rpx
  123. }
  124. ::v-deep .uni-input-placeholder {
  125. font-size: 12px
  126. }
  127. ::v-deep .uni-input-input {
  128. border-bottom: 1px solid #959595
  129. }
  130. ::v-deep .uni-dialog-title-text {
  131. color: #000000
  132. }
  133. ::v-deep .uni-forms-item__content {
  134. display: flex;
  135. align-items: center;
  136. }
  137. ::v-deep .is-required span{
  138. margin-right:8rpx
  139. }
  140. </style>