index.vue 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <app-view class="g-form user-password" :loading="false">
  3. <template #header>
  4. <app-navbar title="修改密码" />
  5. </template>
  6. <Form ref="formRef" class="g-form__container" @submit="onSubmit">
  7. <CellGroup inset>
  8. <Field v-model="formData.OldPwd" type="password" name="OldPwd" label="原密码" placeholder="必填"
  9. autocomplete="off" :rules="formRules.OldPwd" />
  10. <Field v-model="formData.NewPwd" name="NewPwd" type="password" label="新密码" placeholder="必填"
  11. autocomplete="off" :rules="formRules.NewPwd" />
  12. <Field v-model="confirmpassword" name="confirmpassword" type="password" label="确认密码" placeholder="必填"
  13. autocomplete="off" :rules="formRules.confirmpassword" />
  14. </CellGroup>
  15. </Form>
  16. <template #footer>
  17. <div class="g-form__footer">
  18. <Button type="primary" @click="formRef?.submit()" round block>提交</Button>
  19. </div>
  20. </template>
  21. </app-view>
  22. </template>
  23. <script lang="ts" setup>
  24. import { shallowRef } from 'vue'
  25. import { CellGroup, Button, Field, Form, FormInstance, FieldRule, Toast } from 'vant'
  26. import { fullloading, dialog } from '@/utils/vant'
  27. import { validateRules } from '@/constants/regex'
  28. import { useAuth } from '@/business/auth'
  29. import { useAccountPassword } from '@/business/user'
  30. const { logout } = useAuth()
  31. const { formData, formSubmit } = useAccountPassword(1)
  32. const formRef = shallowRef<FormInstance>()
  33. const confirmpassword = shallowRef('')
  34. // 表单验证规则
  35. const formRules: { [key in keyof Proto.ModifyPwdReq | 'confirmpassword']?: FieldRule[] } = {
  36. OldPwd: [{
  37. required: true,
  38. message: '请输入原密码',
  39. }],
  40. NewPwd: [{
  41. required: true,
  42. message: '请输入新密码',
  43. validator: (val) => {
  44. if (validateRules.password.validate(val)) {
  45. return true
  46. }
  47. return validateRules.password.message
  48. }
  49. }],
  50. confirmpassword: [{
  51. required: true,
  52. message: '请输入确认密码',
  53. validator: (val) => {
  54. if (formData.NewPwd === val) {
  55. return true
  56. }
  57. return '新密码和确认密码不一致'
  58. }
  59. }],
  60. }
  61. const onSubmit = () => {
  62. fullloading((hideLoading) => {
  63. formSubmit().then(() => {
  64. hideLoading()
  65. dialog('密码修改成功,请重新登录。').then(() => {
  66. logout()
  67. })
  68. }).catch((err) => {
  69. Toast.fail(err)
  70. })
  71. })
  72. }
  73. </script>