|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |  | <template>	<view class="home-content">		<view class="card-container">			<view class="float-button">				<image @click="changeOrderType" style="width: 112rpx; height: 112rpx;" slot='cover'					src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/SystemOrderCircle.png">			</view>			<view>				<view class="top-select">					<view style="width: 50%;">						<view class="top-select-left" @click="getLocationInfo">							<uni-icons type="location-filled" size="20" color="#FFB13F"></uni-icons>							<text v-if="isCheckLocation"								style="color: #FFB13F ;font-size: 28rpx;font-weight: 400; line-height: 28rpx; width: 280rpx; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">{{locationName}}</text>							<text v-else style="color: #AAAAAA;font-size: 28rpx;font-weight: 400;">选择地址</text>						</view>					</view>					<view style="width: 50%;">						<view class="top-select-right" @click="toggleCalendar('bottom')">							<image style="width: 32rpx; height: 32rpx; margin-right: 10rpx;" slot='cover'								src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/Calendar.png"/>								<text v-if="isCheckTime" style="color: #FFB13F;font-size: 28rpx;font-weight: 400;">									{{selectedDateShowText}}共{{selectedDate.length}}天</text>								<text v-else style="color: #AAAAAA;font-size: 28rpx;font-weight: 400;">选择时间</text>						</view>						<view>							<uni-popup ref="popup" background-color="#fff" @change="changePopup">								<view class="popupBottom">									<uni-calendar ref="calendar" class="uni-calendar--hook" :selected="selectedDate"										:startDate="startDate" :endDate="endDate" :showMonth="false"										@change="changeCalendar" @confirm="changeCalendar" @close="close" />									<view style="display: flex; justify-content: center; align-items: center;">										<!-- <button class="bottom-btn" @click="closePopup">确定</button> -->										<image @click="closePopup" style="width: 670rpx; height: 80rpx;" slot='cover' src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/yesButton.png" />									</view>								</view>							</uni-popup>						</view>					</view>				</view>			</view>			<view style="display: flex; margin: 10rpx 20rpx 0 20rpx;">				<!-- <view>					<image v-show="isCatCheck" @click="changeSelectedPet('cat')"						style="width: 224rpx; height: 96rpx; margin-right: 20rpx;" slot='cover'						src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/CatCheck.png" />					<image v-show="!isCatCheck" @click="changeSelectedPet('cat')"						style="width: 224rpx; height: 96rpx; margin-right: 20rpx;" slot='cover'						src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/CatUncheck.png" />				</view>				<view>					<image v-show="isDogCheck" @click="changeSelectedPet('dog')"						style="width: 224rpx; height: 96rpx; margin-right: 20rpx;" slot='cover'						src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/DogCheck.png" />					<image v-show="!isDogCheck" @click="changeSelectedPet('dog')"						style="width: 224rpx; height: 96rpx; margin-right: 20rpx;" slot='cover'						src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/DogUncheck.png" />				</view> -->												<view style="padding: 10rpx 20rpx;border-radius: 50rpx;background-color: #fff;				display: flex;align-items: center;justify-content: center;width: 450rpx;margin-right: 30rpx;				color: #AAAAAA;" @click="openFilterPopup">													<text>伴宠师条件筛选</text>					<uni-icons type="forward" size="30rpx" color="#aaa"					style="margin-top: 7rpx;margin-left: 10rpx;"></uni-icons>				</view>								<!-- 筛选弹窗组件 -->				<filter-popup ref="filterPopup" @confirm="handleFilterConfirm"></filter-popup>												<uni-easyinput style="border-radius: 84rpx; width: 224rpx; height: 96rpx;" borderColor="#FFB13F"					prefixIcon="search" v-model="value" placeholder="输入名称" @iconClick="iconClick"></uni-easyinput>				<!-- <view style="width: 50%;" class="card">					<uni-data-checkbox multiple selectedColor="#FFB13F" v-model="selectedPet" :localdata="catOrdog"						@change="changeSelectedPet"></uni-data-checkbox>				</view>				<view style="width: 50%;">					<uni-easyinput style="border-radius: 30rpx;" borderColor="#FFB13F" prefixIcon="search"						v-model="value" placeholder="搜索" @iconClick="iconClick"></uni-easyinput>				</view> -->				<!-- <checkbox-group>					<label>						<checkbox value="cb" checked="true" color="#FFB13F" style="transform:scale(0.7)" />选中					</label>					<label>						<checkbox class="color_FFB13F" value="cb" color="#FFB13F" style="transform:scale(0.7)" />未选中					</label>				</checkbox-group> -->			</view>			<view>				<view v-if="companionList.length > 0">					<uni-row :span="12" v-for="(item,index) in companionList" :key="index">						<uni-card :is-shadow="false" padding=0 margin="10px"                        @click="getInfo(item.userId)">							<view class="personal-list-item">								<view class="personal-info">									<view>										<!-- <image class="people-img" slot='cover'											:src="item&&item.staffImages&&item.staffImages.length>0?item.staffImages[0].url:defaultStaffIamge">										</image> -->																				<image class="people-img" slot='cover'											:src="item.userImage">										</image>																			</view>									<view class="personal-info-1">										<view class="personal-info-2">											<view class="personal-info-title">												<view class="personal-name">													{{ item.userName || '匿名' }}												</view>												<view class="personal-sex">													<img :src="item.appletUsersTeacher.sex == 0?'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/sex_m.png':																'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/sex_f.png'" alt="sex"														style="width: 20px;height: 20px;" />												</view>											</view>											<view class="personal-star" @click="checkIsLike">												<text style="color: #FFB13F;">客户点赞数{{ item.appletUsersTeacher.thumbsUp || 0 }}</text>												<uni-icons v-if="isLike" type="hand-up-filled" size="20"													color="#FFB13F"></uni-icons>												<uni-icons v-else type="hand-up" size="20" color="#FFB13F"></uni-icons>											</view>										</view>										<view class="personal-info-3" style="width: 100%;">											<view class="ellipsis" v-if="item.distanceText">												距离{{ item.distanceText }}km											</view>											<view class="ellipsis" v-else>												暂无距离估测											</view>										</view>										<view class="personal-info-4" style="width: 100%;">											<view class="ellipsis" style="max-width: 225px;">												简介:{{ item.appletUsersTeacher.userBrief || '暂无' }}											</view>										</view>									</view>								</view>							</view>							<view>								<view class="personal-item-bottom">									<text class="personal-item-bottom-text">养宠{{ item.experience || 0 }}年 | 评价{{ item.commentNum || 0 }}条 | 服务小结{{ item.serviceSummaryNum || 0 }}份</text>								</view>							</view>						</uni-card>					</uni-row>				</view>				<view v-else					style="                    color: #AAAAAA;                    display: flex; justify-content: center; align-items: center; height: 100px; font-size: 16px; font-weight: bold;">					暂无数据				</view>			</view>		</view>	</view></template>
<script>	import uniPopup from '@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue';	import uniFab from '@/uni_modules/uni-fab/components/uni-fab/uni-fab.vue'	import FilterPopup from '@/components/FilterPopup/FilterPopup.vue'    import positionMixin from '../../mixins/position';	// import {
	// 	getCompanionList,
	// 	getCompanionInfo
	// } from "@/api/system/companion"
	import {		getTeacherList,	} from "@/api/order/order"	export default {		mixins: [positionMixin],		data() {			return {				allInfo: {					isCheckLocation: false,					locationName: '',					locationLatitude: '',					locationLongitude: '',					locationAddress: '',					selectedDate: [],					isCheckTime: false,				},				// 筛选条件
				filterOptions: {					gender: '',					petTypes: [],					level: ''				},				selectedDate: [],				startDate: '',				endDate: '',				isCheckLocation: false,				locationName: '',				locationLatitude: '',				locationLongitude: '',				locationAddress: '',				isCheckTime: false,				selectedDateShowText: '',				isCatCheck: true,				isDogCheck: true,				petTypes: ['1', '2'],				value: '',				companionList: [],				isLike: false,				likeNum: 560,				defaultStaffIamge: 'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/banner/gold_people.png',			}		},		components: {			uniPopup,			FilterPopup		},		onLoad: function(option) {			let info = JSON.parse(decodeURIComponent(option.info));			this.allInfo = info			console.log('this.allInfo', this.allInfo);			this.setInfo()			this.getCompanionList()		},		mounted() {			this.getCalendarDate();		},		methods: {			setInfo() {				this.isCheckLocation = this.allInfo.isCheckLocation				this.locationName = this.allInfo.locationName				this.locationLatitude = this.allInfo.locationLatitude				this.locationLongitude = this.allInfo.locationLongitude				this.locationAddress = this.allInfo.locationAddress				this.selectedDate = this.allInfo.selectedDate				this.isCheckTime = this.allInfo.isCheckTime				if (this.allInfo.selectedDate.length == 1) {					this.selectedDateShowText = this.allInfo.selectedDate[0].date.replace(/-/g, "/") + ' '				} else if (this.allInfo.selectedDate.length > 1) {					this.selectedDateShowText = this.allInfo.selectedDate[0].date.replace(/-/g, "/") + '...' + ' '				}			},			checkIsLike() {				this.isLike = !this.isLike				this.$forceUpdate()			},			changeOrderType() {				uni.navigateTo({					url: '/pages/newOrder/serviceNew2'				});			},			getInfo(id) {				if (id) {					uni.navigateTo({						// url: '/pages/companionPetList/companionPetInfo',
						url: `/pages/companionPetList/companionPetInfo?id=${id}`					});				}			},			trigger(e) {				uni.showModal({					title: '提示',					content: `激活状态:${e.item.active};选中项:${e.item.text}`,					success(res) {						if (res.confirm) {							console.log('用户点击确定');						} else if (res.cancel) {							console.log('用户点击取消');						}					}				});			},			fabClick() {				uni.showToast({					title: '点击了悬浮按钮',					icon: 'none'				});			},			getCompanionList() {				// let data = {
				// 	longitude: this.locationLongitude,
				// 	latitude: this.locationLatitude,
				// 	petTypes: this.selectedPet,
				// 	staffName: '',
				// 	address: this.locationAddress
				// }
				let data = {					address: "上海市浦东新区浦东南路150弄",					latitude: 29.56471,					longitude: 106.55073,					petTypes: ["1", "2"],					staffName: "君"				}				console.log('data', data);				// getCompanionList(data).then(response => {
				// 	if (response.code == 200) {
				// 		this.companionList = response.rows
				// 		console.log(response);
				// 	}
				// 	console.log(response);
				// })
				getTeacherList(data).then(response => {					if (response.code == 200) {						this.companionList = response.rows						this.calculateTeacherListDistance()					}					console.log(response);				})			},            calculateTeacherListDistance(){                this.companionList.forEach(item => {                	item.distanceText = this.calculateDistanceAddress(item.appletAddresseList)                })            },			iconClick() {},			changeSelectedPet(type) {				console.log('changeSelectedPet type', type);				if (type == 'cat') {					this.isCatCheck = !this.isCatCheck					if (this.petTypes.includes('1')) {						if (!this.isCatCheck) {							this.petTypes = this.petTypes.filter(item => item !== '1');						}					} else {						this.isCatCheck ? this.petTypes.push('1') : ''					}				} else {					this.isDogCheck = !this.isDogCheck					if (this.petTypes.includes('2')) {						if (!this.isDogCheck) {							this.petTypes = this.petTypes.filter(item => item !== '2');						}					} else {						this.isDogCheck ? this.petTypes.push('2') : ''					}				}				console.log('this.petTypes', this.petTypes);			},			toggleCalendar(type) {				this.type = type				uni.hideTabBar()				this.$refs.popup.open(type)			},			closePopup() {				this.$refs.popup.close()				setTimeout(() => {					uni.showTabBar()				}, 300)			},			changePopup(e) {				console.log('当前模式:' + e.type + ',状态:' + e.show);				if (e.show) {					uni.hideTabBar()				} else {					setTimeout(() => {						uni.showTabBar()					}, 300)				}			},			close() {				console.log('弹窗关闭');			},			confirm(e) {				console.log('confirm 返回:', e)			},			changeCalendar(e) {				console.log('change 返回:', e)				this.selectedDateShowText = ''				// 选中日期
				const selectedValue = this.selectedDate.find(item => item.date === e.fulldate)				if (selectedValue) {					// 存在则移除
					this.selectedDate = this.selectedDate.filter(item => item.date !== e.fulldate);				} else {					this.selectedDate.push({						date: e.fulldate,						info: 'time'					})				}				if (this.selectedDate.length > 0) {					this.isCheckTime = true					if (this.selectedDate.length == 1) {						this.selectedDateShowText = this.selectedDate[0].date.replace(/-/g, "/") + ' '					} else {						this.selectedDateShowText = this.selectedDate[0].date.replace(/-/g, "/") + '...' + ' '					}				} else {					this.isCheckTime = false				}			},			getCalendarDate() {				let tomorrow = new Date()				tomorrow.setDate(tomorrow.getDate() + 2);				this.startDate = this.formatDate(tomorrow);				// 获取三个月后的日期
				let threeMonthsLater = new Date();				threeMonthsLater.setMonth(threeMonthsLater.getMonth() + 3);				this.endDate = this.formatDate(threeMonthsLater);			},			formatDate(date) {				let year = date.getFullYear();				let month = (date.getMonth() + 1).toString().padStart(2, '0');				let day = date.getDate().toString().padStart(2, '0');				return year + '-' + month + '-' + day;			},			getLocationInfo() {				wx.chooseLocation({					type: 'gcj02', // 坐标系,默认为 wgs84 返回 gps 原始坐标,gcj02 返回可用于 wx.openLocation 的坐标
					success: (res) => {						// 成功回调
						this.isCheckLocation = true						this.locationName = res.address						this.locationLongitude = res.longitude						this.locationLatitude = res.latitude						this.locationAddress = res.address						console.log('选择的位置:', res);
                        this.position.address = this.locationAddress                        this.position.longitude = this.locationLongitude                        this.position.latitude = this.locationLatitude
					},					fail: (err) => {						// 失败回调
						console.error('选择位置失败:', err);					}				});			},			// 打开筛选弹窗
			openFilterPopup() {				this.$refs.filterPopup.open()			},			// 处理筛选确认
			handleFilterConfirm(filterData) {				console.log('筛选条件:', filterData)				this.filterOptions = filterData				// 根据筛选条件重新获取数据
				this.getCompanionList()			},		}	}</script>
