|
|
@ -17,14 +17,27 @@ |
|
|
|
<view class="flex-colc"> |
|
|
|
<button class="btn-avatar" :plain="true" :hairline="false" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"> |
|
|
|
<view class="flex-colc"> |
|
|
|
<image class="head" :src="baseInfo.info.userImage" mode="widthFix"></image> |
|
|
|
<image class="head" :src="form.headImage" mode="aspectFill"></image> |
|
|
|
<!-- <image class="head" :src="form.headImage" mode="widthFix"></image> --> |
|
|
|
<text class="size-28 color-999 mt10">点击更换头像</text> |
|
|
|
</view> |
|
|
|
</button> |
|
|
|
</view> |
|
|
|
<view class="form"> |
|
|
|
|
|
|
|
<up-form label-position="left" :model="baseFormData" :rules="baseRules" ref="baseFormRef" labelWidth="200rpx"> |
|
|
|
<up-form-item label="昵称" prop="userName"> |
|
|
|
<up-input inputAlign="right" v-model="baseFormData.userName" placeholder="请输入" border="none" fontSize="28rpx"></up-input> |
|
|
|
</up-form-item> |
|
|
|
<up-form-item label="手机号" prop="userTelephone"> |
|
|
|
<up-input inputAlign="right" v-model="baseFormData.userTelephone" placeholder="请输入" border="none" fontSize="28rpx"></up-input> |
|
|
|
</up-form-item> |
|
|
|
<up-form-item label="性别" prop="sex"> |
|
|
|
<view class="flex-rowr" @click="openSexSelectPopup"> |
|
|
|
<text>{{ baseFormData.sex || '请选择' }}</text> |
|
|
|
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon> |
|
|
|
</view> |
|
|
|
</up-form-item> |
|
|
|
</up-form> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
@ -34,6 +47,29 @@ |
|
|
|
<text class="size-22 color-ffb fw700">(重要)</text> |
|
|
|
</view> |
|
|
|
<view class="form"> |
|
|
|
<up-form label-position="left" :model="formData" :rules="rules" ref="dFormRef" labelWidth="200rpx"> |
|
|
|
<up-form-item label="个人简介" prop="introduction"> |
|
|
|
<up-input v-model="formData.introduction" |
|
|
|
placeholder="请输入个人简介" border="none" |
|
|
|
inputAlign="right" |
|
|
|
fontSize="28rpx"> |
|
|
|
</up-input> |
|
|
|
</up-form-item> |
|
|
|
<up-form-item label="养宠经验" prop="experience"> |
|
|
|
<up-input inputAlign="right" v-model="formData.experience" placeholder="请输入养宠经验" |
|
|
|
border="none" fontSize="28rpx"> |
|
|
|
<template #suffix> |
|
|
|
年 |
|
|
|
</template> |
|
|
|
</up-input> |
|
|
|
</up-form-item> |
|
|
|
<up-form-item label="服务记录" prop="serviceRecord"> |
|
|
|
<view class="flex-rowr" @click="jumpToServeRecord"> |
|
|
|
<text>{{ `${serviceCount}条` }}</text> |
|
|
|
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon> |
|
|
|
</view> |
|
|
|
</up-form-item> |
|
|
|
</up-form> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
@ -42,6 +78,20 @@ |
|
|
|
服务资料 |
|
|
|
</view> |
|
|
|
<view class="form"> |
|
|
|
<up-form label-position="left" :model="serveFormData" ref="serveFormRef" labelWidth="200rpx"> |
|
|
|
<up-form-item label="服务宠物类型" prop="type"> |
|
|
|
<view class="flex-rowr" @click="openTypeSelectPopup"> |
|
|
|
<text>{{ typeDesc }}</text> |
|
|
|
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon> |
|
|
|
</view> |
|
|
|
</up-form-item> |
|
|
|
<up-form-item label="增值服务" prop="serve"> |
|
|
|
<view class="flex-rowr" @click="openServeSelectPopup"> |
|
|
|
<text>{{ serveDesc }}</text> |
|
|
|
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon> |
|
|
|
</view> |
|
|
|
</up-form-item> |
|
|
|
</up-form> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
@ -51,7 +101,9 @@ |
|
|
|
|
|
|
|
<popupTypeSelect ref="popupTypeSelectRef" v-model="form.type" @confirm="fetchUpdate" ></popupTypeSelect> |
|
|
|
|
|
|
|
<popupServeSelect ref="popupServeSelectRef" v-model="form.serve" @confirm="fetchUpdate" ></popupServeSelect> |
|
|
|
<popupServeSelect ref="popupServeSelectRef" v-model="serveFormData.serve" @confirm="fetchUpdate" ></popupServeSelect> |
|
|
|
|
|
|
|
<popupSexSelect ref="popupSexSelectRef" v-model="baseFormData.sex" @confirm="fetchUpdate" ></popupSexSelect> |
|
|
|
|
|
|
|
<view class="uni-btn-color" |
|
|
|
@click="submit"> |
|
|
@ -68,10 +120,13 @@ |
|
|
|
|
|
|
|
import popupTypeSelect from "./popupTypeSelect.vue"; |
|
|
|
import popupServeSelect from "./popupServeSelect.vue"; |
|
|
|
import popupSexSelect from "./popupSexSelect.vue"; |
|
|
|
import { serviceLogList } from '@/api/serviceLog' |
|
|
|
import { |
|
|
|
binBaseInfo, |
|
|
|
} from "@/api/home.js" |
|
|
|
import { getUserOne, udpateUser } from '@/api/userTeacher' |
|
|
|
import { updateUserInfo } from '@/api/user/user' |
|
|
|
|
|
|
|
const store = useStore() |
|
|
|
|
|
|
@ -81,17 +136,109 @@ |
|
|
|
const userInfo = computed(() => { |
|
|
|
return store.getters.userInfo |
|
|
|
}) |
|
|
|
|
|
|
|
const baseInfo = ref(JSON.parse(uni.getStorageSync("baseInfo"))) |
|
|
|
|
|
|
|
|
|
|
|
const serviceCount = ref(0) |
|
|
|
|
|
|
|
const baseFormData = reactive({ |
|
|
|
userName: '', |
|
|
|
userTelephone: '', |
|
|
|
sex: '' |
|
|
|
}) |
|
|
|
|
|
|
|
const baseRules = { |
|
|
|
userName: { |
|
|
|
type: 'string', |
|
|
|
required: true, |
|
|
|
message: '请输入昵称', |
|
|
|
trigger: ['blur', 'change'] |
|
|
|
}, |
|
|
|
userTelephone: { |
|
|
|
type: 'string', |
|
|
|
required: true, |
|
|
|
message: '请输入手机号', |
|
|
|
trigger: ['blur', 'change'] |
|
|
|
}, |
|
|
|
sex: { |
|
|
|
type: 'string', |
|
|
|
required: true, |
|
|
|
message: '请选择性别', |
|
|
|
trigger: ['blur', 'change'] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const baseFormRef = ref(null) |
|
|
|
|
|
|
|
const formData = reactive({ |
|
|
|
introduction: '', |
|
|
|
experience: '', |
|
|
|
serviceRecord: '' |
|
|
|
}) |
|
|
|
|
|
|
|
const rules = { |
|
|
|
introduction: { |
|
|
|
type: 'string', |
|
|
|
required: true, |
|
|
|
message: '请输入个人简介', |
|
|
|
trigger: ['blur', 'change'] |
|
|
|
}, |
|
|
|
experience: { |
|
|
|
type: 'string', |
|
|
|
required: true, |
|
|
|
message: '请输入养宠经验', |
|
|
|
trigger: ['blur', 'change'] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const dFormRef = ref(null) |
|
|
|
|
|
|
|
const form = reactive({ |
|
|
|
headImage: null, |
|
|
|
type: [], |
|
|
|
serve: [], |
|
|
|
id : 0, |
|
|
|
}) |
|
|
|
|
|
|
|
const serveFormData = reactive({ |
|
|
|
serve: [] |
|
|
|
}) |
|
|
|
|
|
|
|
const serveFormRef = ref(null) |
|
|
|
|
|
|
|
const fetchUserInfo = async () => { |
|
|
|
try { |
|
|
|
const data = await getUserOne(userInfo.value.userId) |
|
|
|
|
|
|
|
if (data) { |
|
|
|
// 设置基本资料 |
|
|
|
baseFormData.userName = userInfo.value.userName || '' |
|
|
|
baseFormData.userTelephone = data.phone || userInfo.value.userTelephone || '' |
|
|
|
baseFormData.sex = data.sex === 0 ? '男' : '女' |
|
|
|
|
|
|
|
// 设置展示信息 |
|
|
|
formData.introduction = data.introduction || '' |
|
|
|
formData.experience = data.experience || '' |
|
|
|
|
|
|
|
form.headImage = userInfo.value.userImage || '' |
|
|
|
form.id = data.id || 0 |
|
|
|
|
|
|
|
// 设置服务资料 |
|
|
|
if (data.petType) { |
|
|
|
form.type = [data.petType] |
|
|
|
} |
|
|
|
|
|
|
|
// 设置增值服务 |
|
|
|
if (data.license) { |
|
|
|
serveFormData.serve = data.license.split(';').map(item => parseInt(item)) |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (err) { |
|
|
|
console.log('--err', err) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const fetchUpdate = () => { |
|
|
|
// 表单数据已更新,无需额外处理 |
|
|
|
} |
|
|
|
|
|
|
|
const onChooseAvatar = (res) => { |
|
|
|
ossUpload(res.target.avatarUrl) |
|
|
|
.then(url => { |
|
|
@ -101,10 +248,6 @@ |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
const baseInfoRef = ref(null) |
|
|
|
const displayInfoRef = ref(null) |
|
|
|
const serveInfoRef = ref(null) |
|
|
|
|
|
|
|
const jumpToServeRecord = () => { |
|
|
|
uni.navigateTo({ |
|
|
|
url: "/otherPages/authentication/serve/record" |
|
|
@ -115,6 +258,11 @@ |
|
|
|
const openTypeSelectPopup = () => { |
|
|
|
popupTypeSelectRef.value.open() |
|
|
|
} |
|
|
|
|
|
|
|
const popupSexSelectRef = ref() |
|
|
|
const openSexSelectPopup = () => { |
|
|
|
popupSexSelectRef.value.open() |
|
|
|
} |
|
|
|
const petTypeOptions = computed(() => { |
|
|
|
return store.getters.petTypeOptions |
|
|
|
}) |
|
|
@ -124,8 +272,10 @@ |
|
|
|
return '请选择' |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let descArr = typeIds.map(typeId => { |
|
|
|
return petTypeOptions.value.find(item => item.id === typeId).title |
|
|
|
let t = petTypeOptions.value.find(item => item.id === typeId) |
|
|
|
return t && t.title |
|
|
|
}) |
|
|
|
|
|
|
|
return descArr.join('、') |
|
|
@ -139,13 +289,13 @@ |
|
|
|
popupServeSelectRef.value.open() |
|
|
|
} |
|
|
|
const serveDesc = computed(() => { |
|
|
|
const serveIds = form.serve |
|
|
|
const serveIds = serveFormData.serve |
|
|
|
if (!serveIds.length) { |
|
|
|
return '请选择' |
|
|
|
} |
|
|
|
|
|
|
|
let descArr = serveIds.map(serveId => { |
|
|
|
return increaseServiceOptions.value.find(option => option.id === serveId)?.title |
|
|
|
return increaseServiceOptions.value.find(option => option.id == serveId)?.title |
|
|
|
}) |
|
|
|
|
|
|
|
return descArr.join('、') |
|
|
@ -158,55 +308,71 @@ |
|
|
|
}) |
|
|
|
} |
|
|
|
const getBaseInfo = () => { |
|
|
|
binBaseInfo(baseInfo.value.userId).then(res => { |
|
|
|
binBaseInfo(userInfo.value.userId).then(res => { |
|
|
|
baseInfo.value = res.data |
|
|
|
uni.setStorageSync(JSON.stringify(res.data)) |
|
|
|
|
|
|
|
// baseInfoRef.value.setData(res.data.info) |
|
|
|
|
|
|
|
|
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
function submit(){ |
|
|
|
// 先验证基本资料表单 |
|
|
|
baseFormRef.value.validate().then(() => { |
|
|
|
// 再验证展示信息表单 |
|
|
|
return dFormRef.value.validate() |
|
|
|
}).then(res => { |
|
|
|
const submitData = { |
|
|
|
id : form.id, |
|
|
|
phone: baseFormData.userTelephone, |
|
|
|
sex: baseFormData.sex === '男' ? 0 : 1, |
|
|
|
introduction: formData.introduction, |
|
|
|
experience: formData.experience, |
|
|
|
petType: form.type.length > 0 ? form.type[0] : null, |
|
|
|
license: serveFormData.serve.join(';'), |
|
|
|
} |
|
|
|
|
|
|
|
if (form.headImage) { |
|
|
|
updateUserInfo({ |
|
|
|
userImage : form.headImage, |
|
|
|
userName: baseFormData.userName, |
|
|
|
id : userInfo.value.id, |
|
|
|
userId : userInfo.value.userId, |
|
|
|
}).then(() => { |
|
|
|
store.dispatch('getUserInfo') |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
udpateUser(submitData).then(() => { |
|
|
|
uni.showToast({ |
|
|
|
title: '保存成功', |
|
|
|
icon: 'success' |
|
|
|
}) |
|
|
|
setTimeout(uni.navigateBack, 1000, -1) |
|
|
|
}).catch(err => { |
|
|
|
console.error(err) |
|
|
|
uni.showToast({ |
|
|
|
title: '保存失败', |
|
|
|
icon: 'error' |
|
|
|
}) |
|
|
|
}) |
|
|
|
}).catch(err => { |
|
|
|
console.log('表单验证失败', err) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
onShow(() => { |
|
|
|
getCountSerivce() |
|
|
|
getBaseInfo() |
|
|
|
fetchUserInfo() |
|
|
|
store.dispatch('fetchPetTypeOptions') |
|
|
|
store.dispatch('fetchIncreaseServiceOptions') |
|
|
|
}) |
|
|
|
|
|
|
|
onMounted(()=> { |
|
|
|
// todo: fetch data and init data |
|
|
|
|
|
|
|
serveInfoRef.value.setDataByKey('base', configList.value.pet_basic_services.paramValueText) |
|
|
|
}) |
|
|
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
|
|
|
|
.form{ |
|
|
|
.form-item { |
|
|
|
min-height: 90rpx; |
|
|
|
padding-top: 10rpx; |
|
|
|
width: 100%; |
|
|
|
border-bottom: 1rpx solid #f5f5f5; |
|
|
|
} |
|
|
|
|
|
|
|
.flex-rowr { |
|
|
|
display: flex; |
|
|
|
justify-content: flex-end; |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
|
|
|
|
.ml10 { |
|
|
|
margin-left: 10rpx; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.page { |
|
|
|
padding-top: 16rpx; |
|
|
|
padding-bottom: 150rpx; |
|
|
@ -234,13 +400,18 @@ |
|
|
|
|
|
|
|
.head { |
|
|
|
width: 165rpx; |
|
|
|
height: auto; |
|
|
|
height: 165rpx; |
|
|
|
margin-top: 28rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.btn-avatar { |
|
|
|
border: none; |
|
|
|
padding: 0; |
|
|
|
.head{ |
|
|
|
width: 140rpx; |
|
|
|
height: 140rpx; |
|
|
|
border-radius: 50%; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.title { |
|
|
@ -262,13 +433,29 @@ |
|
|
|
} |
|
|
|
|
|
|
|
.form { |
|
|
|
padding: 0 22rpx; |
|
|
|
padding: 0 38rpx; |
|
|
|
|
|
|
|
:deep(.form-item){ |
|
|
|
padding-left: 24rpx; |
|
|
|
padding-right: 30rpx; |
|
|
|
box-sizing: border-box; |
|
|
|
} |
|
|
|
.form-item { |
|
|
|
min-height: 90rpx; |
|
|
|
padding-top: 10rpx; |
|
|
|
width: 100%; |
|
|
|
border-bottom: 1rpx solid #f5f5f5; |
|
|
|
} |
|
|
|
|
|
|
|
.flex-rowr { |
|
|
|
display: flex; |
|
|
|
justify-content: flex-end; |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
|
|
|
|
.ml10 { |
|
|
|
margin-left: 10rpx; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.uni-btn-color{ |
|
|
|