<template>
|
|
<view class="page bg-fff">
|
|
<view class="size-22 color-ffb flex-rowl tip">
|
|
<image class="icon" :src="configList.my_information_statement.paramValueImage"></image>
|
|
<view>
|
|
<up-parse :content="configList.my_information_statement.paramValueArea" containerStyle="{
|
|
color: '#FFBF60',
|
|
fontSize: '22rpx',
|
|
lineHeight: '40rpx',
|
|
}"></up-parse>
|
|
</view>
|
|
</view>
|
|
<view class="info">
|
|
<view class="title mt24">
|
|
基本资料
|
|
</view>
|
|
<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="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>
|
|
|
|
<view class="info">
|
|
<view class="title mt24 flex-rowl">
|
|
展示信息
|
|
<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="userBrief">
|
|
<up-input v-model="formData.userBrief"
|
|
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>
|
|
|
|
<view class="info">
|
|
<view class="title mt24 flex-rowl">
|
|
服务资料
|
|
</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>
|
|
|
|
<view class="size-24 color-ffb flex-rowc mt32 pb28">
|
|
伴宠师查看服务酬劳、服务时长等规则
|
|
</view>
|
|
|
|
<popupTypeSelect ref="popupTypeSelectRef" v-model="form.type" @confirm="fetchUpdate" ></popupTypeSelect>
|
|
|
|
<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">
|
|
保存
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, reactive, computed, onMounted, nextTick } from "vue";
|
|
import { useStore } from 'vuex'
|
|
import { onShow } from '@dcloudio/uni-app'
|
|
import { ossUpload } from '@/utils/oss-upload/oss/index.js'
|
|
|
|
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()
|
|
|
|
const configList = computed(() => {
|
|
return store.getters.configList
|
|
})
|
|
const userInfo = computed(() => {
|
|
return store.getters.userInfo
|
|
})
|
|
|
|
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: '',
|
|
userBrief : '',
|
|
})
|
|
|
|
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: [],
|
|
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.userBrief = data.userBrief || ''
|
|
formData.experience = data.experience || ''
|
|
|
|
form.headImage = userInfo.value.userImage || ''
|
|
form.id = data.id || 0
|
|
|
|
// 设置服务资料
|
|
if (data.petType) {
|
|
form.type = data.petType.split ? data.petType.split(',').map(n => parseInt(n)) : [parseInt(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 => {
|
|
form.headImage = url
|
|
|
|
fetchUpdate()
|
|
})
|
|
}
|
|
|
|
const jumpToServeRecord = () => {
|
|
uni.navigateTo({
|
|
url: "/otherPages/authentication/serve/record"
|
|
})
|
|
}
|
|
|
|
const popupTypeSelectRef = ref()
|
|
const openTypeSelectPopup = () => {
|
|
popupTypeSelectRef.value.open()
|
|
}
|
|
|
|
const popupSexSelectRef = ref()
|
|
const openSexSelectPopup = () => {
|
|
popupSexSelectRef.value.open()
|
|
}
|
|
const petTypeOptions = computed(() => {
|
|
return store.getters.petTypeOptions
|
|
})
|
|
const typeDesc = computed(() => {
|
|
const typeIds = form.type
|
|
if (!typeIds.length) {
|
|
return '请选择'
|
|
}
|
|
|
|
|
|
let descArr = typeIds.map(typeId => {
|
|
let t = petTypeOptions.value.find(item => item.id === typeId)
|
|
return t && t.title
|
|
})
|
|
|
|
return descArr.join('、')
|
|
})
|
|
|
|
const popupServeSelectRef = ref()
|
|
const increaseServiceOptions = computed(() => {
|
|
return store.getters.increaseServiceOptions
|
|
})
|
|
const openServeSelectPopup = () => {
|
|
popupServeSelectRef.value.open()
|
|
}
|
|
const serveDesc = computed(() => {
|
|
const serveIds = serveFormData.serve
|
|
if (!serveIds.length) {
|
|
return '请选择'
|
|
}
|
|
|
|
let descArr = serveIds.map(serveId => {
|
|
return increaseServiceOptions.value.find(option => option.id == serveId)?.title
|
|
})
|
|
|
|
return descArr.join('、')
|
|
})
|
|
|
|
function getCountSerivce(){
|
|
serviceLogList({ userId: userInfo.value.userId })
|
|
.then(res => {
|
|
serviceCount.value = res.length
|
|
})
|
|
}
|
|
const getBaseInfo = () => {
|
|
binBaseInfo(userInfo.value.userId).then(res => {
|
|
baseInfo.value = res.data
|
|
uni.setStorageSync(JSON.stringify(res.data))
|
|
})
|
|
}
|
|
|
|
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,
|
|
userBrief: formData.userBrief,
|
|
experience: formData.experience,
|
|
petType: form.type.length > 0 ? form.type.join(',') : 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()
|
|
fetchUserInfo()
|
|
store.dispatch('fetchPetTypeOptions')
|
|
store.dispatch('fetchIncreaseServiceOptions')
|
|
})
|
|
|
|
onMounted(()=> {
|
|
})
|
|
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.page {
|
|
padding-top: 16rpx;
|
|
padding-bottom: 150rpx;
|
|
|
|
.tip {
|
|
background-color: rgba($color: #FFBF60, $alpha: 0.16);
|
|
padding: 13rpx 22rpx;
|
|
margin: 0 28rpx 37rpx 28rpx;
|
|
|
|
.icon {
|
|
width: 36rpx;
|
|
height: 36rpx;
|
|
margin-right: 15rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.info {
|
|
|
|
& + & {
|
|
margin-top: 50rpx;
|
|
}
|
|
|
|
}
|
|
|
|
.head {
|
|
width: 165rpx;
|
|
height: 165rpx;
|
|
margin-top: 28rpx;
|
|
}
|
|
|
|
.btn-avatar {
|
|
border: none;
|
|
padding: 0;
|
|
.head{
|
|
width: 140rpx;
|
|
height: 140rpx;
|
|
border-radius: 50%;
|
|
}
|
|
}
|
|
|
|
.title {
|
|
font-size: 30rpx;
|
|
font-weight: 700;
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 0 40rpx;
|
|
|
|
&:before {
|
|
display: inline-block;
|
|
content: "";
|
|
width: 10rpx;
|
|
border-radius: 5rpx;
|
|
height: 33rpx;
|
|
background-color: #FFBF60;
|
|
margin-right: 7rpx;
|
|
}
|
|
}
|
|
|
|
.form {
|
|
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{
|
|
border-radius: 40rpx;
|
|
padding: 20rpx;
|
|
margin: 40rpx;
|
|
background: #FFBF60;
|
|
color: #fff;
|
|
text-align: center;
|
|
font-size: 28rpx;
|
|
}
|
|
</style>
|