password.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <view>
  3. <view class="logo">
  4. <image src="../../static/logo.png" mode="aspectFit"></image>
  5. </view>
  6. <view class="form">
  7. <!-- <view class="prompt">
  8. 注意:密码需8位以上,包含英文大小写、字母。
  9. </view> -->
  10. <uni-forms ref="form" :modelValue="formData" :rules="rules" label-align="right" :label-width="90">
  11. <uni-forms-item label="密码" name="password">
  12. <uni-easyinput type="password" maxlength="20" :clearable="false" v-model="formData.password"
  13. placeholder="请输入新密码" />
  14. </uni-forms-item>
  15. <uni-forms-item label="确认密码" name="confirmPassword">
  16. <uni-easyinput type="password" maxlength="20" :clearable="false" v-model="formData.confirmPassword"
  17. placeholder="请再次确认新密码" />
  18. </uni-forms-item>
  19. </uni-forms>
  20. <button class="submit" :class="{'submit-disabled': !formData.password || !formData.confirmPassword}"
  21. @click="submit">确认</button>
  22. </view>
  23. </view>
  24. </template>
  25. <script lang="ts" setup>
  26. import { ref, reactive } from 'vue'
  27. import { onLoad } from '@dcloudio/uni-app'
  28. const formData = reactive({
  29. password: '',
  30. confirmPassword: '',
  31. })
  32. const rules = reactive({
  33. password: {
  34. rules: [{
  35. required: true,
  36. errorMessage: '请输入密码',
  37. }, {
  38. validateFunction: (rule, value, data, callback) => {
  39. const passwordRegex = /^(?=.*[a-zA-Z])(.{8,})$/;
  40. if (value?.length >= 6 && value?.length <= 20) {
  41. return true
  42. }
  43. callback('密码必须为6至20位字符')
  44. }
  45. }]
  46. },
  47. confirmPassword: {
  48. rules: [{
  49. required: true,
  50. errorMessage: '请输入密码',
  51. }, {
  52. validateFunction: (rule, value, data, callback) => {
  53. if (value == formData.password) {
  54. return true
  55. }
  56. callback('两次密码不一致')
  57. }
  58. }]
  59. }
  60. })
  61. const form = ref()
  62. const parameter = ref({})
  63. const submit = () => {
  64. if (formData.password && formData.confirmPassword) {
  65. form.value.validate().then(async data => {
  66. const res = encodeURIComponent(JSON.stringify({
  67. ...parameter.value,
  68. password: formData.password
  69. }))
  70. uni.navigateTo({
  71. url: `/pages/register/register?parameter=${res}`
  72. })
  73. })
  74. }
  75. }
  76. onLoad((options) => {
  77. parameter.value = JSON.parse(decodeURIComponent(options.parameter));
  78. })
  79. </script>
  80. <style lang="scss">
  81. .form {
  82. padding: 0 40rpx;
  83. .prompt {
  84. font-weight: 400;
  85. font-size: 24rpx;
  86. color: #F53F3F;
  87. line-height: 28rpx;
  88. margin-bottom: 20px;
  89. }
  90. :deep(.uni-forms-item__label) {
  91. height: 88rpx;
  92. font-weight: 500;
  93. font-size: 32rpx;
  94. color: #1D2129;
  95. line-height: 38rpx;
  96. }
  97. :deep(.uni-easyinput__content) {
  98. border: none;
  99. }
  100. :deep(.uni-easyinput__content-input) {
  101. background: #F1F5FE;
  102. height: 88rpx;
  103. border-radius: 24rpx;
  104. font-weight: 500;
  105. font-size: 32rpx;
  106. color: #1D2129;
  107. line-height: 38rpx;
  108. }
  109. :deep(.uni-input-placeholder) {
  110. font-weight: 400;
  111. font-size: 32rpx;
  112. color: #86909C;
  113. line-height: 38rpx;
  114. }
  115. }
  116. .submit {
  117. height: 112rpx;
  118. background: #3682EA;
  119. border-radius: 24rpx;
  120. font-weight: 500;
  121. font-size: 36rpx;
  122. color: #FFFFFF;
  123. display: flex;
  124. align-items: center;
  125. justify-content: center;
  126. margin-top: 128rpx;
  127. }
  128. .submit-disabled {
  129. background: #B0CDFF;
  130. }
  131. </style>