<style lang="scss">	.home-content {		background: linear-gradient(360deg, #F5F5F7 0%, #FFBF60 99%);
		.card-container {			margin: 0;			padding: 0;
			.uni-card {				border-radius: 16rpx;			}
			.top-select {				background-color: #fff;				border: 1px solid #EBEEF5;				// box-shadow: 0px 0px 3px 1px rgba(0, 0, 0, 0.08);
				display: flex;				justify-content: space-between;				margin: 0 10px 10px 10px;				border-radius: 16rpx;				padding: 13px;
				.top-select-left {					display: flex;					flex-wrap: nowrap;					align-items: center;					// justify-content: space-around;
				}
				.top-select-right {					display: flex;					flex-wrap: nowrap;					align-items: center;				}			}
			.float-button {				z-index: 10;				position: fixed;				bottom: 100rpx;				/* 距离底部的距离 */				right: 32rpx;				/* 距离右侧的距离 */				// width: 50px;
				// /* 按钮的宽度 */
				// height: 50px;
			}
			.is-input-border {				border-radius: 84rpx;				height: 96rpx;				width: 224rpx;			}
			.card {				// border-radius: 50rpx;
				width: 50%;				background-color: #fff;				border: 1px solid #EBEEF5;				box-shadow: 0px 0px 3px 1px rgba(0, 0, 0, 0.08);				margin-right: 20rpx;				// height: 80rpx;
				display: flex;				align-items: center;				justify-content: center;			}
			.personal-list-item {				padding: 10px 0px 0px 0;
				.personal-info {					display: flex;					align-items: center;					justify-content: flex-start;
					.people-img {						width: 168rpx;						height: 168rpx;						border: #FEA714 5rpx solid;						border-radius: 20rpx;					}
					.personal-info-1 {						margin-left: 10px;						width: 100%;
						.personal-info-2 {							display: flex;							flex-wrap: wrap;
							.personal-info-title {								display: flex;								flex-wrap: wrap;								width: 60%;							}
							.personal-name {								color: #333;								font-size: 32rpx;								// line-height: 32rpx;
								margin-right: 10rpx;								font-weight: 900;								font-style: normal;							}
							.personal-star {								color: #FFAA48;								font-size: 24rpx;								font-weight: 400;								line-height: 32rpx;							}						}
						.personal-info-3 {							display: flex;							align-items: baseline;							font-size: 28rpx;							line-height: 32rpx;							margin-top: 5px;							color: #FFAA48;							font-weight: 900;						}
						.personal-info-4 {							display: flex;							align-items: baseline;							font-size: 24rpx;							margin-top: 10px;							color: #7D8196;							font-weight: 400;							line-height: 32rpx;						}
					}
				}			}
			.personal-item-bottom {				height: 60rpx;				background-color: #FFF4E5;				margin: 20rpx 0 20rpx 0;				display: flex;				align-items: center;				justify-content: center;				border-radius: 8rpx;
				.personal-item-bottom-text {					color: #A94F20;					margin: 14rpx;					font-size: 24rpx;					font-weight: 400;				}			}
			.popupBottom {				z-index: 99;				height: 950rpx;				overflow: hidden;				position: fixed;				bottom: 0;				left: 0;				right: 0;				padding: 10rpx 20rpx;				border-radius: 20rpx 20rpx 0 0;				background-color: #fff;
				.bottom-btn {					width: 100%;					border-radius: 120rpx;					background: #FFB13F;					font-size: 32rpx;					color: #FFFFFF;				}			}
			::v-deep .wx-radio-input.wx-radio-input-checked {				background-color: #00875a !important;				border-color: #00875a !important;				color: #ffffff !important;			}
			.color_FFB13F {				color: #FFB13F;			}
		}	}</style>
 |