index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <div class="wh-full bg-white">
  3. <n-grid cols="2 s:2 m:2 l:3 xl:3 2xl:3">
  4. <n-grid-item>
  5. <n-form ref="formRef" :label-width="80" :model="formValue" :rules="rules">
  6. <n-form-item label="昵称" path="name">
  7. <n-input v-model:value="formValue.name" placeholder="请输入昵称" />
  8. </n-form-item>
  9. <n-form-item label="邮箱" path="email">
  10. <n-input v-model:value="formValue.email" placeholder="请输入邮箱" />
  11. </n-form-item>
  12. <n-form-item label="联系电话" path="phone">
  13. <n-input v-model:value="formValue.phone" placeholder="请输入联系电话" />
  14. </n-form-item>
  15. <n-form-item label="用户密码" path="passwd">
  16. <n-input v-model:value="formValue.passwd" type="password" placeholder="请输入联系地址" />
  17. </n-form-item>
  18. <n-form-item label="重复密码" path="rePasswd">
  19. <n-input v-model:value="formValue.rePasswd" type="password" placeholder="请输入联系地址" />
  20. </n-form-item>
  21. <div>
  22. <n-space>
  23. <n-button type="primary" @click="formSubmit">更新基本信息</n-button>
  24. </n-space>
  25. </div>
  26. </n-form>
  27. </n-grid-item>
  28. </n-grid>
  29. </div>
  30. </template>
  31. <script setup lang="ts">
  32. import { reactive, ref } from 'vue';
  33. import type { FormItemRule } from 'naive-ui';
  34. import { useAuthStore } from '@/store';
  35. import type { UsersRes } from './api';
  36. import { getUserProFile, userProFile } from './api';
  37. const formRef: any = ref(null);
  38. const auth = useAuthStore();
  39. const formValue = reactive<UsersRes>({
  40. id: 0,
  41. name: '',
  42. phone: '',
  43. email: '',
  44. passwd: '',
  45. rePasswd: ''
  46. });
  47. getUserProFile().then(requestData => {
  48. Object.assign(formValue, requestData.data);
  49. });
  50. function validatePasswordSame(role: FormItemRule, value: string): boolean {
  51. if (formValue.passwd === null) {
  52. return true;
  53. }
  54. if (role.message) {
  55. return value === formValue.passwd;
  56. }
  57. return false;
  58. }
  59. const rules = {
  60. name: {
  61. required: true,
  62. message: '请输入昵称',
  63. trigger: 'blur'
  64. },
  65. email: {
  66. required: true,
  67. message: '请输入邮箱',
  68. trigger: 'blur'
  69. },
  70. phone: {
  71. required: true,
  72. message: '请输入联系电话',
  73. trigger: 'input'
  74. },
  75. passwd: [
  76. {
  77. validator(rule: FormItemRule, value: string) {
  78. if (value === '' || value === null) {
  79. return true;
  80. }
  81. if (rule.message) {
  82. return value.length >= 8;
  83. }
  84. return false;
  85. },
  86. trigger: ['change'],
  87. message: '密码长度需要大于 8'
  88. }
  89. ],
  90. rePasswd: [
  91. {
  92. validator: validatePasswordSame,
  93. message: '两次密码输入不一致',
  94. trigger: ['change']
  95. }
  96. ]
  97. };
  98. function formSubmit() {
  99. formRef.value.validate(async (status: Array<Array<object>>) => {
  100. if (status === undefined) {
  101. const res = await userProFile(formValue);
  102. if (res.status) {
  103. window.$message?.success('操作成功!');
  104. if (formValue.passwd) {
  105. auth.resetAuthStore();
  106. }
  107. }
  108. }
  109. });
  110. }
  111. </script>
  112. <style scoped></style>