Browse Source

fix: 修复样式和功能问题,优化代码结构

- 修复 `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
前端-胡立永 3 months ago
parent
commit
cdc7f51022
16 changed files with 1204 additions and 905 deletions
  1. +1
    -1
      components/dForm/index.vue
  2. +393
    -0
      otherPages/authentication/serve/index - 副本.vue
  3. +85
    -51
      otherPages/authentication/serve/index.vue
  4. +5
    -5
      otherPages/myOrdersManage/clock/index.vue
  5. +638
    -547
      otherPages/myOrdersManage/service/detail.vue
  6. +0
    -35
      otherPages/myOrdersManage/service/steps-custom.css
  7. +0
    -1
      otherPages/myOrdersManage/service/steps-custom.min.css
  8. +0
    -252
      otherPages/orderTakingManage/detail/index.css
  9. +0
    -1
      otherPages/orderTakingManage/detail/index.min.css
  10. +35
    -2
      otherPages/orderTakingManage/detail/index.vue
  11. +1
    -1
      pages/myOrdersManage/components/timelineService.vue
  12. +26
    -3
      pages/orderTakingManage/components/list.vue
  13. +3
    -1
      pages/userManage/index.vue
  14. +11
    -1
      uni.scss
  15. +1
    -1
      utils/getUrl.js
  16. +5
    -3
      utils/serviceTime.js

+ 1
- 1
components/dForm/index.vue View File

@ -159,7 +159,7 @@
defineExpose({ setDataByKey, setData, getData, validate }) defineExpose({ setDataByKey, setData, getData, validate })
</script> </script>
<style>
<style scoped>
.form-item { .form-item {
min-height: 90rpx; min-height: 90rpx;
padding-top: 10rpx; padding-top: 10rpx;


+ 393
- 0
otherPages/authentication/serve/index - 副本.vue View File

@ -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>

+ 85
- 51
otherPages/authentication/serve/index.vue View File

@ -17,13 +17,14 @@
<view class="flex-colc"> <view class="flex-colc">
<button class="btn-avatar" :plain="true" :hairline="false" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"> <button class="btn-avatar" :plain="true" :hairline="false" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<view class="flex-colc"> <view class="flex-colc">
<image class="head" :src="form.headImage" mode="widthFix"></image>
<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> <text class="size-28 color-999 mt10">点击更换头像</text>
</view> </view>
</button> </button>
</view> </view>
<view class="form"> <view class="form">
<DForm ref="baseInfoRef" :list="state.baseInfoList" @input="fetchUpdate"></DForm>
</view> </view>
</view> </view>
@ -33,15 +34,6 @@
<text class="size-22 color-ffb fw700">(重要)</text> <text class="size-22 color-ffb fw700">(重要)</text>
</view> </view>
<view class="form"> <view class="form">
<DForm ref="displayInfoRef" :list="state.displayInfoList" @input="fetchUpdate">
<!-- 服务记录 -->
<template v-slot:jilu>
<view class="flex-rowr" @click="jumpToServeRecord">
<text>{{ `${0}` }}</text>
<up-icon name="arrow-right" color="#999999" size="32rpx"></up-icon>
</view>
</template>
</DForm>
</view> </view>
</view> </view>
@ -50,22 +42,6 @@
服务资料 服务资料
</view> </view>
<view class="form"> <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> </view>
@ -77,35 +53,38 @@
<popupServeSelect ref="popupServeSelectRef" v-model="form.serve" @confirm="fetchUpdate" ></popupServeSelect> <popupServeSelect ref="popupServeSelectRef" v-model="form.serve" @confirm="fetchUpdate" ></popupServeSelect>
<view class="uni-btn-color"
@click="submit">
保存
</view>
</view> </view>
</template> </template>
<script setup> <script setup>
import { ref, reactive, computed, onMounted } from "vue";
import { ref, reactive, computed, onMounted, nextTick } from "vue";
import { useStore } from 'vuex' import { useStore } from 'vuex'
import { onShow } from '@dcloudio/uni-app' import { onShow } from '@dcloudio/uni-app'
import { ossUpload } from '@/utils/oss-upload/oss/index.js' import { ossUpload } from '@/utils/oss-upload/oss/index.js'
import DForm from "@/components/dForm/index.vue"
import popupTypeSelect from "./popupTypeSelect.vue"; import popupTypeSelect from "./popupTypeSelect.vue";
import popupServeSelect from "./popupServeSelect.vue"; import popupServeSelect from "./popupServeSelect.vue";
import { serviceLogList } from '@/api/serviceLog'
import {
binBaseInfo,
} from "@/api/home.js"
const store = useStore() const store = useStore()
const configList = computed(() => { const configList = computed(() => {
return store.getters.configList return store.getters.configList
}) })
const fetchUpdate = (data) => {
// todo
console.log(data);
for(let key in data){
state.baseInfoList[key] = data[key]
}
console.log(state.baseInfoList);
}
const userInfo = computed(() => {
return store.getters.userInfo
})
const baseInfo = ref(JSON.parse(uni.getStorageSync("baseInfo")))
const serviceCount = ref(0)
const form = reactive({ const form = reactive({
headImage: null, headImage: null,
@ -122,21 +101,21 @@
}) })
} }
const baseInfoRef = ref()
const displayInfoRef = ref()
const serveInfoRef = ref()
const baseInfoRef = ref(null)
const displayInfoRef = ref(null)
const serveInfoRef = ref(null)
const state = reactive({ const state = reactive({
baseInfoList: [{ baseInfoList: [{
type: "input", type: "input",
label: "昵称", label: "昵称",
key: "name",
key: "userName",
placeholder: "请输入", placeholder: "请输入",
}, },
{ {
type: "input", type: "input",
label: "手机号", label: "手机号",
key: "idCard",
key: "userTelephone",
placeholder: "请输入", placeholder: "请输入",
}, },
{ {
@ -144,11 +123,14 @@
label: "性别", label: "性别",
key: "sex", key: "sex",
placeholder: "请选择", placeholder: "请选择",
options: [{
name: "男"
options: [
{
name: "男",
value : '男',
}, },
{ {
name: "女"
name: "女",
value : '男',
} }
] ]
} }
@ -246,24 +228,66 @@
return descArr.join('、') 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(() => { onShow(() => {
store.dispatch('fetchPetTypeOptions')
store.dispatch('fetchIncreaseServiceOptions')
getCountSerivce()
getBaseInfo()
store.dispatch('fetchPetTypeOptions')
store.dispatch('fetchIncreaseServiceOptions')
}) })
onMounted(()=> { onMounted(()=> {
// todo: fetch data and init data // todo: fetch data and init data
serveInfoRef.value.setDataByKey('base', configList.value.pet_basic_services.paramValueText) serveInfoRef.value.setDataByKey('base', configList.value.pet_basic_services.paramValueText)
}) })
</script> </script>
<style lang="scss" scoped> <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 { .page {
padding-top: 16rpx; padding-top: 16rpx;
padding-bottom: 150rpx;
.tip { .tip {
background-color: rgba($color: #FFBF60, $alpha: 0.16); background-color: rgba($color: #FFBF60, $alpha: 0.16);
@ -324,4 +348,14 @@
box-sizing: border-box; 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> </style>

+ 5
- 5
otherPages/myOrdersManage/clock/index.vue View File

@ -7,7 +7,7 @@
</view> </view>
<view class="mt32 ml10"> <view class="mt32 ml10">
<span :style="{fontSize:'30rpx',fontWeight:'400'}">手套照片</span> <span :style="{fontSize:'30rpx',fontWeight:'400'}">手套照片</span>
<span :style="{fontSize:'22rpx',color:'#C7C7C7'}">(至少1张)</span>
<span :style="{fontSize:'26rpx',color:'#C7C7C7'}">(至少1张)</span>
</view> </view>
<view class="level"> <view class="level">
<view class="mt20 ml10"> <view class="mt20 ml10">
@ -25,7 +25,7 @@
</view> </view>
<view class="mt32 ml10"> <view class="mt32 ml10">
<span :style="{fontSize:'30rpx',fontWeight:'400'}">鞋套照片</span> <span :style="{fontSize:'30rpx',fontWeight:'400'}">鞋套照片</span>
<span :style="{fontSize:'22rpx',color:'#C7C7C7'}">(至少1张)</span>
<span :style="{fontSize:'26rpx',color:'#C7C7C7'}">(至少1张)</span>
</view> </view>
<view class="level"> <view class="level">
<view class="mt20 ml10"> <view class="mt20 ml10">
@ -46,7 +46,7 @@
<view v-for="(pet, index) in petList" :key="index"> <view v-for="(pet, index) in petList" :key="index">
<view class="mt32 ml10"> <view class="mt32 ml10">
<span :style="{fontSize:'30rpx',fontWeight:'400'}">{{ pet.title }}照片</span> <span :style="{fontSize:'30rpx',fontWeight:'400'}">{{ pet.title }}照片</span>
<span :style="{fontSize:'22rpx',color:'#C7C7C7'}">(至少2张)</span>
<span :style="{fontSize:'26rpx',color:'#C7C7C7'}">(至少2张)</span>
</view> </view>
<view class="level"> <view class="level">
<view class="mt20 ml10 mr20"> <view class="mt20 ml10 mr20">
@ -142,7 +142,7 @@
</view> </view>
<view class="mt32 ml10"> <view class="mt32 ml10">
<span :style="{fontSize:'30rpx',fontWeight:'400'}">遛狗</span> <span :style="{fontSize:'30rpx',fontWeight:'400'}">遛狗</span>
<span :style="{fontSize:'22rpx',color:'#C7C7C7'}">(2-3)</span>
<span :style="{fontSize:'26rpx',color:'#C7C7C7'}">(2-3)</span>
</view> </view>
<view class="level"> <view class="level">
<view class="mt20 ml10 mr20"> <view class="mt20 ml10 mr20">
@ -157,7 +157,7 @@
</view> </view>
<view class="mt32 ml10"> <view class="mt32 ml10">
<span :style="{fontSize:'30rpx',fontWeight:'400'}">陪玩</span> <span :style="{fontSize:'30rpx',fontWeight:'400'}">陪玩</span>
<span :style="{fontSize:'22rpx',color:'#C7C7C7'}">(2-3)</span>
<span :style="{fontSize:'26rpx',color:'#C7C7C7'}">(2-3)</span>
</view> </view>
<view class="level"> <view class="level">
<view class="mt20 ml10 mr20"> <view class="mt20 ml10 mr20">


+ 638
- 547
otherPages/myOrdersManage/service/detail.vue
File diff suppressed because it is too large
View File


+ 0
- 35
otherPages/myOrdersManage/service/steps-custom.css View File

@ -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;
}

+ 0
- 1
otherPages/myOrdersManage/service/steps-custom.min.css View File

@ -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}

+ 0
- 252
otherPages/orderTakingManage/detail/index.css View File

@ -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;
}

+ 0
- 1
otherPages/orderTakingManage/detail/index.min.css View File

@ -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}

+ 35
- 2
otherPages/orderTakingManage/detail/index.vue View File

@ -215,7 +215,7 @@
</view> </view>
<view class="handbook"> <view class="handbook">
接单即接受 接单即接受
<text class="text">伴宠师手册</text>
<text class="text" @click="configPopupRef.open('pet_platform_introduction')">伴宠师手册</text>
</view> </view>
<up-button @click="conform" color="#FFBF60" text="确定" shape="circle"></up-button> <up-button @click="conform" color="#FFBF60" text="确定" shape="circle"></up-button>
</view> </view>
@ -239,9 +239,13 @@
<up-input placeholder="" border="none" v-model="value" disabled <up-input placeholder="" border="none" v-model="value" disabled
:customStyle="{height:'60rpx','text-indent': '20rem', 'background-color': '#F3F3F3', position : 'relative','z-index' : '999' }"></up-input> :customStyle="{height:'60rpx','text-indent': '20rem', 'background-color': '#F3F3F3', position : 'relative','z-index' : '999' }"></up-input>
</view> </view>
<up-button @click="noneOrder" color="#FFBF60" text="复制订单编号" shape="circle"></up-button>
<view class="button-group">
<up-button @click="noneOrder" color="#FFBF60" text="复制订单编号" shape="circle"></up-button>
<up-button @click="toMyOrder" color="#FFBF60" text="到我的订单查看" shape="circle" style="margin-top: 20rpx;"></up-button>
</view>
</view> </view>
</up-popup> </up-popup>
<configPopup ref="configPopupRef" />
</template> </template>
<script setup> <script setup>
@ -267,6 +271,8 @@
} from "vuex" } from "vuex"
import dayjs from "dayjs"; import dayjs from "dayjs";
import configPopup from '@/components/configPopup.vue'
const configPopupRef = ref(null)
onLoad((options) => { onLoad((options) => {
orderId.value = options.id || null; orderId.value = options.id || null;
@ -431,6 +437,27 @@
url: `/otherPages/orderTakingManage/pet/detail?id=${id}` url: `/otherPages/orderTakingManage/pet/detail?id=${id}`
}) })
} }
//
const noneOrder = () => {
uni.setClipboardData({
data: orderDetail.value.order.orderSn,
success: function() {
uni.showToast({
title: '复制成功',
icon: 'none'
});
}
});
}
//
const toMyOrder = () => {
orderSuccessClose();
uni.navigateTo({
url: '/pages/myOrdersManage/list/index'
});
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@ -532,6 +559,12 @@
margin-bottom: 40rpx; margin-bottom: 40rpx;
} }
.button-group {
display: flex;
flex-direction: column;
gap: 20rpx;
}
.btn-confirmed { .btn-confirmed {
background: #CCCCCC !important; /* 灰色背景 */ background: #CCCCCC !important; /* 灰色背景 */
} }

+ 1
- 1
pages/myOrdersManage/components/timelineService.vue View File

@ -76,7 +76,7 @@
</text> </text>
</view> </view>
<view class="pet-description"> <view class="pet-description">
{{ pet.breed }}{{ pet.bodyType }} | {{ pet.services.join('') }}
{{ pet.breed }}{{ pet.bodyType }} | {{ pet.services.join('+') }}
</view> </view>
</view> </view>
</view> </view>


+ 26
- 3
pages/orderTakingManage/components/list.vue View File

@ -15,7 +15,7 @@
<up-image style="flex-shrink:0" class="mr20" width="70px" height="70px" :src="pet.photo" <up-image style="flex-shrink:0" class="mr20" width="70px" height="70px" :src="pet.photo"
shape="circle"></up-image> shape="circle"></up-image>
<view> <view>
<view class="font28 col3">服务天数: {{ pet.orderServiceText.length }} I {{ pet.orderServiceText.join('') }}</view>
<view class="font28 col3">服务天数: {{ pet.orderServiceText.length }} I {{ pet.orderServiceText.join('+') }}</view>
<!-- <view class="font28 col3">服务天数: {{ item.h5OrderVO.orderServiceList.length }} I <!-- <view class="font28 col3">服务天数: {{ item.h5OrderVO.orderServiceList.length }} I
<text v-for="itemService in item.h5OrderVO.orderServiceList" :key="itemService.id"> <text v-for="itemService in item.h5OrderVO.orderServiceList" :key="itemService.id">
@ -25,7 +25,7 @@
</view> --> </view> -->
<!-- <view style="margin: 18rpx 0">期望上门时间{{itemService.expectServiceTime}}</view> --> <!-- <view style="margin: 18rpx 0">期望上门时间{{itemService.expectServiceTime}}</view> -->
<view class="" style="margin-top: 10rpx;">{{ pet.breed }}({{ pet.bodyType }}) | {{ pet.productNameText.join('') }}
<view class="" style="margin-top: 10rpx;">{{ pet.breed }}({{ pet.bodyType }}) | {{ pet.productNameText.join('+') }}
<!-- <text v-for="itemPet in item.h5OrderVO.orderItemList" :key="itemPet.id"> <!-- <text v-for="itemPet in item.h5OrderVO.orderItemList" :key="itemPet.id">
{{ itemPet.productName }} {{ itemPet.productName }}
@ -130,7 +130,8 @@ const emits = defineEmits(['update']);
// //
const toOrderDetail = (id) => { const toOrderDetail = (id) => {
console.log(userInfo.userBcs);
if(checkUserBcs()) return
uni.navigateTo({ uni.navigateTo({
url: `/otherPages/orderTakingManage/detail/index?id=${id}` url: `/otherPages/orderTakingManage/detail/index?id=${id}`
}); });
@ -144,7 +145,29 @@ const cancel = () => {
} }
function checkUserBcs(){
const { userBcs, userBcsRole } = userInfo.value
if(userBcs == 0){
uni.showModal({
title: '完成伴宠师认证认证后在进行操作!',
content: '当前无法操作,如果您已经提交伴宠师认证,请耐心等待',
confirmText: '去查看',
success(res) {
if(res.confirm){
uni.navigateTo({
url: "/otherPages/authentication/list/index"
})
}
}
})
return true
}
return false
}
const unableToAcceptOrder = (currentId) => { const unableToAcceptOrder = (currentId) => {
if(checkUserBcs()) return
modal.value.open(); modal.value.open();
id.value = currentId; id.value = currentId;
} }


+ 3
- 1
pages/userManage/index.vue View File

@ -294,7 +294,9 @@
}; };
const getPet = async () => { const getPet = async () => {
let response = await getpetList();
let response = await getpetList({
userId: userInfo.value.userId
});
petList.value = response?.data || []; petList.value = response?.data || [];
} }


+ 11
- 1
uni.scss View File

@ -1,3 +1,13 @@
@import '@/uni_modules/uni-scss/variables.scss'; @import '@/uni_modules/uni-scss/variables.scss';
/* uni.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;
}

+ 1
- 1
utils/getUrl.js View File

@ -6,7 +6,7 @@ const api = {
develop:"http://h5.xzaiyp.top", develop:"http://h5.xzaiyp.top",
// develop: "http://youyi-test.natapp1.cc/prod-api", // 开发 // develop: "http://youyi-test.natapp1.cc/prod-api", // 开发
trial: "http://h5.xzaiyp.top", //测试 trial: "http://h5.xzaiyp.top", //测试
release: "http://h5.xzaiyp.top", // 线上
release: "https://api.catmdogd.com/prod-api",
} }
const currentUrl = api[current]; const currentUrl = api[current];


+ 5
- 3
utils/serviceTime.js View File

@ -31,10 +31,12 @@ export function getOrderServiceText(petId, orderServiceList) {
export function getProductNameText(petId, productList, orderServiceList) { export function getProductNameText(petId, productList, orderServiceList) {
let orderService = orderServiceList.filter(service => service.petId == petId) let orderService = orderServiceList.filter(service => service.petId == petId)
return productList
let list = (productList
.filter(product => orderService.filter(service => service.id == product.orderServiceId).length > 0) .filter(product => orderService.filter(service => service.id == product.orderServiceId).length > 0)
.map(product => product.productName)
.map(product => product.productName))
return [...new Set(list)]
} }
export default { export default {


Loading…
Cancel
Save