UserInfo.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <Form ref="formRef" :labelWidth="200" :rules="rules" :schema="schema">
  3. <template #sex="form">
  4. <el-radio-group v-model="form['sex']">
  5. <el-radio :value="1">{{ t('index.user.man') }}</el-radio>
  6. <el-radio :value="2">{{ t('index.user.woman') }}</el-radio>
  7. </el-radio-group>
  8. </template>
  9. </Form>
  10. <div style="text-align: center">
  11. <XButton :title="t('common.save')" type="primary" @click="submit()" />
  12. <XButton :title="t('common.reset')" type="danger" @click="init()" />
  13. </div>
  14. </template>
  15. <script lang="ts" setup>
  16. import type { FormRules } from 'element-plus'
  17. import { FormSchema } from '@/types/form'
  18. import type { FormExpose } from '@/components/Form'
  19. import { useUserStore } from '@/store/modules/user'
  20. import {
  21. getDept,
  22. updateDept,
  23. DeptVO
  24. } from '@/api/system/dept/index'
  25. import { ref, reactive, onMounted, defineOptions, unref } from 'vue'
  26. import { useI18n } from 'vue-i18n'
  27. import { useMessage } from '@/hooks/web/useMessage'
  28. defineOptions({ name: 'UserInfo' })
  29. const { t } = useI18n()
  30. const message = useMessage()
  31. const userStore = useUserStore()
  32. // const data = ref<DeptVO | null>(null)
  33. const rules = reactive<FormRules>({
  34. nickname: [{ required: true, message: t('index.user.user.nickname'), trigger: 'blur' }],
  35. email: [
  36. { required: true, message: t('index.user.user.mail'), trigger: 'blur' },
  37. {
  38. type: 'email',
  39. message: t('index.user.user.truemail'),
  40. trigger: ['blur', 'change']
  41. }
  42. ],
  43. mobile: [
  44. { required: true, message: t('index.user.user.phone'), trigger: 'blur' },
  45. {
  46. pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  47. message: t('index.user.user.truephone'),
  48. trigger: 'blur'
  49. }
  50. ]
  51. })
  52. const schema = reactive<FormSchema[]>([
  53. {
  54. field: 'user.nickname',
  55. label: t('res.user.nickname'),
  56. component: 'Input'
  57. },
  58. {
  59. field: 'user.mobile',
  60. label: t('index.user.user.mobile'),
  61. component: 'Input'
  62. },
  63. {
  64. field: 'email',
  65. label: t('index.user.user.email'),
  66. component: 'Input'
  67. },
  68. {
  69. field: 'sex',
  70. label: t('index.user.user.sex'),
  71. component: 'Radio'
  72. }
  73. ])
  74. const formRef = ref<FormExpose>()
  75. const submit = async () => {
  76. const elForm = unref(formRef)?.getElFormRef()
  77. if (!elForm) return
  78. elForm.validate(async (valid) => {
  79. if (valid) {
  80. const formData = unref(formRef)?.formModel as DeptVO
  81. console.log('提交的数据:', formData)
  82. await updateDept(formData)
  83. message.success(t('common.updateSuccess'))
  84. userStore.setUserNicknameAction(formData.user.nickname)
  85. }
  86. })
  87. }
  88. const init = async () => {
  89. const res = await getDept(114)
  90. console.log('获取的数据:', res)
  91. unref(formRef)?.setValues(res)
  92. return res
  93. }
  94. onMounted(async () => {
  95. await init()
  96. })
  97. </script>