- 修复 `dForm/index.vue` 中的样式作用域问题 - 在 `userManage/index.vue` 中添加 `userId` 参数以获取宠物列表 - 更新 `getUrl.js` 中的线上环境 API 地址 - 在 `uni.scss` 中添加新的按钮样式 - 修改 `timelineService.vue` 中的服务显示格式 - 优化 `serviceTime.js` 中的产品名称去重逻辑 - 删除 `myOrdersManage/service` 目录下的无用 CSS 文件 - 调整 `clock/index.vue` 中的字体大小 - 在 `orderTakingManage/detail/index.vue` 中添加跳转到我的订单功能 - 修复 `list.vue` 中的伴宠师认证检查逻辑 - 删除 `orderTakingManage/detail` 目录下的无用 CSS 文件 - 重构 `authentication/serve/index.vue` 中的表单逻辑和样式master
@ -0,0 +1,393 @@ | |||
<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="baseInfo.info.userImage" mode="widthFix"></image> | |||
<!-- <image class="head" :src="form.headImage" mode="widthFix"></image> --> | |||
<text class="size-28 color-999 mt10">点击更换头像</text> | |||
</view> | |||
</button> | |||
</view> | |||
<view class="form"> | |||
<!-- @input="fetchUpdate" --> | |||
<DForm ref="baseInfoRef" :list="state.baseInfoList" v-model="baseInfo.info"></DForm> | |||
</view> | |||
</view> | |||
<view class="info"> | |||
<view class="title mt24 flex-rowl"> | |||
展示信息 | |||
<text class="size-22 color-ffb fw700">(重要)</text> | |||
</view> | |||
<view class="form"> | |||
<DForm ref="displayInfoRef" :list="state.displayInfoList" @input="fetchUpdate"> | |||
<!-- 服务记录 --> | |||
<template v-slot:jilu> | |||
<view class="flex-rowr" @click="jumpToServeRecord"> | |||
<text>{{ `${serviceCount}条` }}</text> | |||
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon> | |||
</view> | |||
</template> | |||
</DForm> | |||
</view> | |||
</view> | |||
<view class="info"> | |||
<view class="title mt24 flex-rowl"> | |||
服务资料 | |||
</view> | |||
<view class="form"> | |||
<DForm ref="serveInfoRef" :list="state.serveInfoList" @input="fetchUpdate"> | |||
<!-- 服务宠物类型 --> | |||
<template v-slot:type> | |||
<view class="flex-rowr" @click="openTypeSelectPopup"> | |||
<text>{{ typeDesc }}</text> | |||
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon> | |||
</view> | |||
</template> | |||
<!-- 增值服务 --> | |||
<template v-slot:zenz> | |||
<view class="flex-rowr" @click="openServeSelectPopup"> | |||
<text>{{ serveDesc }}</text> | |||
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon> | |||
</view> | |||
</template> | |||
</DForm> | |||
</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="form.serve" @confirm="fetchUpdate" ></popupServeSelect> | |||
<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 DForm from "@/components/dForm/index.vue" | |||
import popupTypeSelect from "./popupTypeSelect.vue"; | |||
import popupServeSelect from "./popupServeSelect.vue"; | |||
import { serviceLogList } from '@/api/serviceLog' | |||
import { | |||
binBaseInfo, | |||
} from "@/api/home.js" | |||
const store = useStore() | |||
const configList = computed(() => { | |||
return store.getters.configList | |||
}) | |||
const userInfo = computed(() => { | |||
return store.getters.userInfo | |||
}) | |||
const baseInfo = ref(JSON.parse(uni.getStorageSync("baseInfo"))) | |||
const serviceCount = ref(0) | |||
const fetchUpdate = (data) => { | |||
// todo | |||
console.log(data); | |||
} | |||
const form = reactive({ | |||
headImage: null, | |||
type: [], | |||
serve: [], | |||
}) | |||
const onChooseAvatar = (res) => { | |||
ossUpload(res.target.avatarUrl) | |||
.then(url => { | |||
form.headImage = url | |||
fetchUpdate() | |||
}) | |||
} | |||
const baseInfoRef = ref(null) | |||
const displayInfoRef = ref(null) | |||
const serveInfoRef = ref(null) | |||
const state = reactive({ | |||
baseInfoList: [{ | |||
type: "input", | |||
label: "昵称", | |||
key: "userName", | |||
placeholder: "请输入", | |||
}, | |||
{ | |||
type: "input", | |||
label: "手机号", | |||
key: "userTelephone", | |||
placeholder: "请输入", | |||
}, | |||
{ | |||
type: "select", | |||
label: "性别", | |||
key: "sex", | |||
placeholder: "请选择", | |||
options: [ | |||
{ | |||
name: "男", | |||
value : '男', | |||
}, | |||
{ | |||
name: "女", | |||
value : '男', | |||
} | |||
] | |||
} | |||
], | |||
displayInfoList: [{ | |||
type: "input", | |||
label: "个人简介", | |||
key: "jianjie", | |||
placeholder: "请输入", | |||
}, | |||
{ | |||
type: "input", | |||
label: "养宠经验", | |||
unit: "年", | |||
key: "jingyan", | |||
placeholder: "请输入", | |||
}, | |||
{ | |||
type: "custom", | |||
label: "服务记录", | |||
key: "jilu", | |||
placeholder: "请选择", | |||
options: [{ | |||
name: "男" | |||
}, | |||
{ | |||
name: "女" | |||
} | |||
] | |||
} | |||
], | |||
serveInfoList: [{ | |||
type: "custom", | |||
label: "服务宠物类型", | |||
key: "type", | |||
placeholder: "请选择", | |||
}, | |||
{ | |||
type: "input", | |||
label: "基础服务", | |||
key: "base", | |||
placeholder: "宠物喂养上门遛狗", | |||
}, | |||
{ | |||
type: "custom", | |||
label: "增值服务", | |||
key: "zenz", | |||
placeholder: "请选择", | |||
} | |||
], | |||
}) | |||
const jumpToServeRecord = () => { | |||
uni.navigateTo({ | |||
url: "/otherPages/authentication/serve/record" | |||
}) | |||
} | |||
const popupTypeSelectRef = ref() | |||
const openTypeSelectPopup = () => { | |||
popupTypeSelectRef.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 => { | |||
return petTypeOptions.value.find(item => item.id === typeId).title | |||
}) | |||
return descArr.join('、') | |||
}) | |||
const popupServeSelectRef = ref() | |||
const increaseServiceOptions = computed(() => { | |||
return store.getters.increaseServiceOptions | |||
}) | |||
const openServeSelectPopup = () => { | |||
popupServeSelectRef.value.open() | |||
} | |||
const serveDesc = computed(() => { | |||
const serveIds = form.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(baseInfo.value.userId).then(res => { | |||
baseInfo.value = res.data | |||
uni.setStorageSync(JSON.stringify(res.data)) | |||
// baseInfoRef.value.setData(res.data.info) | |||
}) | |||
} | |||
function submit(){ | |||
} | |||
onShow(() => { | |||
getCountSerivce() | |||
getBaseInfo() | |||
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; | |||
.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: auto; | |||
margin-top: 28rpx; | |||
} | |||
.btn-avatar { | |||
border: none; | |||
padding: 0; | |||
} | |||
.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 22rpx; | |||
:deep(.form-item){ | |||
padding-left: 24rpx; | |||
padding-right: 30rpx; | |||
box-sizing: border-box; | |||
} | |||
} | |||
.uni-btn-color{ | |||
border-radius: 40rpx; | |||
padding: 20rpx; | |||
margin: 40rpx; | |||
background: #FFBF60; | |||
color: #fff; | |||
text-align: center; | |||
font-size: 28rpx; | |||
} | |||
</style> |
@ -1,35 +0,0 @@ | |||
@charset "UTF-8"; | |||
.box .up-steps-custom { | |||
/* 自定义步骤条样式 */ | |||
/* 步骤条线条样式 */ | |||
/* 当前步骤前的线条为橙色 */ | |||
/* 步骤圆点样式 */ | |||
/* 未激活的步骤圆点 */ | |||
/* 步骤标题样式 */ | |||
} | |||
.box .up-steps-custom :deep(.u-steps-item__line) { | |||
background-color: #DDDDDD !important; | |||
height: 4rpx !important; | |||
} | |||
.box .up-steps-custom :deep(.u-steps-item:first-child .u-steps-item__line) { | |||
background-color: #FFA042 !important; | |||
} | |||
.box .up-steps-custom :deep(.u-steps-item__wrapper__circle) { | |||
background-color: #FFA042 !important; | |||
border-color: #FFA042 !important; | |||
width: 36rpx !important; | |||
height: 36rpx !important; | |||
} | |||
.box .up-steps-custom :deep(.u-steps-item:nth-child(2) .u-steps-item__wrapper__circle, | |||
.u-steps-item:nth-child(3) .u-steps-item__wrapper__circle) { | |||
background-color: transparent !important; | |||
border-color: #999999 !important; | |||
} | |||
.box .up-steps-custom :deep(.u-steps-item__content) { | |||
margin-top: 16rpx !important; | |||
} |
@ -1 +0,0 @@ | |||
.box .up-steps-custom :deep(.u-steps-item__line){background-color:#DDDDDD !important;height:4rpx !important}.box .up-steps-custom :deep(.u-steps-item:first-child .u-steps-item__line){background-color:#FFA042 !important}.box .up-steps-custom :deep(.u-steps-item__wrapper__circle){background-color:#FFA042 !important;border-color:#FFA042 !important;width:36rpx !important;height:36rpx !important}.box .up-steps-custom :deep(.u-steps-item:nth-child(2) .u-steps-item__wrapper__circle,.u-steps-item:nth-child(3) .u-steps-item__wrapper__circle){background-color:transparent !important;border-color:#999999 !important}.box .up-steps-custom :deep(.u-steps-item__content){margin-top:16rpx !important} |
@ -1,252 +0,0 @@ | |||
@charset "UTF-8"; | |||
.box { | |||
width: 100vw; | |||
height: 100vh; | |||
background-color: #F5F5F5; | |||
padding: 2% 3% 0 3%; | |||
} | |||
.box-size { | |||
box-sizing: border-box; | |||
} | |||
.level { | |||
display: flex; | |||
} | |||
/* 垂直、水平居中 */ | |||
.vertically_center { | |||
display: grid; | |||
place-items: center; | |||
} | |||
.top { | |||
width: 710rpx; | |||
height: 176rpx; | |||
background-color: #FFFFFF; | |||
padding: 1% 2%; | |||
font-size: 22rpx; | |||
display: grid; | |||
justify-content: space-between; | |||
} | |||
.top_left { | |||
width: 520rpx; | |||
height: auto; | |||
display: flex; | |||
justify-content: space-between; | |||
padding-top: 20rpx; | |||
} | |||
.text1 { | |||
color: #FF2A2A; | |||
font-size: 25rpx; | |||
} | |||
.top_bottom { | |||
/* background-color: aqua; */ | |||
margin-left: 10rpx; | |||
color: #999999; | |||
} | |||
.top-button { | |||
width: 132rpx; | |||
height: 54rpx; | |||
border: 1rpx solid #FFBF60; | |||
color: #FFBF60; | |||
display: grid; | |||
justify-content: center; | |||
line-height: 54rpx; | |||
position: absolute; | |||
top: 30rpx; | |||
right: 30rpx; | |||
} | |||
.information { | |||
width: 710rpx; | |||
background-color: #FFFFFF; | |||
/* background-color: pink; */ | |||
margin-top: 10rpx; | |||
padding: 10rpx 10rpx; | |||
} | |||
.time { | |||
width: 660rpx; | |||
/* background-color: gray; */ | |||
padding: 0 2%; | |||
margin-top: 50rpx; | |||
display: flex; | |||
justify-content: space-between; | |||
align-items: center; | |||
} | |||
.time .time-content { | |||
width: 500rpx; | |||
} | |||
.service { | |||
width: 710rpx; | |||
height: auto; | |||
background-color: #FFFFFF; | |||
margin-top: 2%; | |||
padding: 0 3% 3% 3%; | |||
} | |||
.horizontal_distribution { | |||
display: flex; | |||
justify-content: space-between; | |||
} | |||
.flex { | |||
display: flex; | |||
} | |||
.service_top { | |||
width: 670rpx; | |||
} | |||
.text2 { | |||
width: auto; | |||
height: 20rpx; | |||
margin-top: 45rpx; | |||
font-size: 22rpx; | |||
color: #999999; | |||
} | |||
.pet_information { | |||
width: 670rpx; | |||
height: auto; | |||
/* background-color: pink; */ | |||
padding: 5% 0 0 3%; | |||
} | |||
.pet_item { | |||
color: #999999; | |||
font-size: 28rpx; | |||
} | |||
.img image { | |||
width: 140rpx; | |||
height: 140rpx; | |||
border-radius: 100rpx; | |||
margin-right: 20rpx; | |||
} | |||
.name { | |||
margin-bottom: 15rpx; | |||
} | |||
.name image { | |||
width: 35rpx; | |||
height: 35rpx; | |||
border-radius: 35rpx; | |||
background-color: red; | |||
margin-left: 15rpx; | |||
} | |||
.name_text { | |||
color: #000 !important; | |||
font-size: 30rpx !important; | |||
} | |||
.pet- { | |||
height: 40rpx; | |||
line-height: 40rpx; | |||
color: #999999; | |||
font-size: 28rpx; | |||
margin: 20rpx 0 20rpx 0; | |||
} | |||
.pet- text { | |||
margin: 0 8rpx 0 30rpx; | |||
color: #000; | |||
} | |||
.money_total { | |||
width: 670rpx; | |||
height: 45rpx; | |||
/* background-color: pink; */ | |||
margin: 60rpx 0 20rpx 0; | |||
justify-content: space-between; | |||
font-size: 30rpx; | |||
} | |||
.money_text { | |||
color: red !important; | |||
font-size: 34rpx !important; | |||
} | |||
.other_information { | |||
width: 710rpx; | |||
height: 350rpx; | |||
background-color: #FFFFFF; | |||
/* background-color: pink; */ | |||
margin-top: 20rpx; | |||
padding: 0 1% 0 3%; | |||
} | |||
.text3 { | |||
margin: 40rpx 15rpx 0 15rpx; | |||
} | |||
.bottom { | |||
width: 100vw; | |||
height: 163rpx; | |||
background-color: #FFFFFF; | |||
margin-top: 20rpx; | |||
position: relative; | |||
} | |||
.bottom_button { | |||
width: 594rpx; | |||
height: 94rpx; | |||
background-color: #FFBF60; | |||
color: #FFFFFF; | |||
font-size: 30rpx; | |||
line-height: 94rpx; | |||
justify-content: center; | |||
position: absolute; | |||
top: 19%; | |||
left: 11%; | |||
} | |||
.success { | |||
width: 310rpx; | |||
height: 370rpx; | |||
background-color: #FFFFFF; | |||
} | |||
.pop_top { | |||
width: 310rpx; | |||
height: 100rpx; | |||
background-image: linear-gradient(to bottom, #FFBF60, #FFD494); | |||
} | |||
.code { | |||
width: 250rpx; | |||
height: 50rpx; | |||
background-color: #F3F3F3; | |||
margin: 30rpx 0 0 30rpx; | |||
} | |||
.pop_image { | |||
display: grid; | |||
place-items: center; | |||
margin-top: 20rpx; | |||
} | |||
.copy { | |||
width: 260rpx; | |||
height: 50rpx; | |||
background-color: #FFBF60; | |||
margin: 30rpx 0 0 25rpx; | |||
} | |||
.cancel { | |||
width: 40rpx; | |||
height: 40rpx; | |||
background-color: #FFFFFF; | |||
position: absolute; | |||
top: -20rpx; | |||
right: -17rpx; | |||
} |
@ -1 +0,0 @@ | |||
.box{width:100vw;height:100vh;background-color:#F5F5F5;padding:2% 3% 0 3%}.box-size{box-sizing:border-box}.level{display:flex}.vertically_center{display:grid;place-items:center}.top{width:710rpx;height:176rpx;background-color:#FFFFFF;padding:1% 2%;font-size:22rpx;display:grid;justify-content:space-between}.top_left{width:520rpx;height:auto;display:flex;justify-content:space-between;padding-top:20rpx}.text1{color:#FF2A2A;font-size:25rpx}.top_bottom{margin-left:10rpx;color:#999999}.top-button{width:132rpx;height:54rpx;border:1rpx solid #FFBF60;color:#FFBF60;display:grid;justify-content:center;line-height:54rpx;position:absolute;top:30rpx;right:30rpx}.information{width:710rpx;background-color:#FFFFFF;margin-top:10rpx;padding:10rpx 10rpx}.time{width:660rpx;padding:0 2%;margin-top:50rpx;display:flex;justify-content:space-between;align-items:center}.time .time-content{width:500rpx}.service{width:710rpx;height:auto;background-color:#FFFFFF;margin-top:2%;padding:0 3% 3% 3%}.horizontal_distribution{display:flex;justify-content:space-between}.flex{display:flex}.service_top{width:670rpx}.text2{width:auto;height:20rpx;margin-top:45rpx;font-size:22rpx;color:#999999}.pet_information{width:670rpx;height:auto;padding:5% 0 0 3%}.pet_item{color:#999999;font-size:28rpx}.img image{width:140rpx;height:140rpx;border-radius:100rpx;margin-right:20rpx}.name{margin-bottom:15rpx}.name image{width:35rpx;height:35rpx;border-radius:35rpx;background-color:red;margin-left:15rpx}.name_text{color:#000 !important;font-size:30rpx !important}.pet-{height:40rpx;line-height:40rpx;color:#999999;font-size:28rpx;margin:20rpx 0 20rpx 0}.pet- text{margin:0 8rpx 0 30rpx;color:#000}.money_total{width:670rpx;height:45rpx;margin:60rpx 0 20rpx 0;justify-content:space-between;font-size:30rpx}.money_text{color:red !important;font-size:34rpx !important}.other_information{width:710rpx;height:350rpx;background-color:#FFFFFF;margin-top:20rpx;padding:0 1% 0 3%}.text3{margin:40rpx 15rpx 0 15rpx}.bottom{width:100vw;height:163rpx;background-color:#FFFFFF;margin-top:20rpx;position:relative}.bottom_button{width:594rpx;height:94rpx;background-color:#FFBF60;color:#FFFFFF;font-size:30rpx;line-height:94rpx;justify-content:center;position:absolute;top:19%;left:11%}.success{width:310rpx;height:370rpx;background-color:#FFFFFF}.pop_top{width:310rpx;height:100rpx;background-image:linear-gradient(to bottom, #FFBF60, #FFD494)}.code{width:250rpx;height:50rpx;background-color:#F3F3F3;margin:30rpx 0 0 30rpx}.pop_image{display:grid;place-items:center;margin-top:20rpx}.copy{width:260rpx;height:50rpx;background-color:#FFBF60;margin:30rpx 0 0 25rpx}.cancel{width:40rpx;height:40rpx;background-color:#FFFFFF;position:absolute;top:-20rpx;right:-17rpx} |
@ -1,3 +1,13 @@ | |||
@import '@/uni_modules/uni-scss/variables.scss'; | |||
/* uni.scss */ | |||
@import '@/uni_modules/uview-plus/theme.scss'; | |||
@import '@/uni_modules/uview-plus/theme.scss'; | |||
.uni-btn-color{ | |||
border-radius: 40rpx; | |||
padding: 20rpx; | |||
margin: 40rpx; | |||
background: #FFBF60; | |||
color: #fff; | |||
text-align: center; | |||
font-size: 28rpx; | |||
} |