bike-ali/page_user/xcjs.vue
2024-09-30 18:02:20 +08:00

1035 lines
26 KiB
Vue

<template>
<view class="page">
<u-navbar title="订单详情" :border-bottom="false" :background="bgc" title-color='#000' title-size='36'
height='45'></u-navbar>
<map class="map" id="map" ref="map" :scale="zoomSize" :latitude="latitude" :longitude="longitude"
:show-location='true' :markers="markers" :polygons="polygons" :polyline="polyline"> </map>
<view class="park" @click="toggleIconAndCallout">
<image src="https://lxnapi.ccttiot.com/bike/img/static/uRiYQZQEb3l2LsltEsyW" mode=""></image>
</view>
<!-- <map class="map" id="map" ref="map"
\> </map> -->
<view class="bot_btn" v-if="false">
<view class="time">
骑行时间30分钟9秒
</view>
<view class="price">
4.00<span></span>
</view>
<view class="toinfo">
查看骑行费明细 >
</view>
<view class="btn">
去支付
</view>
</view>
<view class="bot" v-if="loading">
<view class="card">
<view class="top">
<view class="topcont">
<view class="left">
{{orderInfo.totalFee}}<span style="font-size: 24rpx;"></span>
</view>
<view class="right" @click="topage(2)"
style="display: flex;flex-wrap: nowrap;align-items: center;">
费用明细<view class="iconfont icon-xiangyou1" style="font-size: 24rpx;"></view>
</view>
</view>
<view class="info">
<view class="type">
电单车
</view>
<view class="data" style="font-size: 26rpx;">
{{orderInfo.createTime}}
</view>
</view>
<view class="topcont" style="margin-top: 32rpx;">
<view class="left" style="font-size:26rpx ;">
订单时长
</view>
<view class="right" style="font-size:26rpx ;">
{{computedList(orderInfo)}}
</view>
</view>
<view class="topcont" style="margin-top: 14rpx;">
<view class="left" style="font-size:26rpx ;">
骑行距离
</view>
<view class="right" style="font-size:26rpx ;" v-if="orderInfo.distance">
<!-- {{orderInfo.distance}}公里 -->
{{ (orderInfo.distance / 1000).toFixed(2) }} 公里
</view>
<view class="right" style="font-size:26rpx ;" v-else>
--公里
</view>
</view>
</view>
<view class="bottom" @click="topage(1)">
<view class="text" style="display: flex;flex-wrap: nowrap;align-items: center;">
故障上报 <view class="iconfont icon-xiangyou1" style="font-size: 26rpx;"></view>
</view>
</view>
</view>
<view class="paybtn" v-if="orderInfo.status==3&&orderInfo.paid==0" @click="topay1()">
去支付
</view>
<view class="kefus">
<view class="txt1">
对订单有疑问?
</view>
<view class="btn1" @click="showkf=true">
联系客服
</view>
</view>
</view>
<u-mask :show="show" @click="show = false" :z-index='100' />
<u-mask :show="showkf" :z-index='100' />
<view class="kfbox" v-if="showkf">
<view class="tit">
请选择您要联系的客服
</view>
<view class="words">
我们根据选择为您提供服务
</view>
<!-- <view class="phone_box">
<view class="img">
<image src="https://lxnapi.ccttiot.com/bike/img/static/uwiRmed6Kz4OUJh00HBD" mode=""></image>
</view>
<view class="info">
<view class="name">
官方客服
</view>
<view class="phone">
000-260-1559
</view>
</view>
</view> -->
<view class="phone_box"
v-if="areaInfo.serviceName1!=''&&areaInfo.serviceName1&&areaInfo.servicePhone1!=''&&areaInfo.servicePhone1"
@click="callPhone(areaInfo.servicePhone1)">
<view class="img">
<image src="https://lxnapi.ccttiot.com/bike/img/static/unsZOLTPuYrpQKF8MpFt" mode=""></image>
</view>
<view class="info">
<view class="name">
{{areaInfo.serviceName1}}
</view>
<view class="phone">
{{areaInfo.servicePhone1}}
</view>
</view>
</view>
<view class="phone_box"
v-if="areaInfo.serviceName2!=''&&areaInfo.serviceName2&&areaInfo.servicePhone2!=''&&areaInfo.servicePhone2"
@click="callPhone(areaInfo.servicePhone2)">
<view class="img">
<image src="https://lxnapi.ccttiot.com/bike/img/static/unsZOLTPuYrpQKF8MpFt" mode=""></image>
</view>
<view class="info">
<view class="name">
{{areaInfo.serviceName2}}
</view>
<view class="phone">
{{areaInfo.servicePhone2}}
</view>
</view>
</view>
<view class="phone_box"
v-if="areaInfo.serviceName3!=''&&areaInfo.serviceName3&&areaInfo.servicePhone3!=''&&areaInfo.servicePhone3"
@click="callPhone(areaInfo.servicePhone3)">
<view class="img">
<image src="https://lxnapi.ccttiot.com/bike/img/static/unsZOLTPuYrpQKF8MpFt" mode=""></image>
</view>
<view class="info">
<view class="name">
{{areaInfo.serviceName3}}
</view>
<view class="phone">
{{areaInfo.servicePhone3}}
</view>
</view>
</view>
<image class="close" src="https://lxnapi.ccttiot.com/bike/img/static/ulwJylk0JSmOdmU3FnnG" mode=""
@click="showkf=false"></image>
</view>
<!-- <image class="kefu" src="https://lxnapi.ccttiot.com/bike/img/static/u8osHvZfHL7u3lbveVXx" mode=""
@click="showkf=true"></image> -->
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "#F7FAFE",
},
latitude: 0,
longitude: 0,
isMap: false,
zoomSize: 18,
markers: [],
polyline: [{
points: [],
width: 8,
arrowLine: true,
color: '#00AF99'
// strokeWidth: 2,
// strokeColor: '#00AF99',
// fillColor: '#00AF99'
}, ],
polygons: [],
cardId: '001区域',
orderId: '',
orderInfo: {},
loading: false,
showIconAndCallout: false,
ispaid: false,
_mapContext: null,
showkf: false,
areaInfo: {},
}
},
created() {
this._mapContext = uni.createMapContext("map", this); //map为map组件id
},
onLoad(e) {
this.orderId = e.id
this.getOrderDetail()
},
components: {
},
methods: {
callPhone(phone){
this.isbackcar=false
uni.makePhoneCall({
phoneNumber:phone
})
setTimeout(()=>{
this.showkf=false
},500)
},
// 骑行结束支付
topay1() {
if (this.ispaid == false) {
this.ispaid = true
let data = {
userId: this.orderInfo.userId,
sn: this.orderInfo.sn,
orderNo: this.orderInfo.orderNo,
// money: this.freeInfo.fee,
mark: "订单支付",
type: '1'
}
uni.showLoading({
})
console.log('点击了');
let that = this
this.$u.post('/appVerify/pre/order', data).then((res) => {
if (res.code === 200) {
uni.hideLoading()
// this.freList=res.rows
uni.requestPayment({
provider: 'wxpay',
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.packageVal,
signType: res.data.signType,
paySign: res.data.paySign,
success(res) {
that.ispaid = false
// console.log('支付成功');
// // 支付成功逻辑
// clearInterval(that.timer)
// that.orderinfo = {}
// that.showdevice = false
// that.deviceIndex = 0
that.getOrderDetail()
},
fail(err) {
that.ispaid = false
// 支付失败逻辑
uni.showToast({
title: '支付失败',
icon: 'none',
duration: 2000
});
}
});
} else {
that.ispaid = false
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
}
},
topage(num) {
if (num == 1) {
uni.navigateTo({
url: '/page_user/gzsb?sn=' + this.orderInfo.sn
})
} else if (num == 2) {
uni.navigateTo({
url: '/page_user/ckmx?orderId=' + this.orderInfo.orderNo
})
}
},
computedList(item) {
if (item.status == 0 || item.status == 2) {
const createTime = new Date(item.createTime);
const payTime = Date.now();
const timeDifference = Math.abs(createTime - payTime);
const hours = Math.floor(timeDifference / (1000 * 60 * 60));
const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);
let result = '';
if (hours > 0) {
result += `${hours}小时`;
}
if (minutes > 0 || hours > 0) { // 显示分钟条件:有小时或者有分钟
result += `${minutes}分钟`;
}
// result += `${seconds}秒`; // 始终显示秒
return result;
} else {
const createTime = new Date(item.createTime);
const payTime = new Date(item.returnTime);
const timeDifference = Math.abs(createTime - payTime);
const hours = Math.floor(timeDifference / (1000 * 60 * 60));
const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);
let result = '';
if (hours > 0) {
result += `${hours}小时`;
}
if (minutes > 0 || hours > 0) { // 显示分钟条件:有小时或者有分钟
result += `${minutes}分钟`;
}
// result += `${seconds}秒`; // 始终显示秒
return result;
}
},
convertBoundaryToPolyline(boundary) {
if (!boundary) return null;
const points = JSON.parse(boundary).map(coord => ({
latitude: coord[1],
longitude: coord[0]
}));
const polyline = {
points: points,
fillColor: "#55888840", //填充颜色
strokeColor: "#22FF00", //描边颜色
strokeWidth: 2, //描边宽度
zIndex: 1, //层级
};
return polyline;
},
convertBoundaryToPolyliness(boundary) {
if (!boundary) return null;
const points = JSON.parse(boundary).map(coord => ({
latitude: coord[1],
longitude: coord[0]
}));
const polyline = {
points: points,
width: 8,
arrowLine: true,
color: '#00AF99'
};
return polyline;
},
convertBoundaryToPolylines(boundaries, num) {
if (num == 1) {
console.log('判断');
return boundaries.map(boundary => {
if (!boundary) return null;
let coords;
try {
coords = JSON.parse(boundary);
} catch (error) {
console.error("Error parsing boundary JSON:", error);
return null;
}
if (!Array.isArray(coords)) {
console.error("Parsed boundary is not an array:", coords);
return null;
}
const points = coords.map(coord => ({
latitude: coord[1],
longitude: coord[0]
}));
return {
points: points,
fillColor: "#3A7EDB40", //填充颜色
strokeColor: "#3A7EDB", //描边颜色
strokeWidth: 2, //描边宽度
zIndex: 1, //层级
};
}).filter(polyline => polyline !== null); // 过滤掉无效的折线数据
} else if (num == 2) {
return boundaries.map(boundary => {
if (!boundary) return null;
let coords;
try {
coords = JSON.parse(boundary);
} catch (error) {
console.error("Error parsing boundary JSON:", error);
return null;
}
if (!Array.isArray(coords)) {
console.error("Parsed boundary is not an array:", coords);
return null;
}
const points = coords.map(coord => ({
latitude: coord[1],
longitude: coord[0]
}));
return {
points: points,
fillColor: "#FFF5D640", //填充颜色
strokeColor: "#FFC107", //描边颜色
strokeWidth: 2, //描边宽度
zIndex: 1, //层级
};
}).filter(polyline => polyline !== null); // 过滤掉无效的折线数据
} else if (num == 3) {
return boundaries.map(boundary => {
if (!boundary) return null;
let coords;
try {
coords = JSON.parse(boundary);
} catch (error) {
console.error("Error parsing boundary JSON:", error);
return null;
}
if (!Array.isArray(coords)) {
console.error("Parsed boundary is not an array:", coords);
return null;
}
const points = coords.map(coord => ({
latitude: coord[1],
longitude: coord[0]
}));
return {
points: points,
fillColor: "#FFD1CF40", //填充颜色
strokeColor: "#FF473E", //描边颜色
strokeWidth: 2, //描边宽度
zIndex: 1, //层级
};
}).filter(polyline => polyline !== null); // 过滤掉无效的折线数据
}
},
getParking() {
// 发送请求获取数据
let data = {
areaId: this.orderInfo.areaId
}
this.$u.get('/app/parking/list?', data).then((res) => {
if (res.code === 200) {
// 处理接口返回的数据
const type1Data = [];
const type2Data = [];
const type3Data = [];
res.rows.forEach(row => {
if (row.type == 1) {
type1Data.push(row);
} else if (row.type == 2) {
type2Data.push(row);
} else if (row.type == 3) {
type3Data.push(row);
}
});
const validBoundaries = type1Data.map(row => row.boundaryStr).filter(boundary =>
typeof boundary === 'string' && boundary.trim() !== '');
const polylines = this.convertBoundaryToPolylines(validBoundaries, 1);
const validBoundaries1 = type2Data.map(row => row.boundaryStr).filter(boundary =>
typeof boundary === 'string' && boundary.trim() !== '');
const polylines1 = this.convertBoundaryToPolylines(validBoundaries1, 2);
const validBoundaries2 = type3Data.map(row => row.boundaryStr).filter(boundary =>
typeof boundary === 'string' && boundary.trim() !== '');
const polylines2 = this.convertBoundaryToPolylines(validBoundaries2, 3);
// 将处理后的数据添加到 this.polyline 中
this.polygons = this.polygons.concat(polylines2);
this.polygons = this.polygons.concat(polylines1);
this.polygons = this.polygons.concat(polylines);
// console.log(this.polyline);
this.parkingList = res.rows
}
}).catch(error => {
console.error("Error fetching parking data:", error);
});
},
toggleIconAndCallout() {
this.showIconAndCallout = !this.showIconAndCallout;
if (this.showIconAndCallout) {
const newMarkers = [];
this.parkingList.forEach(item => {
newMarkers.push({
id: parseFloat(item.parkingId),
latitude: parseFloat(item.latitude),
longitude: parseFloat(item.longitude),
width: 20,
height: 28.95,
iconPath: item.type == 1 ?
'https://lxnapi.ccttiot.com/bike/img/static/up2xXqAgwCX5iER600k3' : item
.type == 2 ?
'https://lxnapi.ccttiot.com/bike/img/static/u53BAQcFIX3vxsCzEZ7t' :
' https://lxnapi.ccttiot.com/bike/img/static/uDNY5Q4zOiZTCBTA2Jdq',
callout: {
content: item.parkingName,
color: '#ffffff',
fontSize: 14,
borderRadius: 10,
bgColor: item.type == 1 ? '#3A7EDB' : item.type == 2 ? '#FFC107' :
'#FF473E',
padding: 6,
display: 'ALWAYS'
},
isCalloutVisible: true // 添加标记
});
});
this.$set(this, 'markers', [...this.markers, ...newMarkers]);
} else {
// 过滤掉所有气泡显示的标记
this.$set(this, 'markers', this.markers.filter(marker => !marker.isCalloutVisible));
}
},
getArea() {
// this.$u.get("/app/area/" + this.orderInfo.areaId).then((res) => {
this.$u.get("/app/area/" + this.orderInfo.areaId).then((res) => {
if (res.code == 200) {
this.areaInfo = res.data
const polylines = this.convertBoundaryToPolyline(res.data.boundaryStr)
// 更新折线数据
this.polygons.push(polylines)
this.getParking()
console.log(this.polygons, 'polylinespolylines');
} else {
// uni.showToast({
// title: res.msg,
// icon: 'none',
// duration: 2000
// });
}
});
// 发送请求获取数据
},
status() {
if (this.orderInfo != '') {
if (this.orderInfo.status == 0) {
return '预约中'
} else if (this.orderInfo.status == 1) {
return '取消预约'
} else if (this.orderInfo.status == 2) {
return '开始骑行'
} else if (this.orderInfo.status == 3) {
return '骑行结束'
} else if (this.orderInfo.status == 4) {
return '订单完成'
}
}
},
getOrderDetail() {
uni.showLoading({});
this.$u.get('/appVerify/order/' + this.orderId).then((res) => {
if (res.code === 200) {
this.orderInfo = res.data;
this.loading = true;
this.getArea();
// if (res.data.tripRouteStr) {
// let abb;
// try {
// abb = JSON.parse(res.data.tripRouteStr);
// } catch (error) {
// console.error("Error parsing tripRouteStr:", error);
// return;
// }
// if (abb.length > 2) {
// this.latitude = parseFloat(abb[0][1]);
// this.longitude = parseFloat(abb[0][0]);
// this.polyline[0].points = abb.map(coord => ({
// latitude: coord[1],
// longitude: coord[0]
// }));
// this.markers.push({
// id: 0,
// latitude: abb[0][1],
// longitude: abb[0][0],
// width: 25,
// height: 38,
// iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u06paUGiHLvL08Pw7BGr'
// }, {
// id: 1,
// latitude: abb[abb.length - 1][1],
// longitude: abb[abb.length - 1][0],
// width: 25,
// height: 38,
// iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/uwpAj9vYtPRmhtTOtflx'
// }, {
// id: 3,
// latitude: abb[0][1],
// longitude: abb[0][0],
// width: 40,
// height: 28,
// iconPath: 'https://api.ccttiot.com/smartmeter/img/static/uF9qLejuAZErNTrRuHq7'
// });
// // Start the track playback
// this.translateMarkerFun(abb);
// } else {
// this.latitude = parseFloat(abb[0][1]);
// this.longitude = parseFloat(abb[0][0]);
// }
// }
this.getpolyline()
uni.hideLoading();
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
getpolyline() {
this.$u.post("/system/device/trajectoryByOrderNo?orderNo=" + this.orderId).then((res) => {
if (res.code === 200) {
this.polyline[0].points = JSON.parse(res.data).map(coord => ({
latitude: coord[1],
longitude: coord[0]
}));
let abb;
try {
abb = JSON.parse(res.data);
console.log(abb, 'abbbb');
} catch (error) {
console.error("Error parsing tripRouteStr:", error);
return;
}
if (abb.length > 2) {
this.latitude = parseFloat(abb[0][1]);
this.longitude = parseFloat(abb[0][0]);
this.polyline[0].points = abb.map(coord => ({
latitude: coord[1],
longitude: coord[0]
}));
this.markers.push({
id: 0,
latitude: abb[0][1],
longitude: abb[0][0],
width: 25,
height: 38,
iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u06paUGiHLvL08Pw7BGr'
}, {
id: 1,
latitude: abb[abb.length - 1][1],
longitude: abb[abb.length - 1][0],
width: 25,
height: 38,
iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/uwpAj9vYtPRmhtTOtflx'
});
}
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
translateMarkerFun(path) {
let abb = JSON.parse(this.orderInfo.tripRouteStr);
// console.log(abb,'abb');
let formattedPath = path.map(coord => ({
latitude: parseFloat(coord[1]),
longitude: parseFloat(coord[0])
}));
// console.log(path,'path');
// let totalDistance = this.calculateTotalDistance(path);
let baseSpeed = 300; // 设置一个基础速度,单位为距离每秒移动的像素数
// let duration = totalDistance > 0 ? totalDistance * baseSpeed : 60000; // 根据路径长度动态计算持续时间
let duration = abb.length * 300;
// console.log(duration,'durationduration',totalDistance);
this._mapContext.includePoints({
points: formattedPath,
padding: [50, 50, 50, 50],
});
this._mapContext.moveAlong({
markerId: 3,
path: formattedPath,
autoRotate: true,
duration: duration,
iconPath: 'https://api.ccttiot.com/smartmeter/img/static/uF9qLejuAZErNTrRuHq7', // 回放标记图片
});
this.$forceUpdate();
}
}
}
</script>
<style lang="scss">
page {
background-color: #F7FAFE;
}
.page {
width: 750rpx;
.kefu {
position: fixed;
right: 30rpx;
bottom: 500rpx;
width: 82rpx;
height: 82rpx;
}
.kfbox {
padding: 48rpx 30rpx;
position: fixed;
left: 82rpx;
top: 410rpx;
width: 590rpx;
// height: 282rpx;
background: #FFFFFF;
border-radius: 30rpx 30rpx 30rpx 30rpx;
z-index: 110;
display: flex;
justify-content: center;
flex-wrap: wrap;
.close {
position: relative;
bottom: -124rpx;
width: 60rpx;
height: 60rpx;
}
.phone_box {
margin-top: 32rpx;
width: 528rpx;
height: 144rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.1);
border-radius: 20rpx 20rpx 20rpx 20rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.img {
width: 86rpx;
height: 86rpx;
image {
width: 86rpx;
height: 86rpx;
}
}
.info {
display: flex;
flex-wrap: wrap;
margin-left: 34rpx;
.name {
width: 100%;
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
}
.phone {
width: 100%;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
}
}
}
.tit {
font-weight: 600;
font-size: 40rpx;
color: #3D3D3D;
}
.words {
margin-bottom: 42rpx;
margin-top: 16rpx;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
}
.map {
width: 750rpx;
height: 100vh;
}
.park {
position: fixed;
display: flex;
align-items: center;
justify-content: center;
right: 30rpx;
bottom: 650rpx;
// background-color: #fff;
border-radius: 50%;
width: 82rpx;
height: 82rpx;
z-index: 10;
.img {
width: 82rpx;
height: 82rpx;
}
}
.bot {
display: flex;
flex-wrap: wrap;
justify-content: center;
padding: 26rpx 34rpx 48rpx 34rpx;
position: fixed;
bottom: 0;
width: 750rpx;
// height: 420rpx;
background: #F7F7F7;
border-radius: 30rpx;
.kefus{
padding: 18rpx 38rpx;
margin-top: 20rpx;
width: 708rpx;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.txt{
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
}
.btn1{
margin-top: 26rpx;
display: flex;
align-items: center;
justify-content: center;
width: 626rpx;
height: 88rpx;
background: #64B6A7;
border-radius: 14rpx 14rpx 14rpx 14rpx;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
}
}
.paybtn {
display: flex;
align-items: center;
justify-content: center;
margin-top: 30rpx;
border-radius: 20rpx;
width: 100%;
height: 90rpx;
background: #64B6A7;
font-weight: 500;
font-size: 40rpx;
color: #FFFFFF;
}
.card {
width: 708rpx;
// height: 320rpx;
background: #FFFFFF;
border-radius: 32rpx 32rpx 32rpx 32rpx;
.top {
padding: 26rpx 38rpx;
.topcont {
display: flex;
flex-wrap: nowrap;
justify-content: center;
justify-content: space-between;
.left {
font-weight: 500;
font-size: 36rpx;
color: #3D3D3D;
}
.right {
font-weight: 400;
font-size: 26rpx;
color: #808080;
}
}
.info {
margin-top: 16rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.type {
display: flex;
align-items: center;
justify-content: center;
width: 112rpx;
height: 42rpx;
background: linear-gradient(90deg, #64B6A7 0%, #64B6A7 50%, #5A9D93 100%);
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
}
.data {
margin-left: 15rpx;
font-weight: 400;
font-size: 20rpx;
color: #3D3D3D;
}
}
}
.bottom {
// padding-top: 10rpx;
display: flex;
align-items: center;
justify-content: center;
border-top: 2rpx solid #EFEFEF;
width: 100%;
height: 80rpx;
.text {
font-weight: 400;
font-size: 24rpx;
color: #3D3D3D;
}
}
}
}
.bot_btn {
padding: 26rpx 34rpx 48rpx 34rpx;
position: fixed;
// display: flex;
// flex-wrap: wrap;
// justify-content: center;
bottom: 0;
width: 750rpx;
height: 420rpx;
background: #FFFFFF;
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
border-radius: 30rpx;
.time {
// height: 88rpx;
width: 100%;
text-align: center;
padding-bottom: 24rpx;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
border-bottom: 2rpx solid #EFEFEF;
}
.price {
margin-top: 22rpx;
width: 100%;
text-align: center;
font-weight: 500;
font-size: 72rpx;
color: #3D3D3D;
span {
font-size: 28rpx;
font-weight: 500;
}
}
.toinfo {
// margin-top: 12rpx;
width: 100%;
text-align: center;
font-weight: 400;
font-size: 24rpx;
color: #3D3D3D;
}
.btn {
margin-top: 34rpx;
display: flex;
align-items: center;
justify-content: center;
width: 680rpx;
height: 90rpx;
background: #4C97E7;
border-radius: 54rpx 54rpx 54rpx 54rpx;
font-weight: 500;
font-size: 40rpx;
color: #FFFFFF;
}
}
}
</style>