501 lines
14 KiB
Vue
501 lines
14 KiB
Vue
<template>
|
|
<view>
|
|
<view class="bg">
|
|
<view>
|
|
<swiper style="height: 662upx;" autoplay="1500" :indicator-dots="false" :circular='true'
|
|
indicator-active-color="#ffffff" indicator-color="#cccccc">
|
|
<swiper-item v-for="(item,index) in order.lifePhoto" :key='index'
|
|
style="height: 662upx;" @click="saveImgs(order.lifePhoto,index)">
|
|
<image class="swiper-image" :src="item" style="width: 100%;height: 662upx;">
|
|
</image>
|
|
</swiper-item>
|
|
</swiper>
|
|
</view>
|
|
<!-- <view class="wrap">
|
|
<u-swiper :list="order.lifePhoto" height="500" border-radius="30"></u-swiper>
|
|
</view> -->
|
|
<view class="flex align-center padding-tb-sm padding-lr justify-around" style="background: #f7fdfb;border-radius: 16rpx;">
|
|
<!-- <view class="rir">
|
|
<image
|
|
src="https://admin.sjajk.com/file/uploadPath/2023/01/18/ddb89075e091f26aa0c84bede245fd6d.png"
|
|
style="width: 87rpx;height:29rpx;"></image>
|
|
</view> -->
|
|
<view class="flex align-center" style="margin-right: 30upx;">
|
|
<image src="../../static/images/index/renzheng03.png" style="width: 30rpx;height: 32rpx;"></image>
|
|
<text class="margin-left-xs" style="color: #75a794;">实名认证</text>
|
|
</view>
|
|
<view class="flex align-center" style="margin-right: 30upx;">
|
|
<image src="../../static/images/index/renzheng01.png" style="width:25upx;height: 30upx;"></image>
|
|
<text class="margin-left-xs" style="color: #75a794;">资质认证</text>
|
|
</view>
|
|
<view class="flex align-center">
|
|
<image src="../../static/images/index/renzheng02.png" style="width: 32rpx;height: 30rpx;"></image>
|
|
<text class="margin-left-xs" style="color: #75a794;">平台担保</text>
|
|
</view>
|
|
</view>
|
|
<view class="margin-lr margin-tb-sm padding-bottom">
|
|
<view class="flex align-center justify-between" style="padding: 14rpx 0;">
|
|
<view class="text-bold" style="font-size: 36rpx;">
|
|
{{order.artificerName}}
|
|
</view>
|
|
<view class="" v-if="myId != order.userId">
|
|
<view class="text-center" @click="follow">
|
|
<image src="../../static/images/aixin.png" style="width: 28rpx;height: 28rpx;position: relative;top: 4upx;" v-if="!isFollow"></image>
|
|
<image src="../../static/images/index/shoucang.png" style="width: 28rpx;height: 28rpx;position: relative;top: 4upx;" v-else></image>
|
|
<text style="color: #999999;margin-left: 10upx;" v-if="!isFollow">收藏</text>
|
|
<text style="margin-left: 10upx;color: #096f4b;" v-else>已收藏</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="padding-bottom flex justify-between">
|
|
<view class="margin-right-xs text-sm"
|
|
style="color: #fff4a9;background-color: #333;border-radius: 6rpx;padding: 4rpx 10rpx;">
|
|
健康理疗师
|
|
</view>
|
|
</view>
|
|
<view class="padding-bottom flex justify-between">
|
|
<view class="flex align-center">
|
|
<view v-if="order.ordersScore" class="margin-right-sm flex align-center" style="color: #999999;">
|
|
<image src="../../static/images/index/start.png" style="width: 24upx;height: 22upx;">
|
|
</image>
|
|
<text class="margin-left-xs" style="color: #fe831e;">{{order.ordersScore}}.0</text>
|
|
<text class="" style="margin-left: 20rpx;font-size: 20rpx;"> | </text>
|
|
<text style="color: #999999;margin-left: 20rpx;font-size: 24rpx;"> 已服务{{order.ordersCount}}单</text>
|
|
<text class="" style="margin: 0 20rpx;font-size: 20rpx;"> | </text>
|
|
<view class="flex align-center">
|
|
<image src="../../static/images/index/place.png" style="width: 24rpx;height: 23rpx;"></image>
|
|
<view style="color: #999999;margin-left: 5rpx;font-size: 24rpx">距离:{{order.distance}}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
</view>
|
|
</view>
|
|
<view class="bg padding-lr padding-tb-sm margin-bottom-sm">
|
|
<view class=" text-bold padding-bottom" style="font-size: 30rpx;">
|
|
自我介绍
|
|
</view>
|
|
<view class="" style="width: 118rpx;height: 16rpx;background-color: #096f4b;opacity: 0.2;margin-top: -46rpx;"></view>
|
|
<view class="margin-top" style="color: #666666;font-size: 28rpx;margin-top: 30rpx;">
|
|
{{order.content}}
|
|
</view>
|
|
</view>
|
|
<view class="" style="padding: 0 0 90px 0;background-color: #ffffff;">
|
|
<u-tabs :list="tabs" :is-scroll="true" :current="tabIndex" @change="tabChange" active-color="#096f4b"
|
|
gutter="60">
|
|
</u-tabs>
|
|
<view style="border: 1rpx solid #f7f7f7;position: relative;top: -8upx;"></view>
|
|
<view v-if="fwIndex == 0&&XCXIsSelect !='否'" class="tab ">
|
|
<view class="flex padding-tb padding-lr justify-between" v-for="(item,index) in artificerlist" :key="index" @click="goNav(item.massageTypeId)">
|
|
<image :src="item.massageImg" style="width: 170upx;height: 170upx;border-radius:10rpx"></image>
|
|
<view class="margin-left-sm" style="flex: 170upx 1;">
|
|
<view class="text-bold text-lg">{{item.title}}</view>
|
|
<view class="flex align-center justify-between text-df margin-tb-sm" style="color: #999999;">
|
|
<view style="font-size: 26rpx;">时长:{{item.duration}}分钟</view>
|
|
<view style="font-size: 26rpx;">已售{{item.sales}}</view>
|
|
</view>
|
|
<view class="flex align-center justify-between">
|
|
<view class="text-green text-df" style="color: #FF1200;">
|
|
¥<text class="text-green text-xl text-bold"
|
|
style="color: #FF1200;">{{item.price}}</text>
|
|
<text v-if="hyCheck != '否'">/</text><text v-if="hyCheck != '否'"
|
|
class="text-sm">会员价:¥{{item.memberPrice}}</text>
|
|
</view>
|
|
<view class="btn" style="background: linear-gradient(to right, #223845, #00a85b)">下单</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class=" padding u-skeleton-fillet" v-if="fwIndex == 1">
|
|
<view v-if="commentList.length<=0" class="margin-top-sm"> 暂无评价</view>
|
|
<view class="margin-bottom-sm padding-tb-sm" style="border-bottom: 1upx solid #f0f0f0;"
|
|
v-for="(item, index) in commentList" :key='index' v-else>
|
|
<view class="flex align-center">
|
|
<u-avatar src="/static/logo.png" size="48"></u-avatar>
|
|
<view class="flex margin-left-sm" style="line-height: 46upx;">匿名</view>
|
|
<view class="flex" style="margin-left: 20rpx;">
|
|
<u-icon v-for="ite in item.score" :key='ite' color="#FFAA01" name="star-fill"></u-icon>
|
|
</view>
|
|
</view>
|
|
<view class="margin-top-sm" style="margin-top: 30rpx;margin-bottom: 10rpx;font-size: 26rpx;">{{item.content}}</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view v-if="fwIndex == 2">
|
|
<view class="flex justify-around flex-wrap" style="width: 100%;">
|
|
<view class="flex flex-wrap" style="width: 100%;">
|
|
<view style="width: 220rpx;height: 160rpx;margin-right: 10rpx;margin-top: 10rpx;"
|
|
v-for="(item,index) in order.certificate" :key="index">
|
|
<image :src="item" mode="aspectFit" style="width: 100%;height: 100%;"
|
|
@click="saveImg(order.certificate,index)">
|
|
</image>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
|
|
<!-- <view class="margin-top-sm bg radius u-skeleton-fillet" style="margin-bottom: 130rpx;">
|
|
<view class="text-center padding text-bold" style="font-size: 35rpx;letter-spacing: 3rpx;">服务详情</view>
|
|
<view v-for="(item,index) in order.lifePhoto" :key="index" style="width: 100%;"
|
|
@click="saveImg(order.lifePhoto,index)">
|
|
<image :src="item" style="width: 750upx;height: 963upx;" mode="widthFix"></image>
|
|
</view>
|
|
</view> -->
|
|
|
|
|
|
|
|
|
|
|
|
<!-- <u-picker v-model="show" mode="time" :params="params" @confirm="statusChange"></u-picker> -->
|
|
<u-skeleton :loading="loading" :animation="true" bgColor="#FFF"></u-skeleton>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
tripWay: 1,
|
|
game: [],
|
|
loading: true, // 是否显示骨架屏组件
|
|
customStyle: {
|
|
width: '400upx',
|
|
color: '#FFFFFF',
|
|
background: "#005DFF",
|
|
border: 0
|
|
},
|
|
artificerId: '',
|
|
orderDet: {},
|
|
page: 1,
|
|
limit: 10,
|
|
order: {},
|
|
commentList: [],
|
|
isFollow: false,
|
|
myId: '',
|
|
isVip: false,
|
|
AUDIO: uni.createInnerAudioContext(),
|
|
isPlay: false,
|
|
show: false,
|
|
params: {
|
|
year: false,
|
|
month: true,
|
|
day: true,
|
|
hour: true,
|
|
minute: true,
|
|
second: true,
|
|
timestamp: true
|
|
},
|
|
startTime: '',
|
|
mobile: '',
|
|
name: '',
|
|
cityaddress: '',
|
|
detailaddress: '',
|
|
latitude: '',
|
|
longitude: '',
|
|
province: '',
|
|
city: '',
|
|
district: '',
|
|
age: '',
|
|
tabs: [{
|
|
name: '项目',
|
|
status: 0
|
|
}, {
|
|
name: '评价',
|
|
status: 1
|
|
}, {
|
|
name: '资质证书',
|
|
status: 2
|
|
}],
|
|
tabIndex: 0, // tab下标
|
|
fwIndex: 0,
|
|
artificerlist: [],
|
|
|
|
latitude: '',
|
|
longitude: '',
|
|
imgArr: [],
|
|
status: "",
|
|
XCXIsSelect: '否',
|
|
hyCheck: '否',
|
|
imageHeight:'358'
|
|
}
|
|
},
|
|
onLoad(option) {
|
|
this.hyCheck = this.$queue.getData('hyCheck');
|
|
uni.showLoading({
|
|
title: '加载中...',
|
|
|
|
});
|
|
this.XCXIsSelect = this.$queue.getData("XCXIsSelect");
|
|
this.artificerId = option.artificerId
|
|
this.myId = uni.getStorageSync('userId')
|
|
this.isVip = uni.getStorageSync('isVIP')
|
|
this.latitude = uni.getStorageSync('latitude')
|
|
this.longitude = uni.getStorageSync('longitude')
|
|
this.getDet()
|
|
this.getordertherapist()
|
|
this.getOrderComment()
|
|
},
|
|
onShow() {
|
|
this.imageHeight = this.$queue.getData('imageHeight');
|
|
},
|
|
onReady() {
|
|
this.AUDIO.onEnded(function(res) {
|
|
this.isPlay = false;
|
|
});
|
|
},
|
|
methods: {
|
|
// 切换菜单
|
|
tabChange(index) {
|
|
this.tabIndex = index
|
|
this.fwIndex = index
|
|
},
|
|
//换算年龄
|
|
getAge(e) {
|
|
console.log('出生日期:' + e)
|
|
this.birthDate = e
|
|
//创建系统日期
|
|
var today = new Date();
|
|
//把出生日期转换成日期
|
|
this.birthDate = new Date(this.birthDate);
|
|
//分别获取到年份后相减
|
|
this.age = today.getFullYear() - this.birthDate.getFullYear();
|
|
// console.log(this.age+'当前年龄')
|
|
},
|
|
// 详情
|
|
getDet() {
|
|
// uni.showLoading({
|
|
// title: '加载中...',
|
|
// icon: 'none'
|
|
// });
|
|
this.$Request.get("/app/artificer/selectArtificerById", {
|
|
artificerId: this.artificerId,
|
|
latitude: this.latitude,
|
|
longitude: this.longitude,
|
|
userId: this.myId
|
|
}).then(res => {
|
|
uni.hideLoading();
|
|
this.loading = false;
|
|
if (res.code == 0) {
|
|
this.order = res.data
|
|
this.status = res.data.status
|
|
this.tripWay = res.data.tripWay
|
|
if (this.order.lifePhoto) {
|
|
this.order.lifePhoto = this.order.lifePhoto.split(',')
|
|
}
|
|
this.order.certificate = this.order.certificate.split(',')
|
|
if (this.order.distance > 1000) {
|
|
this.order.distance = (this.order.distance / 1000).toFixed(1) + 'km'
|
|
} else {
|
|
this.order.distance = (this.order.distance).toFixed(1) + 'm'
|
|
}
|
|
|
|
if (res.data.collectCount == 1) {
|
|
this.isFollow = true
|
|
} else {
|
|
this.isFollow = false
|
|
}
|
|
} else {
|
|
this.loading = false;
|
|
uni.hideLoading();
|
|
}
|
|
uni.hideLoading();
|
|
|
|
});
|
|
|
|
},
|
|
//服务理疗师
|
|
getordertherapist() {
|
|
this.$Request.get("/app/artificer/selectArtificerMassageList", {
|
|
artificerId: this.artificerId
|
|
}).then(res => {
|
|
if (res.code == 0) {
|
|
this.artificerlist = res.data
|
|
// this.commentList = [...this.commentList, ...res.data.list]
|
|
}
|
|
});
|
|
},
|
|
// 评价
|
|
getOrderComment() {
|
|
this.$Request.get("/app/takingComment/selectOrderTakingComment", {
|
|
artificerId: this.artificerId,
|
|
page: this.page,
|
|
limit: this.limit
|
|
}).then(res => {
|
|
if (res.code == 0) {
|
|
this.commentList = [...this.commentList, ...res.data.list]
|
|
}
|
|
});
|
|
},
|
|
|
|
playVoice() {
|
|
console.log(this.isPlay)
|
|
this.AUDIO.src = this.order.voiceIntroduce;
|
|
if (this.isPlay) {
|
|
this.AUDIO.stop();
|
|
} else {
|
|
this.AUDIO.play();
|
|
}
|
|
this.isPlay = !this.isPlay;
|
|
},
|
|
goNav(massageTypeId) {
|
|
if (this.status == 2) {
|
|
uni.showToast({
|
|
title: '理疗师已下线',
|
|
icon: 'none'
|
|
})
|
|
} else {
|
|
uni.navigateTo({
|
|
url: "/pages/index/order/orderDet?massageTypeId=" + massageTypeId + '&artificerId=' + this
|
|
.artificerId + '&tripWay=' + this.tripWay
|
|
})
|
|
}
|
|
|
|
},
|
|
goMsg() {
|
|
let data = {
|
|
userId: this.myId,
|
|
focusedUserId: this.order.userId
|
|
}
|
|
this.$Request.postJson('/app/chat/insertChatConversation ', data).then(res => {
|
|
if (res.code == 0) {
|
|
let id = this.order.userId == res.data.userId ? res.data.focusedUserId : this.order.userId
|
|
uni.navigateTo({
|
|
url: '/pages/msg/im?chatConversationId=' + res.data.chatConversationId +
|
|
'&byUserId=' + id
|
|
})
|
|
}
|
|
})
|
|
},
|
|
// 收藏
|
|
follow() {
|
|
let oldIsFollow = this.isFollow;
|
|
let that = this
|
|
let data = {
|
|
artificerId: that.artificerId,
|
|
userId: that.myId,
|
|
classify: '1'
|
|
}
|
|
that.$Request.postJson("/app/artificer/insertCollect", data).then(res => {
|
|
if (res.code == 0) {
|
|
if (oldIsFollow) {
|
|
uni.showToast({
|
|
title: '取消成功',
|
|
icon: 'none'
|
|
})
|
|
} else {
|
|
uni.showToast({
|
|
title: '收藏成功',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
|
|
} else {
|
|
uni.showToast({
|
|
title: res.msg,
|
|
icon: 'none'
|
|
})
|
|
}
|
|
setTimeout(function() {
|
|
that.getDet()
|
|
}, 500)
|
|
});
|
|
},
|
|
saveImg(imgs, index) {
|
|
// console.log(imgs)
|
|
let that = this;
|
|
let imgArr = imgs
|
|
// imgArr.push(imgs);
|
|
// //预览图片
|
|
uni.previewImage({
|
|
urls: imgArr,
|
|
current: imgArr[index]
|
|
});
|
|
},
|
|
saveImgs(imgs, index) {
|
|
console.log(imgs, index)
|
|
// let that = this
|
|
let imgArr = imgs
|
|
// this.imgArr.push(imgs);
|
|
// console.log(this.imgArr)
|
|
// //预览图片
|
|
uni.previewImage({
|
|
urls: imgArr,
|
|
current: imgArr[index]
|
|
});
|
|
},
|
|
}
|
|
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
page {
|
|
background-color: #F7F7F7;
|
|
}
|
|
|
|
.bgs {
|
|
background-color: #FFFFFF;
|
|
}
|
|
|
|
.bg {
|
|
background-color: #FFFFFF;
|
|
}
|
|
|
|
.swiper-image {
|
|
width: 100%;
|
|
}
|
|
|
|
.wrap {
|
|
padding: 20upx 23upx;
|
|
}
|
|
|
|
.line_s {
|
|
display: inline-flex;
|
|
width: 14rpx;
|
|
height: 14rpx;
|
|
background: #1AD566;
|
|
border-radius: 50%;
|
|
margin-right: 10rpx;
|
|
}
|
|
|
|
.line_x {
|
|
display: inline-flex;
|
|
width: 14rpx;
|
|
height: 14rpx;
|
|
background: #000000;
|
|
border-radius: 50%;
|
|
margin-right: 10rpx;
|
|
}
|
|
|
|
.tab>view {
|
|
border-bottom: 2upx solid #F5F5F2;
|
|
}
|
|
|
|
.tab>view:last-of-type {
|
|
border: none;
|
|
}
|
|
|
|
.rir {
|
|
font-size: 30upx;
|
|
font-family: DFZongYi-Bd-80-Win-GB;
|
|
font-weight: 800;
|
|
color: #30B47A;
|
|
margin-right: 30rpx;
|
|
}
|
|
|
|
.btn {
|
|
width: 129rpx;
|
|
height: 52rpx;
|
|
background: #096f4b;
|
|
border-radius: 26rpx;
|
|
color: #FFFFFF;
|
|
text-align: center;
|
|
line-height: 54rpx;
|
|
}
|
|
.swiper {
|
|
height: 662rpx;
|
|
}
|
|
</style> |