userInfo.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <fs-form ref="formRef">
  3. <fs-cell title="头像" justify="right" border tighten>
  4. <template #value>
  5. <fs-avatar bgColor="#EBEFF5" :src="userInfo.photo" @click="handleUpload">
  6. <fs-icon type="icon-photo"></fs-icon>
  7. </fs-avatar>
  8. </template>
  9. </fs-cell>
  10. <fs-form-item required label="姓名">
  11. <fs-field placeholder="请输入姓名" v-model="userInfo.name"></fs-field>
  12. </fs-form-item>
  13. <fs-form-item required label="手机号">
  14. <fs-field placeholder="请输入手机号" v-model="userInfo.mobile"></fs-field>
  15. </fs-form-item>
  16. <fs-form-item label="性别">
  17. <fs-radio-group inline v-model="userInfo.sex">
  18. <fs-radio value="1">男</fs-radio>
  19. <fs-radio value="2">女</fs-radio>
  20. </fs-radio-group>
  21. </fs-form-item>
  22. <fs-gutter height="100rpx"></fs-gutter>
  23. <fs-button block round @click="handleSave">保存</fs-button>
  24. </fs-form>
  25. </template>
  26. <script setup>
  27. import { ref, computed } from 'vue'
  28. import { useStore } from 'vuex'
  29. import useForm from '@/hooks/useForm'
  30. import useValidator from '@/hooks/useValidator'
  31. import utils from '@/utils/utils'
  32. const store = useStore()
  33. const validator = useValidator()
  34. // 测试数据,实际使用过程务必删掉
  35. const testData = {
  36. name: 'ming',
  37. mobile: '18734826752',
  38. sex: '1'
  39. }
  40. const userInfo = computed(() => ({...store.state.userInfo, ...testData}))
  41. const rules = {
  42. name: {
  43. required: true,
  44. message: '请输入姓名'
  45. },
  46. mobile: { validator: validator.mobile }
  47. }
  48. const formRef = ref(null)
  49. const form = useForm(rules, 'formRef')
  50. const handleUpload = () => {
  51. utils.chooseAndUploadImage(
  52. {},
  53. {
  54. url: ''
  55. }
  56. ).then(res => {
  57. userInfo.photo = res
  58. })
  59. }
  60. const handleSave = () => {
  61. form.validate().then(() => {
  62. console.log('success')
  63. })
  64. }
  65. </script>
  66. <style lang="scss" scoped>
  67. </style>