| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 | <template>	<view>		<view class="bg">			<view>				<swiper :style="{height: imageHeight + 'upx'}" 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: imageHeight + 'upx'}" @click="saveImgs(order.lifePhoto,index)">						<image class="swiper-image" mode="aspectFill" :src="item" :style="{height: imageHeight + 'upx'}">						</image>					</swiper-item>				</swiper>			</view>			<!-- <view class="wrap">				<u-swiper :list="order.lifePhoto" height="500" border-radius="30"></u-swiper>			</view> -->			<view class="info-box" >				<view v-if="isFollow" class="like-box" @click="follow">					<image class="icon" src="../../static/images/index/like.png" mode=""></image>					<view class="label">						已收藏					</view>				</view>				<view v-else class="like-box unlike-box"  @click="follow">					<image class="icon" src="../../static/images/index/unlike.png" mode=""></image>					<view class="label">						点击收藏					</view>				</view>				<view class="flex padding-tb-sm align-center">					<view class="margin-right-xs text-bold" style="letter-spacing: 3rpx; font-size: 35rpx;">						{{order.artificerName}}					</view>					<view class=" margin-right-xs text-26"						style="color: #FF6E98;background: #FFECF2;border-radius:15rpx;border-radius: 32rpx;width: 152rpx;height: 48rpx;text-align: center;line-height: 48rpx;">						健康理疗师					</view>				</view>				<view class="padding-bottom-sm flex justify-between">					<view class="flex align-center">						<view v-if="order.ordersScore" class="margin-right-sm">							<!-- <image src="../../static/images/start.png" style="width: 24upx;height: 22upx;">							</image>							<text class="margin-left-xs">{{order.ordersScore}}</text> -->							<text style="color: #FCAD3D;">{{order.ordersScore}}</text>								<u-rate activeColor="#FCAD3D" size="20rpx" :count="5" v-model="order.ordersScore"></u-rate>						</view>						<view class="flex align-center" style="color: #AAA;">已服务: <view style="color: #FF6E98;">{{order.ordersCount}}单</view> </view>					</view>									</view>				<view class="flex align-center padding-bottom">					<image src="../../static/images/address.png" style="width: 40rpx;height: 40rpx;"></image>					<view style="color: #222222;margin-left: 5rpx;">距离:{{order.distance}}</view>				</view>								<view class="padding-bottom" style="color: #AAAAAA;font-size: 22rpx;">					{{order.content}}				</view>				<!-- <view class="padding-bottom flex justify-between">					<view class=" margin-right-xs text-26"						style="color: #2FB57A;background-color: #EDFAF7;border: 1rpx solid #05C25C;border-radius:15rpx;padding: 10rpx;">						健康理疗师					</view>				</view> -->				<view class="flex align-center padding-tb-sm padding-lr"					style="background: #EDFAF7;border-radius: 24rpx;">					<view class="rir">						<!-- 安心购 -->						<image							src="/static/image/text_axg.png"							style="width: 87rpx;height:29rpx;"></image>					</view>					<view class="flex align-center" style="margin-right: 30upx;">						<image src="../../static/images/index/renz1.png" style="width: 32upx;height: 28upx;"></image>						<text class="margin-left-xs">实名认证</text>					</view>					<view class="flex align-center" style="margin-right: 30upx;">						<image src="../../static/images/index/renz2.png" style="width:28upx;height: 33upx;"></image>						<text class="margin-left-xs">资质认证</text>					</view>					<view class="flex align-center">						<image src="../../static/images/index/renz3.png" style="width: 28upx;height: 32upx;"></image>						<text class="margin-left-xs">平台担保</text>					</view>				</view>			</view>		</view>		<!-- <view class="bg padding-lr padding-tb-sm margin-bottom-sm" style="margin-top: 20rpx;">			<view class="text-bold" style="font-size: 35rpx;letter-spacing: 3rpx;">自我介绍</view>			<view class="margin-top" style="color: #666666;font-size: 28rpx;">				{{order.content}}			</view>		</view> -->		<view class="padding bg" style="padding-bottom: 90px;">			<u-tabs :list="tabs" :current="tabIndex" @change="tabChange" activeColor="#FF6E98" gutter="60">			</u-tabs>			<view style="border: 2upx solid #F5F5F2;position: relative;top: -8upx;"></view>			<view v-if="fwIndex == 0&&XCXIsSelect !='否'" class="tab ">				<view class="flex padding-tb" v-for="(item,index) in artificerlist" :key="index"					@click="goNav(item.massageTypeId)">					<image :src="item.massageImg" style="width: 210upx;height: 170upx;border-radius:10rpx"></image>					<view class="margin-left-sm" style="width: 66%;">						<view class="flex align-center justify-between" >							<view class="text-bold text-lg">{{item.title}}</view>							<view style="color: #AAA;">已售{{item.sales}}</view>						</view>						<view class=" text-df margin-tb-sm" style="color: #AAA;">							<view>时长:{{item.duration}}分钟</view>						</view>						<view class="flex align-center justify-between">							<view class="text-green text-df" style="color: #FF6E98;">								¥<text class="text-green text-xl text-bold"									style="color: #FF6E98;">{{item.price}}</text>								<text v-if="hyCheck != '否'">/</text><text v-if="hyCheck != '否'"									class="text-sm">会员价:¥{{item.memberPrice}}</text>							</view>							<view class="btn">								<image style="position: absolute;width: 39rpx;height: 39rpx;top: -4rpx;right: -8rpx;" src="../../static/image/btn-icon.png" mode=""></image>								下单</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 justify-between">						<u-avatar src="/static/logo.png" size="48"></u-avatar>						<view class="flex-sub margin-left-sm" style="line-height: 46upx;">匿名</view>						<view class="flex">							<u-icon v-for="ite in item.score" :key='ite' color="#FFAA01" name="star-fill"></u-icon>						</view>					</view>					<view class="margin-top-sm text-lg">{{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> -->		<!-- <view class="u-skeleton-fillet text-lg cu-bar foot bg padding-lr" v-if="myId != order.userId">			<view class="text-center"				style="width: 665upx;line-height: 78upx;background: #2FB57A;border-radius:39upx;margin: 0 auto;"				@click="follow">				<image src="../../static/images/index/shoucang.png"					style="width: 30upx;height: 28upx;position: relative;top: 4upx;"></image>				<text style="color: #FFFFFF;margin-left: 10upx;" v-if="!isFollow">收藏</text>				<text style="color: #FFFFFF;margin-left: 10upx;" v-else>已收藏</text>			</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: '750'			}		},		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,					status: 0,				}).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 lang="scss">	page {		background-color: #F7F7F7;	}	.bgs {		background-color: #FFFFFF;	}	.bg {		background-color: #FFFFFF;	}	.swiper-image {		width: 100%;		border-radius: 24upx;	}		.info-box{		position: relative;		z-index: 9;		border-radius: 32rpx 32rpx 0rpx 0rpx;		margin-top: -120rpx;		background: #fff;		padding: 0 32rpx 28rpx;		position: relative;		margin-bottom: 20rpx;		.like-box{			position: absolute;			top: 28rpx;			right: 32rpx;			width: 120rpx;			height: 80rpx;			background: linear-gradient( 90deg, #FFFFFF 0%, #FFD1DF 100%);			border-radius: 32rpx 32rpx 32rpx 32rpx;			border: 1rpx solid #FF6E98;			display: flex;			flex-direction: column;			align-items: center;			justify-content: center;			.icon{				width: 30rpx;				height: 30rpx;			}			.label{					color: #FF6E98;					font-size: 22rpx;			}		}		.like-box.unlike-box {			background: linear-gradient( 90deg, #FFFFFF 0%, #CCCCCC 100%);			border-radius: 32rpx 32rpx 32rpx 32rpx;			border: 1rpx solid #AAAAAA;			.label{					color: #AAAAAA;					font-size: 22rpx;			}		}	}	.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: 160rpx;		height: 64rpx;		background: linear-gradient( 313deg, #FFE6EE 0%, #FFBACA 100%);		border-radius: 36rpx;		font-weight: bold;		font-size: 28rpx;		color: #222222;		text-align: center;		line-height: 64rpx;		position: relative;	}	.swiper {		height: fit-content;	}</style>
 |