<template>
|
|
<view class="service-new container">
|
|
|
|
<view class="order-type-select" v-if="!buyInfo.teacher">
|
|
|
|
<view class="order-type-title">
|
|
<image style="width: 40rpx; height: 40rpx;margin-right: 10rpx;" slot='cover' src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/OrderIcon.png">
|
|
</image>
|
|
|
|
<!-- <image style="width: 32rpx; height: 32rpx; margin-right: 10rpx;" src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/SystemOrderCircle.png"></image> -->
|
|
下单方式:系统派单 <text style="color: #999;font-size: 26rpx;">(需先选择伴宠师等级)</text>
|
|
</view>
|
|
|
|
<view class="order-type-options">
|
|
<view class="order-type-option" :class="{active: companionLevel === 'junior'}" @click="selectCompanionLevel('junior')">
|
|
<image style="width: 40rpx; height: 40rpx; margin-right: 10rpx;" src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/catdog.png"></image>
|
|
初级伴宠师
|
|
<view class="info-icon" @click.stop="showCompanionInfo('junior')">
|
|
<uni-icons type="info" size="20" color="#FFB13F"></uni-icons>
|
|
</view>
|
|
</view>
|
|
<view class="order-type-option" :class="{active: companionLevel === 'senior'}" @click="selectCompanionLevel('senior')">
|
|
<image style="width: 40rpx; height: 40rpx; margin-right: 10rpx;" src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/catdog.png"></image>
|
|
高级伴宠师
|
|
<view class="info-icon" @click.stop="showCompanionInfo('senior')">
|
|
<uni-icons type="info" size="20" color="#FFB13F"></uni-icons>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<uni-popup ref="companionInfoPopup" type="center">
|
|
<view class="companion-info-popup">
|
|
<view class="companion-info-title">
|
|
<text>{{ popupTitle }}</text>
|
|
</view>
|
|
<view class="companion-info-content">
|
|
<view class="companion-info-item">
|
|
<text class="companion-info-label">等级:</text>
|
|
<text class="companion-info-value">{{ popupLevel }}</text>
|
|
</view>
|
|
<view class="companion-info-item">
|
|
<text class="companion-info-label">价格:</text>
|
|
<text class="companion-info-value">要根据规城市不同展示不同的价格</text>
|
|
</view>
|
|
<view class="companion-info-item">
|
|
<text class="companion-info-label">分类标准:</text>
|
|
<text class="companion-info-value">文字描述初级是什么类型的,高级是什么类型的 :)</text>
|
|
</view>
|
|
</view>
|
|
<view class="companion-info-close" @click="closeCompanionInfo">
|
|
<uni-icons type="close" size="24" color="#fff"></uni-icons>
|
|
</view>
|
|
</view>
|
|
</uni-popup>
|
|
|
|
<view class="service-new-address">
|
|
<uni-card padding=0 :is-shadow="false">
|
|
<view class="service-new-title" slot="title">
|
|
<view class="service-new-title-left">
|
|
<view class="service-new-flag"></view>
|
|
<view>服务地址</view>
|
|
</view>
|
|
</view>
|
|
<view class="split-line"></view>
|
|
<view class="service-new-address-content">
|
|
|
|
<view v-if="isAddressSelected" class="service-new-address-selected" >
|
|
<view class="personal-address-info">
|
|
<view class="personal-address-text">
|
|
{{currentAddress.province}} {{currentAddress.city}} {{currentAddress.detailAddress}}
|
|
</view>
|
|
<view class="personal-address-people">
|
|
<view>
|
|
{{currentAddress.name}}
|
|
</view>
|
|
<view style="border: solid #7D8196 1px; margin: 0 10px; height: 12px;"> </view>
|
|
<view>
|
|
{{currentAddress.phone}}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view>
|
|
<uni-icons type="right" size="28rpx" color="#AAA" @click="selectAddress"></uni-icons>
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<view v-else class="service-new-unselect">
|
|
<view style="width: 50%;">
|
|
<u-button color="#FFBF60" icon="plus-circle-fill" text="添加地址" shape="circle" plain @click="selectAddress">
|
|
</u-button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</uni-card>
|
|
</view>
|
|
<view class="service-new-pet">
|
|
<uni-card padding=0 :is-shadow="false">
|
|
<view class="service-new-title" slot="title">
|
|
<view class="service-new-title-left">
|
|
<view class="service-new-flag">
|
|
</view>
|
|
<view class="service-new-title-text">
|
|
服务宠物
|
|
</view>
|
|
</view>
|
|
|
|
<view v-if="isPetSelected" class="add-pet" @click="selectPet">
|
|
<u-icon name="plus-circle-fill" color="#FFBF60" size="28rpx" style="margin-right: 10rpx;"></u-icon>
|
|
添加宠物
|
|
</view>
|
|
</view>
|
|
<view class="split-line"></view>
|
|
<view class="service-new-pet-content">
|
|
<view v-if="isPetSelected" class="personal-pet-list">
|
|
<view v-for="(item,index) in currentPets" :key="index">
|
|
<view class="personal-pet-list-item">
|
|
<view class="personal-pet-info">
|
|
<!-- 左侧头像 -->
|
|
<view class="pet-avatar">
|
|
<u-avatar :src="item.photo?item.photo:defaultPhoto" size="60" shape="circle"></u-avatar>
|
|
</view>
|
|
|
|
<!-- 中间内容 -->
|
|
<view class="pet-info" style="flex: 1; margin: 0 20rpx; max-width: 50%;">
|
|
<view class="pet-name-gender" style="display: flex; align-items: center;">
|
|
<view>{{item.name}}</view>
|
|
<view class="pet-gender" style="margin-left: 10rpx; display: flex;align-items: center;">
|
|
<img :src="item.gender=='男生'?'../../static/images/details/boy.svg':'../../static/images/details/girl.svg'" alt="sex"
|
|
style="width: 16px;height: 16px;"/>
|
|
</view>
|
|
</view>
|
|
<view class="pet-dates ellipsis" >
|
|
{{ getSelectedDateString(item.selectedDate) }}
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 右侧天数统计 -->
|
|
<view class="date-total" style="margin-left: auto;width: 140rpx;text-align: end;">
|
|
共 {{item.selectedDate.length}} 天
|
|
<uni-icons type="right" size="28rpx" color="#AAA" @click="selectPet"></uni-icons>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view v-else class="service-new-unselect">
|
|
<view style="width: 50%;">
|
|
<u-button color="#FFBF60" icon="plus-circle-fill" text="添加宠物" shape="circle" plain @click="selectPet">
|
|
</u-button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</uni-card>
|
|
</view>
|
|
<view class="service-new-pet">
|
|
<uni-card padding=0 :is-shadow="false">
|
|
<view class="service-new-title" slot="title">
|
|
<view class="service-new-title-left">
|
|
<view class="service-new-flag">
|
|
</view>
|
|
<view class="service-new-title-text">
|
|
服务细则
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="split-line"></view>
|
|
<view class="service-new-details-content">
|
|
<view style="margin: 30rpx 0;">
|
|
<u-checkbox-group
|
|
v-model="needPreFamiliarize"
|
|
iconPlacement="right"
|
|
placement="column">
|
|
<u-checkbox activeColor="#FFBF60" label="是否提前熟悉" name="是否提前熟悉" shape="circle"></u-checkbox>
|
|
</u-checkbox-group>
|
|
</view>
|
|
<view class="split-line"></view>
|
|
<view class="service-new-details-desc">
|
|
<view style="display: flex;">
|
|
<text style="width: 20rpx;">*</text>
|
|
<text style="flex: 1;">价格40元/次</text>
|
|
</view>
|
|
<view style="display: flex; margin: 20rpx 0;">
|
|
<text style="width: 20rpx;">*</text>
|
|
<text style="flex: 1;">服务内容: 购买此服务后,伴宠师将在您离家前,按照约定日期提前上门沟通,熟悉喂养要求及宠物</text>
|
|
</view>
|
|
<view style="display: flex;">
|
|
<text style="width: 20rpx;">*</text>
|
|
<text style="flex: 1;">服务保障: 购买此服务后,平台支持在提前熟悉后,上门服务第一天前,无理由免费更换伴宠师1次</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</uni-card>
|
|
</view>
|
|
<view class="details-subscribe">
|
|
<button class="details-btn" @click="goNext">下一步</button>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
import {
|
|
getProductList,
|
|
getOpenId
|
|
} from "@/api/system/user"
|
|
import { setToken,getToken,getOpenIdKey,setOpenIdKey } from '@/utils/auth'
|
|
export default {
|
|
data()
|
|
{
|
|
return {
|
|
isAddressSelected:false,
|
|
currentAddress:{},
|
|
isPetSelected:false,
|
|
currentPets:[],
|
|
needPreFamiliarize:[],
|
|
defaultPhoto:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/catdog.png',
|
|
companionLevel: 'junior', // 默认选择初级伴宠师
|
|
popupTitle: '',
|
|
popupLevel: '',
|
|
}
|
|
},
|
|
onLoad: function(option) {
|
|
},
|
|
onShow() {
|
|
if (!getToken() || !getOpenIdKey()) {
|
|
this.login()
|
|
}
|
|
if(this.$globalData.mainSku.length < 1 || !this.$globalData.mainSku[0].price){
|
|
// 获取主产品
|
|
this.getProductList()
|
|
}
|
|
this.currentAddress = this.$globalData.newOrderData.currentAddress
|
|
if(this.currentAddress&&this.currentAddress.name){
|
|
this.isAddressSelected=true
|
|
}
|
|
this.currentPets = this.$globalData.newOrderData.currentPets
|
|
if(this.currentPets&&this.currentPets.length>0){
|
|
this.isPetSelected=true
|
|
}
|
|
this.needPreFamiliarize = this.$globalData.newOrderData.needPreFamiliarize
|
|
// 初始化伴宠师等级
|
|
if(this.$globalData.newOrderData.companionLevel) {
|
|
this.companionLevel = this.$globalData.newOrderData.companionLevel
|
|
}
|
|
},
|
|
methods:{
|
|
selectAddress(){
|
|
uni.navigateTo({
|
|
url: "/pages/newOrder/addressList"
|
|
});
|
|
},
|
|
selectPet(){
|
|
uni.navigateTo({
|
|
url: "/pages/newOrder/petList"
|
|
});
|
|
},
|
|
selectCompanionLevel(level) {
|
|
this.companionLevel = level;
|
|
// 将选择的伴宠师等级保存到全局数据
|
|
this.$globalData.newOrderData.companionLevel = level;
|
|
},
|
|
showCompanionInfo(level) {
|
|
if(level === 'junior') {
|
|
this.popupTitle = '初级伴宠师';
|
|
this.popupLevel = '初级伴宠师';
|
|
} else {
|
|
this.popupTitle = '高级伴宠师';
|
|
this.popupLevel = '高级伴宠师';
|
|
}
|
|
this.$refs.companionInfoPopup.open();
|
|
},
|
|
closeCompanionInfo() {
|
|
this.$refs.companionInfoPopup.close();
|
|
},
|
|
getProductList() {
|
|
getProductList({
|
|
"publishStatus": 1,
|
|
"categoryId": 76,
|
|
"needSku": true
|
|
}).then(response => {
|
|
if (response && response.content && response.content.length > 0) {
|
|
const skus = response && response.content[0].skus
|
|
if(skus && skus.length>0){
|
|
let productSku = {
|
|
"skuId": skus[0].id,
|
|
"price":skus[0].price,
|
|
"name":response.content[0].name,
|
|
"quantity": 1,
|
|
"isMainProduct":true
|
|
}
|
|
this.$globalData.mainSku = [productSku]
|
|
}
|
|
}else {
|
|
uni.showToast('获取主产品失败,请联系管理员')
|
|
}
|
|
console.log(response);
|
|
})
|
|
},
|
|
login() {
|
|
uni.login({
|
|
provider: 'weixin',
|
|
success: (loginRes) => {
|
|
this.getOpenId(loginRes.code)
|
|
},
|
|
fail: function(error) {
|
|
// 授权失败处理
|
|
uni.showToast('授权失败,请授权后再试')
|
|
}
|
|
});
|
|
},
|
|
getOpenId(code) {
|
|
getOpenId(code).then(res => {
|
|
if (res.code == 200 && res.data) {
|
|
let resData = JSON.parse(res.data)
|
|
let token = resData.token;
|
|
let openId = resData.openId;
|
|
setOpenIdKey(openId)
|
|
if(token){
|
|
setToken(token)
|
|
}
|
|
}
|
|
})
|
|
},
|
|
goNext(){
|
|
console.log(this.needPreFamiliarize)
|
|
if(!this.isAddressSelected) {
|
|
this.$modal.showToast('请选择服务地址');
|
|
return;
|
|
}
|
|
if(!this.isPetSelected) {
|
|
this.$modal.showToast('请选择宠物');
|
|
return;
|
|
}
|
|
this.$globalData.newOrderData.needPreFamiliarize = this.needPreFamiliarize
|
|
uni.navigateTo({
|
|
url: "/pages/newOrder/serviceNew2"
|
|
});
|
|
console.log(this.$globalData.newOrderData)
|
|
},
|
|
getSelectedDateString(selectDate){
|
|
//显示日期为01/01;01/02;
|
|
if(!selectDate || selectDate.length === 0) return '';
|
|
return selectDate.map(date => {
|
|
// 从日期字符串中提取月和日
|
|
const [,month, day] = date.date.split('-');
|
|
return `${month}/${day}`;
|
|
}).join(';');
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="less">
|
|
.container {
|
|
position: relative;
|
|
height: 100%;
|
|
padding-bottom: 78px;
|
|
|
|
.order-type-select {
|
|
padding: 20rpx 30rpx;
|
|
margin-bottom: 20rpx;
|
|
|
|
.order-type-title {
|
|
background-color: #FFF9F0;
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 28rpx;
|
|
color: #333;
|
|
margin-bottom: 20rpx;
|
|
padding: 20rpx;
|
|
border-radius: 40rpx;
|
|
}
|
|
|
|
.order-type-options {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
margin-top: 20rpx;
|
|
|
|
.order-type-option {
|
|
display: flex;
|
|
align-items: center;
|
|
width: 48%;
|
|
height: 80rpx;
|
|
background-color: #FFFFFF;
|
|
border-radius: 40rpx;
|
|
padding: 0 20rpx;
|
|
font-size: 28rpx;
|
|
color: #666;
|
|
position: relative;
|
|
border: 2rpx solid transparent;
|
|
|
|
&.active {
|
|
border: 2rpx solid #FFB13F;
|
|
background-color: #FFF5E5;
|
|
}
|
|
|
|
.info-icon {
|
|
position: absolute;
|
|
right: 20rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.companion-info-popup {
|
|
width: 600rpx;
|
|
background-color: #FFFFFF;
|
|
border-radius: 20rpx;
|
|
padding: 40rpx;
|
|
position: relative;
|
|
|
|
&::after {
|
|
content: '';
|
|
display: flex;
|
|
position: absolute;
|
|
top: 0rpx;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100rpx;
|
|
background-color: #FFB13F;
|
|
}
|
|
|
|
.companion-info-title {
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
color: #fff;
|
|
text-align: center;
|
|
border-bottom: 1rpx solid #EFEFEF;
|
|
position: relative;
|
|
z-index: 2;
|
|
height: 100rpx;
|
|
}
|
|
|
|
.companion-info-content {
|
|
.companion-info-item {
|
|
margin-bottom: 40rpx;
|
|
|
|
.companion-info-label {
|
|
font-size: 28rpx;
|
|
color: #666;
|
|
margin-right: 10rpx;
|
|
}
|
|
|
|
.companion-info-value {
|
|
font-size: 28rpx;
|
|
color: #333;
|
|
}
|
|
}
|
|
}
|
|
|
|
.companion-info-close {
|
|
position: absolute;
|
|
bottom: -80rpx;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
.details-subscribe {
|
|
background-color: #FFFFFF;
|
|
padding: 10px;
|
|
width: 100%;
|
|
height: 78px;
|
|
position: fixed;
|
|
bottom: 0;
|
|
z-index: 100;
|
|
|
|
.details-btn {
|
|
width: 100%;
|
|
border-radius: 6px;
|
|
background: #FFB13F;
|
|
font-size: 16px;
|
|
color: #FFFFFF;
|
|
}
|
|
}
|
|
}
|
|
.service-new{
|
|
.service-new-flag {
|
|
width: 8rpx;
|
|
height: 32rpx;
|
|
background: #FFBF60;
|
|
border-radius: 30rpx 30rpx 30rpx 30rpx;
|
|
margin-right: 10rpx;
|
|
}
|
|
.split-line{
|
|
width: 100%;
|
|
height: 1rpx;
|
|
background: #EFEFEF;
|
|
}
|
|
.service-new-title{
|
|
display: flex;
|
|
font-weight: 500;
|
|
font-size: 28rpx;
|
|
color: #333333;
|
|
line-height: 33rpx;
|
|
margin: 42rpx 0 30rpx;
|
|
justify-content: space-between;
|
|
.service-new-title-left{
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
}
|
|
.service-new-unselect{
|
|
height: 156rpx;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
.add-pet{
|
|
font-weight: 400;
|
|
font-size: 28rpx;
|
|
color: #FFAA48;
|
|
line-height: 40rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.service-new-details-desc{
|
|
font-weight: 400;
|
|
font-size: 24rpx;
|
|
color: #A94F20;
|
|
line-height: 28rpx;
|
|
text-align: left;
|
|
padding: 26rpx 0;
|
|
}
|
|
.personal-address-info{
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: flex-start;
|
|
flex-wrap: wrap;
|
|
margin: 32rpx 0;
|
|
width: 80%;
|
|
.personal-address-text{
|
|
color: #333;
|
|
font-size: 28rpx;
|
|
font-weight: bold;
|
|
width: 100%;
|
|
}
|
|
.personal-address-people{
|
|
color: #7D8196;
|
|
font-size: 28rpx;
|
|
font-weight: 400;
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
align-items: center;
|
|
}
|
|
}
|
|
.service-new-address-selected{
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
}
|
|
.personal-pet-list {
|
|
margin-top: 20rpx;
|
|
|
|
.personal-pet-list-item {
|
|
margin-bottom: 20rpx;
|
|
background-color: #F9F9F9;
|
|
height: 172rpx;
|
|
border-radius: 8rpx;
|
|
|
|
.personal-pet-info {
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 0 20rpx;
|
|
}
|
|
}
|
|
}
|
|
</style>
|