12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <template>
- <fs-form ref="formRef" :model="userInfo">
- <view class="text-center">
- <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="handleUpload">
- <fs-avatar size="140rpx" bgColor="#EBEFF5" :src="userInfo.photo">
- <fs-icon type="icon-photo" size="50rpx"></fs-icon>
- </fs-avatar>
- </button>
- </view>
- <fs-form-item required label="姓名">
- <fs-field placeholder="请输入姓名" v-model="userInfo.name"></fs-field>
- </fs-form-item>
- <fs-form-item required label="手机号">
- <fs-field placeholder="请输入手机号" v-model="userInfo.mobile"></fs-field>
- </fs-form-item>
- <fs-form-item label="性别">
- <fs-radio-group inline v-model="userInfo.sex">
- <fs-radio value="1">男</fs-radio>
- <fs-radio value="2">女</fs-radio>
- </fs-radio-group>
- </fs-form-item>
- <fs-gutter height="100rpx"></fs-gutter>
- <fs-button block round @click="handleSave">保存</fs-button>
- </fs-form>
- </template>
- <script setup>
- import useForm from '@/hooks/useForm'
- import useValidator from '@/hooks/useValidator'
- import { useUserStore } from '@/stores/user'
- import utils from '@/utils/utils'
- const user = useUserStore()
- const userInfo = computed(() => user.userInfo)
- const validator = useValidator()
- const rules = {
- name: {
- required: true,
- message: '请输入姓名'
- },
- mobile: { validator: validator.mobile }
- }
- const formRef = ref(null)
- const form = useForm(rules, 'formRef')
- const { proxy } = getCurrentInstance()
- const handleUpload = e => {
- wx.editImage({
- src: e.detail.avatarUrl,
- success: res => {
- utils
- .uploadFile({
- filePath: res.tempFilePath,
- url: proxy.$uploadUrl
- })
- .then(res => {
- userInfo.value.photo = res
- })
- }
- })
- }
- const handleSave = () => {
- form.validate().then(() => {
- user.setUserInfo(userInfo.value)
- uni.switchTab({
- url: '/pages/my/my'
- })
- })
- }
- </script>
- <style lang="scss" scoped>
- .avatar-wrapper {
- margin: 30rpx;
- width: 140rpx;
- height: 140rpx;
- border-radius: 50%;
- border: none;
- padding: 0;
- display: inline-block;
- background-color: transparent;
- &::after {
- border: none;
- }
- }
- </style>
|