basic-information.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <a-form
  3. ref="formRef"
  4. :model="formData"
  5. class="form"
  6. :label-col-props="{ span: 8 }"
  7. :wrapper-col-props="{ span: 16 }"
  8. >
  9. <a-form-item
  10. field="email"
  11. :label="$t('userSetting.basicInfo.form.label.email')"
  12. :rules="[
  13. {
  14. required: true,
  15. message: $t('userSetting.form.error.email.required'),
  16. },
  17. ]"
  18. >
  19. <a-input
  20. v-model="formData.email"
  21. :placeholder="$t('userSetting.basicInfo.placeholder.email')"
  22. />
  23. </a-form-item>
  24. <a-form-item
  25. field="nickname"
  26. :label="$t('userSetting.basicInfo.form.label.nickname')"
  27. :rules="[
  28. {
  29. required: true,
  30. message: $t('userSetting.form.error.nickname.required'),
  31. },
  32. ]"
  33. >
  34. <a-input
  35. v-model="formData.nickname"
  36. :placeholder="$t('userSetting.basicInfo.placeholder.nickname')"
  37. />
  38. </a-form-item>
  39. <a-form-item
  40. field="countryRegion"
  41. :label="$t('userSetting.basicInfo.form.label.countryRegion')"
  42. :rules="[
  43. {
  44. required: true,
  45. message: $t('userSetting.form.error.countryRegion.required'),
  46. },
  47. ]"
  48. >
  49. <a-select
  50. v-model="formData.countryRegion"
  51. :placeholder="$t('userSetting.basicInfo.placeholder.area')"
  52. >
  53. <a-option value="China">中国</a-option>
  54. </a-select>
  55. </a-form-item>
  56. <a-form-item
  57. field="area"
  58. :label="$t('userSetting.basicInfo.form.label.area')"
  59. :rules="[
  60. {
  61. required: true,
  62. message: $t('userSetting.form.error.area.required'),
  63. },
  64. ]"
  65. >
  66. <a-cascader
  67. v-model="formData.area"
  68. :placeholder="$t('userSetting.basicInfo.placeholder.area')"
  69. :options="[
  70. {
  71. label: '北京',
  72. value: 'beijing',
  73. children: [
  74. {
  75. label: '北京',
  76. value: 'beijing',
  77. children: [
  78. {
  79. label: '朝阳',
  80. value: 'chaoyang',
  81. },
  82. ],
  83. },
  84. ],
  85. },
  86. ]"
  87. allow-clear
  88. />
  89. </a-form-item>
  90. <a-form-item
  91. field="address"
  92. :label="$t('userSetting.basicInfo.form.label.address')"
  93. >
  94. <a-input
  95. v-model="formData.address"
  96. :placeholder="$t('userSetting.basicInfo.placeholder.address')"
  97. />
  98. </a-form-item>
  99. <a-form-item
  100. field="profile"
  101. :label="$t('userSetting.basicInfo.form.label.profile')"
  102. :rules="[
  103. {
  104. maxLength: 200,
  105. message: $t('userSetting.form.error.profile.maxLength'),
  106. },
  107. ]"
  108. row-class="keep-margin"
  109. >
  110. <a-textarea
  111. v-model="formData.profile"
  112. :placeholder="$t('userSetting.basicInfo.placeholder.profile')"
  113. />
  114. </a-form-item>
  115. <a-form-item>
  116. <a-space>
  117. <a-button type="primary" @click="validate">
  118. {{ $t('userSetting.save') }}
  119. </a-button>
  120. <a-button type="secondary" @click="reset">
  121. {{ $t('userSetting.reset') }}
  122. </a-button>
  123. </a-space>
  124. </a-form-item>
  125. </a-form>
  126. </template>
  127. <script lang="ts" setup>
  128. import { ref } from 'vue';
  129. import { FormInstance } from '@arco-design/web-vue';
  130. import { BasicInfoModel } from '@/api/user-center';
  131. const formRef = ref<FormInstance>();
  132. const formData = ref<BasicInfoModel>({
  133. email: '',
  134. nickname: '',
  135. countryRegion: '',
  136. area: '',
  137. address: '',
  138. profile: '',
  139. });
  140. const validate = async () => {
  141. const res = await formRef.value?.validate();
  142. if (!res) {
  143. // do some thing
  144. // you also can use html-type to submit
  145. }
  146. };
  147. const reset = async () => {
  148. await formRef.value?.resetFields();
  149. };
  150. </script>
  151. <style scoped lang="less">
  152. .form {
  153. width: 540px;
  154. margin: 0 auto;
  155. }
  156. </style>