From 05316275ee6f1623cc022a3cb4967a440c105a6b Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期二, 29 七月 2025 16:43:42 +0800 Subject: [PATCH] add:编辑资料 --- sub-pages/mine/profile-edit.vue | 187 ++++++++++++++++++++++++++++++---------------- 1 files changed, 122 insertions(+), 65 deletions(-) diff --git a/sub-pages/mine/profile-edit.vue b/sub-pages/mine/profile-edit.vue index bc49ab5..5280e41 100644 --- a/sub-pages/mine/profile-edit.vue +++ b/sub-pages/mine/profile-edit.vue @@ -1,33 +1,21 @@ <template> <view class="edit-profile"> <view class="avatar-box"> - <up-avatar :src="form.avatar" size="80" @click="onChangeAvatar" /> + <up-avatar :src="form.cover" size="80" @click="onChangeAvatar" /> </view> <up-cell-group :border="false" :customStyle="cellGroupStyle"> - <up-cell title="名字" isLink @click="editField('nickname')"> + <up-cell title="名字" isLink @click="editField('名称')"> <template #value> - <view class="cell-value">{{ form.nickname }}</view> - </template> - </up-cell> - <up-cell title="小红书号" isLink @click="editField('xhsId')"> - <template #value> - <view class="cell-value">{{ form.xhsId }}</view> - </template> - </up-cell> - <up-cell title="背景图" isLink @click="editField('backgroundImg')"> - <template #value> - <view class="cell-value"> - <image class="bg-img" :src="form.backgroundImg" mode="aspectFill" @click="onChangeBackground" /> - </view> + <view class="cell-value">{{ form.name }}</view> </template> </up-cell> </up-cell-group> <up-cell-group :border="false" :customStyle="cellGroupStyle"> - <up-cell title="简介" isLink @click="editField('intro')"> + <up-cell title="简介" isLink @click="editField('简介')"> <template #value> - <view class="cell-value">{{ form.intro }}</view> + <view class="cell-value">{{ form.description }}</view> </template> </up-cell> </up-cell-group> @@ -35,27 +23,12 @@ <up-cell-group :border="false" :customStyle="cellGroupStyle"> <up-cell title="性别" isLink @click="selectGender"> <template #value> - <view class="cell-value">{{ form.gender }}</view> - </template> - </up-cell> - <up-cell title="生日" isLink @click="selectBirthday"> - <template #value> - <view class="cell-value">{{ form.birthday }}</view> + <view class="cell-value">{{ form.gender || '未选择' }}</view> </template> </up-cell> <up-cell title="地区" isLink @click="selectRegion"> <template #value> - <view class="cell-value">{{ form.region }}</view> - </template> - </up-cell> - <up-cell title="职业" isLink @click="selectJob"> - <template #value> - <view class="cell-value">{{ form.job }}</view> - </template> - </up-cell> - <up-cell title="学校" isLink @click="editField('school')"> - <template #value> - <view class="cell-value">{{ form.school }}</view> + <view class="cell-value">{{ form.address }}</view> </template> </up-cell> </up-cell-group> @@ -67,60 +40,144 @@ </template> <script setup lang="ts"> -import { ref } from 'vue'; +import { ref,onMounted } from 'vue'; import { useGlobal } from '@/composables/useGlobal' +import { useUserStore } from '@/store/user' const { $http, $message, $store } = useGlobal() const cellGroupStyle = 'background-color: #ffffff; margin-bottom: 20rpx; border-radius: 16rpx;' - +const userStore = useUserStore() const form = ref({ - avatar: 'https://cdn.uviewui.com/uview/album/1.jpg', - nickname: '小红薯6786F040', - xhsId: '95619601810', - backgroundImg: 'https://smart-manager-new.tos-cn-beijing.volces.com/sms/avatar/avatar.png', - intro: '介绍一下自己', - gender: '女', - birthday: '选择生日', - region: '选择所在的地区', - job: '选择职业', - school: '选择学校' + id: '', + cover: '', + name: '', + description: '', + gender: '', + address: '', }); -const onPreview = () => { - $message.showToast('预览功能暂未实现'); -}; const onChangeAvatar = () => { - $message.showToast('更换头像'); + uni.chooseImage({ + count: 1, + success: (res) => { + form.value.cover = res.tempFilePaths[0]; + } + }); }; -const onChangeBackground = () => { - $message.showToast('更换背景图'); -}; - +// const editField = (field: string) => { +// uni.showModal({ +// title: `编辑${field}`, +// content: '', +// placeholderText: `请输入${field}`, +// editable: true, +// success: (res) => { +// if (res.confirm && res.content) { +// form.value[field] = res.content; +// } +// }, +// }); +// }; const editField = (field: string) => { - $message.showToast(`编辑字段: ${field}`); + // 创建字段映射关系 + const fieldMap: Record<string, keyof typeof form.value> = { + '名称': 'name', + '简介': 'description' + }; + + const fieldName = fieldMap[field]; + if (!fieldName) { + $message.showToast('不支持的字段'); + return; + } + + uni.showModal({ + title: `编辑${field}`, + content: form.value[fieldName], // 显示当前值 + placeholderText: `请输入${field}`, + editable: true, + success: (res) => { + if (res.confirm && res.content) { + form.value[fieldName] = res.content; + } + }, + }); }; + const selectGender = () => { - $message.showToast('选择性别'); + uni.showActionSheet({ + itemList: ['男', '女'], + success: (res) => { + form.value.gender = res.tapIndex === 0 ? '男' : '女'; + } + }); }; -const selectBirthday = () => { - $message.showToast('选择生日'); -}; + const selectRegion = () => { - $message.showToast('选择地区'); + uni.chooseLocation({ + success: (res) => { + form.value.address = res.address; + } + }); }; -const selectJob = () => { - $message.showToast('选择职业'); + +const onSave = async () => { + try { + // 构造请求体,排除 id 字段 + const updatedUserInfo = { + id: form.value.id, + cover: form.value.cover, + description: form.value.description, + name: form.value.name, + gender: form.value.gender, + address: form.value.address, + }; + // 调用后端 API 更新用户信息 + const {code, data} = await $http.request('post', '/api/customer/addOrUpdate', { + data: updatedUserInfo + }); + + if (code === 0) { + $message.showToast('资料已保存'); + + // 更新 store 中的用户信息 + await userStore.getCurrentInfo(); + } else { + $message.showToast('保存失败:' + (data?.msg || '未知错误')); + } + } catch (error) { + console.error('保存用户信息失败', error) + $message.showToast('保存用户信息失败') + } }; -const onSave = () => { - $message.showToast('资料已保存'); -}; + +onMounted(async () => { + // 正确获取store实例 + if (!userStore.userInfo) { + await userStore.getCurrentInfo(); + } + const userInfo = userStore.userInfo?.customerDTO; + console.log("开始处理用户数据") + if (userInfo) { + form.value = { + id: userInfo.id, + cover: userInfo.cover || 'https://cdn.uviewui.com/uview/album/1.jpg', + name: userInfo.name || '影游四方', + description: userInfo.description || '介绍一下自己', + gender: userInfo.gender || '女', + address: userInfo.address || '选择所在的地区' + }; + } + +}) + + </script> <style lang="scss" scoped> -- Gitblit v1.9.3