2024-05-09 17:05:51 +08:00
|
|
|
|
<template>
|
2024-05-13 18:03:20 +08:00
|
|
|
|
<view class="page" v-if="loading">
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<u-navbar title="订单详情" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36'
|
2024-06-07 18:08:55 +08:00
|
|
|
|
height='45'></u-navbar>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<map class="map" id="map" ref="map" :scale="zoomSize" :latitude="latitude" :longitude="longitude"
|
2024-06-25 18:02:39 +08:00
|
|
|
|
:show-location='true' :markers="markers" :polygons="polygons" :polyline="polyline">
|
|
|
|
|
<cover-view class="park" @click="toggleIconAndCallout">
|
|
|
|
|
<cover-image class="img" src="https://lxnapi.ccttiot.com/bike/img/static/uRiYQZQEb3l2LsltEsyW"
|
|
|
|
|
mode=""></cover-image>
|
|
|
|
|
</cover-view>
|
|
|
|
|
</map>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<view class="info_card">
|
|
|
|
|
<view class="info_tit">
|
|
|
|
|
基本信息
|
|
|
|
|
</view>
|
|
|
|
|
<view class="lines"></view>
|
|
|
|
|
<view class="cont">
|
|
|
|
|
<view class="info_li">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
订单编号:<span>{{orderInfo.orderNo}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
2024-06-24 17:59:49 +08:00
|
|
|
|
<!-- <view class="info_li">
|
|
|
|
|
|
|
|
|
|
</view> -->
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<view class="info_li">
|
2024-06-24 17:59:49 +08:00
|
|
|
|
<view class="half_infoli " @click="callPhone">
|
|
|
|
|
租赁用户:<span style="color:#4C97E7 ;">{{orderInfo.phonenumber}}</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="half_infoli">
|
|
|
|
|
用户姓名:<span v-if="orderInfo.realName">{{orderInfo.realName}}</span>
|
|
|
|
|
<span v-else>--</span>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
|
|
|
|
订单状态:<span>{{status()}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
|
|
|
|
<view class="half_infoli">
|
2024-06-21 18:03:21 +08:00
|
|
|
|
租赁时长:<span>{{ computedList(orderInfo)}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="half_infoli">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
行驶距离:<span>{{orderInfo.distance/1000}}Km</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2024-06-25 18:02:39 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_card" style="margin-top: 20rpx;">
|
|
|
|
|
<view class="info_tit">
|
|
|
|
|
设备信息
|
|
|
|
|
</view>
|
|
|
|
|
<view class="lines"></view>
|
|
|
|
|
<view class="cont">
|
|
|
|
|
|
|
|
|
|
<view class="info_li">
|
|
|
|
|
<view class="half_infoli">
|
2024-06-21 18:03:21 +08:00
|
|
|
|
车牌号:
|
|
|
|
|
<span v-if="orderInfo.device.vehicleNum">{{orderInfo.device.vehicleNum}}</span>
|
|
|
|
|
<span v-else>--</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="half_infoli">
|
2024-06-21 18:03:21 +08:00
|
|
|
|
SN:
|
|
|
|
|
<span v-if="orderInfo.device.sn">{{orderInfo.device.sn}}</span>
|
|
|
|
|
<span v-else>--</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
<!-- <view class="half_infoli">
|
|
|
|
|
车辆编号:<span>{{orderInfo.device.areaName}}</span>
|
|
|
|
|
</view> -->
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<view class="half_infoli">
|
2024-06-27 18:04:37 +08:00
|
|
|
|
运营区域:
|
2024-06-21 18:03:21 +08:00
|
|
|
|
<span v-if="orderInfo.area">{{orderInfo.area}}</span>
|
|
|
|
|
<span v-else>--</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<view class="info_card" style="margin-top: 20rpx;">
|
|
|
|
|
<view class="info_tit">
|
2024-06-20 18:08:54 +08:00
|
|
|
|
行程记录
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="lines"></view>
|
|
|
|
|
<view class="cont">
|
2024-06-20 18:08:54 +08:00
|
|
|
|
<view v-for="(item,index) in orderInfo.tripLogs" :key="index">
|
|
|
|
|
<view class="info_lis" v-if="item.type==1">
|
2024-05-15 18:02:17 +08:00
|
|
|
|
开锁时间:<view class="text">{{item.createTime}}</view>
|
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
<view class="info_lis" v-if="item.type==1">
|
2024-05-15 18:02:17 +08:00
|
|
|
|
开锁地点:<view class="text"> {{item.address}}</view>
|
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
<view class="info_lis" v-if="item.type==2">
|
2024-05-15 18:02:17 +08:00
|
|
|
|
临时锁车时间:<view class="text">{{item.createTime}}</view>
|
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
<view class="info_lis" v-if="item.type==2">
|
2024-05-15 18:02:17 +08:00
|
|
|
|
临时锁车地点:<view class="text">{{item.address}}</view>
|
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
<view class="info_lis" v-if="item.type==3">
|
2024-05-15 18:02:17 +08:00
|
|
|
|
解除时间:<view class="text">{{item.createTime}}</view>
|
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
|
|
|
|
<view class="info_lis" v-if="item.type==4">
|
2024-05-15 18:02:17 +08:00
|
|
|
|
关锁时间:<view class="text">{{item.createTime}}</view>
|
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
<view class="info_lis" v-if="item.type==4">
|
2024-05-15 18:02:17 +08:00
|
|
|
|
关锁地点:<view class="text">{{item.address}}</view>
|
|
|
|
|
</view>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
<!-- <view class="info_li">
|
2024-05-09 17:05:51 +08:00
|
|
|
|
锁车时间:<span>120.56189,27.12379</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
|
|
|
|
锁车地点:<span>120.56189,27.12379</span>
|
2024-05-13 18:03:20 +08:00
|
|
|
|
</view> -->
|
|
|
|
|
<!-- <view class="info_li">
|
2024-05-09 17:05:51 +08:00
|
|
|
|
解除时间:<span>120.56189,27.12379</span>
|
2024-05-13 18:03:20 +08:00
|
|
|
|
</view> -->
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_card" style="margin-top: 20rpx;">
|
|
|
|
|
<view class="info_tit">
|
|
|
|
|
费用明细
|
2024-06-20 18:08:54 +08:00
|
|
|
|
<view class="money">
|
2024-05-13 23:34:28 +08:00
|
|
|
|
结算总费用:¥{{orderInfo.settlementFee}}
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="lines"></view>
|
|
|
|
|
<view class="cont">
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<view class="info_li">
|
|
|
|
|
<view class="half_infoli">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
预约费用:<span>{{orderInfo.appointmentFee}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="half_infoli">
|
2024-06-27 18:04:37 +08:00
|
|
|
|
运营区外调度费:<span>{{orderInfo.dispatchFee}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
|
|
|
|
<view class="half_infoli">
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
|
|
|
|
停车点外调度费:<span>{{orderInfo.manageFee}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="half_infoli">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
骑行费用:<span>{{orderInfo.ridingFee}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
实收:<span>{{orderInfo.totalFee}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
支付方式:<span>微信支付</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
2024-06-27 18:04:37 +08:00
|
|
|
|
<view class="info_li" v-if="orderInfo.rule" style="display: inline-block;">
|
2024-05-13 18:03:20 +08:00
|
|
|
|
计费模板:<span>{{orderInfo.rule.name}}</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li" v-if="orderInfo.payTime">
|
|
|
|
|
支付时间:<span>{{orderInfo.payTime}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="lines"></view>
|
2024-05-31 17:54:23 +08:00
|
|
|
|
<view class="cont" v-if="orderInfo.etRefund">
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
<view class="info_li">
|
|
|
|
|
<view class="half_infoli">
|
2024-05-13 23:34:28 +08:00
|
|
|
|
预约费退款:<span>{{orderInfo.etRefund.appointmentFee}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="half_infoli">
|
2024-05-13 23:34:28 +08:00
|
|
|
|
调度费退款:<span>{{orderInfo.etRefund.dispatchFee}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
2024-05-13 23:34:28 +08:00
|
|
|
|
<view class="half_infoli">
|
|
|
|
|
骑行费退款:<span>{{orderInfo.etRefund.ridingFee}}</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="half_infoli">
|
2024-06-20 18:08:54 +08:00
|
|
|
|
管理费退款:<span>{{orderInfo.etRefund.manageFee}}</span>
|
2024-05-13 23:34:28 +08:00
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
2024-06-27 18:04:37 +08:00
|
|
|
|
退款原因:<span v-if="orderInfo.etRefund.reason">{{orderInfo.etRefund.reason}}</span>
|
|
|
|
|
<span v-else>--</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="info_li">
|
2024-05-13 23:34:28 +08:00
|
|
|
|
退款时间:<span>{{orderInfo.etRefund.createTime}}</span>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2024-06-21 18:03:21 +08:00
|
|
|
|
<view class="bot" v-if='orderInfo.paid==1'>
|
2024-06-27 18:04:37 +08:00
|
|
|
|
<view class="btn" @click="backfee">
|
2024-05-09 17:05:51 +08:00
|
|
|
|
退款
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2024-06-27 18:04:37 +08:00
|
|
|
|
<u-mask :show="show" @click="show = false" :z-index='100' />
|
|
|
|
|
<view class="tip_box" v-if="showtk">
|
|
|
|
|
<view class="top" v-if="showtk">
|
|
|
|
|
<view class="tip">
|
|
|
|
|
退款
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="ipt_box">
|
|
|
|
|
<view class="text">
|
|
|
|
|
运营区外调度费
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt">
|
|
|
|
|
<input type="text" v-model="orderInfo.dispatchFee" placeholder="0.00" class="input"
|
|
|
|
|
placeholder-style="color:#C7CDD3" @input="checkAndUpdate('dispatchFee')">
|
|
|
|
|
元
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt_box">
|
|
|
|
|
<view class="text">
|
|
|
|
|
停车点外调度费
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt">
|
|
|
|
|
<input type="text" v-model="orderInfo.manageFee" placeholder="0.00" class="input"
|
|
|
|
|
placeholder-style="color:#C7CDD3" @input="checkAndUpdate('manageFee')">
|
|
|
|
|
元
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt_box">
|
|
|
|
|
<view class="text">
|
|
|
|
|
骑行费
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt">
|
|
|
|
|
<input type="text" v-model="orderInfo.ridingFee" placeholder="0.00" class="input"
|
|
|
|
|
placeholder-style="color:#C7CDD3" @input="checkAndUpdate('ridingFee')">
|
|
|
|
|
元
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt_box">
|
|
|
|
|
<view class="text">
|
|
|
|
|
预约费
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt">
|
|
|
|
|
<input type="text" v-model="orderInfo.appointmentFee" placeholder="0.00" class="input"
|
|
|
|
|
placeholder-style="color:#C7CDD3" @input="checkAndUpdate('appointmentFee')">
|
|
|
|
|
元
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt_box">
|
|
|
|
|
<view class="text">
|
|
|
|
|
原因
|
|
|
|
|
</view>
|
|
|
|
|
<view class="ipt">
|
|
|
|
|
<input type="text" v-model="orderInfo.reason" placeholder="选填" class="input"
|
|
|
|
|
placeholder-style="color:#C7CDD3" @input="checkAndUpdate('reason')">
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="bots">
|
|
|
|
|
<view class="bot_left" @click="closetk()">
|
|
|
|
|
取消
|
|
|
|
|
</view>
|
|
|
|
|
<view class="bot_right" @click="backMoney()">
|
|
|
|
|
确定
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2024-05-09 17:05:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
export default {
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
bgc: {
|
|
|
|
|
backgroundColor: "#F7FAFE",
|
|
|
|
|
},
|
2024-05-31 17:54:23 +08:00
|
|
|
|
latitude: 0,
|
|
|
|
|
longitude: 0,
|
2024-05-09 17:05:51 +08:00
|
|
|
|
isMap: false,
|
|
|
|
|
zoomSize: 15,
|
2024-05-13 18:03:20 +08:00
|
|
|
|
markers: [],
|
2024-05-15 18:02:17 +08:00
|
|
|
|
polyline: [{
|
|
|
|
|
points: [],
|
2024-06-20 18:08:54 +08:00
|
|
|
|
width: 8,
|
|
|
|
|
arrowLine: true,
|
|
|
|
|
color: '#00AF99'
|
2024-06-25 18:02:39 +08:00
|
|
|
|
// strokeWidth: 2,
|
|
|
|
|
// strokeColor: '#00AF99',
|
|
|
|
|
// fillColor: '#00AF99'
|
2024-05-15 18:02:17 +08:00
|
|
|
|
}, ],
|
2024-05-13 18:03:20 +08:00
|
|
|
|
polygons: [],
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
cardId: '001区域',
|
2024-06-20 18:08:54 +08:00
|
|
|
|
orderId: '',
|
|
|
|
|
orderInfo: {},
|
|
|
|
|
loading: false,
|
2024-06-21 18:03:21 +08:00
|
|
|
|
showtk: false,
|
2024-06-27 18:04:37 +08:00
|
|
|
|
show:false
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
|
|
|
|
|
}
|
2024-05-13 18:03:20 +08:00
|
|
|
|
},
|
|
|
|
|
onLoad(e) {
|
2024-06-20 18:08:54 +08:00
|
|
|
|
this.orderId = e.id
|
2024-05-13 18:03:20 +08:00
|
|
|
|
this.getOrderDetail()
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
|
|
|
|
// this.getParking()
|
2024-05-13 18:03:20 +08:00
|
|
|
|
},
|
2024-06-20 18:08:54 +08:00
|
|
|
|
components: {
|
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
},
|
|
|
|
|
methods: {
|
2024-06-27 18:04:37 +08:00
|
|
|
|
backfee(){
|
|
|
|
|
this.show = true
|
|
|
|
|
this.showtk = true
|
|
|
|
|
},
|
|
|
|
|
closetk() {
|
|
|
|
|
this.show = false
|
|
|
|
|
this.showtk = false
|
|
|
|
|
// this.orderInfo = {}
|
|
|
|
|
},
|
2024-06-25 18:02:39 +08:00
|
|
|
|
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));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
callPhone() {
|
2024-06-24 17:59:49 +08:00
|
|
|
|
uni.makePhoneCall({
|
2024-06-25 18:02:39 +08:00
|
|
|
|
phoneNumber: this.orderInfo.phonenumber
|
2024-06-24 17:59:49 +08:00
|
|
|
|
})
|
|
|
|
|
},
|
2024-06-21 18:03:21 +08:00
|
|
|
|
computedList(item) {
|
2024-06-25 18:02:39 +08:00
|
|
|
|
if (item.status == 0 || item.status == 2) {
|
2024-06-24 17:59:49 +08:00
|
|
|
|
const createTime = new Date(item.createTime);
|
2024-06-25 18:02:39 +08:00
|
|
|
|
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;
|
|
|
|
|
|
2024-06-24 17:59:49 +08:00
|
|
|
|
}
|
2024-06-25 18:02:39 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
},
|
2024-05-13 18:03:20 +08:00
|
|
|
|
convertBoundaryToPolyline(boundary) {
|
|
|
|
|
if (!boundary) return null;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
const points = JSON.parse(boundary).map(coord => ({
|
|
|
|
|
latitude: coord[1],
|
|
|
|
|
longitude: coord[0]
|
|
|
|
|
}));
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
const polyline = {
|
|
|
|
|
points: points,
|
|
|
|
|
fillColor: "#55888840", //填充颜色
|
|
|
|
|
strokeColor: "#22FF00", //描边颜色
|
|
|
|
|
strokeWidth: 2, //描边宽度
|
|
|
|
|
zIndex: 1, //层级
|
|
|
|
|
};
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
return polyline;
|
|
|
|
|
},
|
2024-06-25 18:02:39 +08:00
|
|
|
|
|
2024-06-20 18:08:54 +08:00
|
|
|
|
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 {
|
2024-05-15 18:02:17 +08:00
|
|
|
|
points: points,
|
2024-06-20 18:08:54 +08:00
|
|
|
|
fillColor: "#FFD1CF40", //填充颜色
|
|
|
|
|
strokeColor: "#FF473E", //描边颜色
|
|
|
|
|
strokeWidth: 2, //描边宽度
|
|
|
|
|
zIndex: 1, //层级
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
}).filter(polyline => polyline !== null); // 过滤掉无效的折线数据
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
},
|
|
|
|
|
getParking() {
|
|
|
|
|
// 发送请求获取数据
|
2024-06-25 18:02:39 +08:00
|
|
|
|
|
|
|
|
|
let data = {
|
|
|
|
|
areaId: this.orderInfo.areaId
|
|
|
|
|
}
|
|
|
|
|
this.$u.get('/app/parking/list?', data).then((res) => {
|
2024-05-13 18:03:20 +08:00
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
// 处理接口返回的数据
|
2024-06-20 18:08:54 +08:00
|
|
|
|
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 =>
|
2024-05-13 18:03:20 +08:00
|
|
|
|
typeof boundary === 'string' && boundary.trim() !== '');
|
2024-06-20 18:08:54 +08:00
|
|
|
|
const polylines2 = this.convertBoundaryToPolylines(validBoundaries2, 3);
|
2024-05-13 18:03:20 +08:00
|
|
|
|
// 将处理后的数据添加到 this.polyline 中
|
2024-06-20 18:08:54 +08:00
|
|
|
|
this.polygons = this.polygons.concat(polylines2);
|
|
|
|
|
this.polygons = this.polygons.concat(polylines1);
|
2024-05-15 18:02:17 +08:00
|
|
|
|
this.polygons = this.polygons.concat(polylines);
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
// console.log(this.polyline);
|
2024-06-25 18:02:39 +08:00
|
|
|
|
this.parkingList = res.rows
|
2024-05-13 18:03:20 +08:00
|
|
|
|
}
|
|
|
|
|
}).catch(error => {
|
|
|
|
|
console.error("Error fetching parking data:", error);
|
|
|
|
|
});
|
|
|
|
|
},
|
2024-06-25 18:02:39 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
getArea() {
|
|
|
|
|
// 发送请求获取数据
|
2024-06-25 18:02:39 +08:00
|
|
|
|
let id = this.orderInfo.areaId
|
|
|
|
|
this.$u.get("/app/area/" + id).then((res) => {
|
2024-05-13 18:03:20 +08:00
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
2024-06-25 18:02:39 +08:00
|
|
|
|
const polylines = this.convertBoundaryToPolyline(res.data.boundaryStr)
|
2024-05-13 18:03:20 +08:00
|
|
|
|
// 更新折线数据
|
2024-06-25 18:02:39 +08:00
|
|
|
|
this.polygons.push(polylines)
|
2024-06-20 18:08:54 +08:00
|
|
|
|
this.getParking()
|
2024-05-13 18:03:20 +08:00
|
|
|
|
// console.log(this.polyline);
|
|
|
|
|
}
|
|
|
|
|
}).catch(error => {
|
|
|
|
|
console.error("Error fetching area data:", error);
|
|
|
|
|
});
|
|
|
|
|
},
|
2024-06-20 18:08:54 +08:00
|
|
|
|
status() {
|
|
|
|
|
if (this.orderInfo != '') {
|
|
|
|
|
if (this.orderInfo.status == 0) {
|
2024-05-13 18:03:20 +08:00
|
|
|
|
return '预约中'
|
2024-06-20 18:08:54 +08:00
|
|
|
|
} else if (this.orderInfo.status == 1) {
|
2024-05-13 18:03:20 +08:00
|
|
|
|
return '取消预约'
|
2024-06-20 18:08:54 +08:00
|
|
|
|
} else if (this.orderInfo.status == 2) {
|
2024-06-24 17:59:49 +08:00
|
|
|
|
return '骑行中'
|
2024-06-20 18:08:54 +08:00
|
|
|
|
} else if (this.orderInfo.status == 3) {
|
2024-05-13 18:03:20 +08:00
|
|
|
|
return '骑行结束'
|
2024-06-20 18:08:54 +08:00
|
|
|
|
} else if (this.orderInfo.status == 4) {
|
2024-05-13 18:03:20 +08:00
|
|
|
|
return '订单完成'
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-13 18:03:20 +08:00
|
|
|
|
},
|
2024-06-27 18:04:37 +08:00
|
|
|
|
backMoney() {
|
|
|
|
|
let data = {
|
|
|
|
|
orderNo: this.orderInfo.orderNo,
|
|
|
|
|
dispatchFee: this.orderInfo.dispatchFee,
|
|
|
|
|
manageFee: this.orderInfo.manageFee,
|
|
|
|
|
ridingFee: this.orderInfo.ridingFee,
|
|
|
|
|
appointmentFee: this.orderInfo.appointmentFee,
|
|
|
|
|
reason: this.orderInfo.reason
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.$u.put('/appVerify/order/refund', data).then((res) => {
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
|
|
|
|
this.show = false
|
|
|
|
|
|
|
|
|
|
this.showtk = false
|
|
|
|
|
this.getOrderDetail()
|
|
|
|
|
} else {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}).catch(error => {
|
|
|
|
|
console.error("Error fetching area data:", error);
|
|
|
|
|
});
|
|
|
|
|
},
|
2024-06-20 18:08:54 +08:00
|
|
|
|
getOrderDetail() {
|
|
|
|
|
this.$u.get('/appVerify/order/' + this.orderId).then((res) => {
|
2024-05-13 18:03:20 +08:00
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
2024-06-20 18:08:54 +08:00
|
|
|
|
this.orderInfo = res.data
|
2024-06-25 18:02:39 +08:00
|
|
|
|
this.getArea()
|
|
|
|
|
|
2024-06-20 18:08:54 +08:00
|
|
|
|
this.loading = true
|
|
|
|
|
this.latitude = parseFloat(this.orderInfo.latitude)
|
|
|
|
|
this.longitude = parseFloat(this.orderInfo.longitude)
|
|
|
|
|
this.polyline[0].points = JSON.parse(res.data.tripRouteStr).map(coord => ({
|
|
|
|
|
latitude: coord[1],
|
|
|
|
|
longitude: coord[0]
|
|
|
|
|
}));
|
|
|
|
|
let abb;
|
|
|
|
|
try {
|
2024-06-25 18:02:39 +08:00
|
|
|
|
abb = JSON.parse(res.data.tripRouteStr);
|
2024-06-20 18:08:54 +08:00
|
|
|
|
} catch (error) {
|
2024-06-25 18:02:39 +08:00
|
|
|
|
console.error("Error parsing tripRouteStr:", error);
|
|
|
|
|
return;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
}
|
|
|
|
|
if (abb.length > 2) {
|
2024-06-25 18:02:39 +08:00
|
|
|
|
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'
|
|
|
|
|
});
|
2024-06-20 18:08:54 +08:00
|
|
|
|
}
|
2024-05-13 18:03:20 +08:00
|
|
|
|
}
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-15 18:02:17 +08:00
|
|
|
|
// console.log(points,'');
|
|
|
|
|
// this.polyline[0].points=points
|
2024-05-13 18:03:20 +08:00
|
|
|
|
}).catch(error => {
|
|
|
|
|
console.error("Error fetching area data:", error);
|
|
|
|
|
});
|
|
|
|
|
}
|
2024-05-09 17:05:51 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
|
|
|
page {
|
2024-05-15 18:02:17 +08:00
|
|
|
|
overflow-x: hidden;
|
2024-05-09 17:05:51 +08:00
|
|
|
|
background-color: #F3F3F3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.page {
|
|
|
|
|
padding-bottom: 200rpx;
|
|
|
|
|
width: 750rpx;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.tip_box {
|
|
|
|
|
position: fixed;
|
|
|
|
|
left: 72rpx;
|
|
|
|
|
top: 628rpx;
|
|
|
|
|
width: 610rpx;
|
|
|
|
|
// height: 282rpx;
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
border-radius: 30rpx 30rpx 30rpx 30rpx;
|
|
|
|
|
z-index: 110;
|
|
|
|
|
padding-bottom: 100rpx;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.top {
|
|
|
|
|
padding: 52rpx 38rpx 42rpx 36rpx;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.ipt_box {
|
|
|
|
|
margin-top: 22rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
align-items: center;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.text {
|
2024-06-27 18:04:37 +08:00
|
|
|
|
width: 350rpx;
|
2024-06-21 18:03:21 +08:00
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.ipt {
|
|
|
|
|
padding: 10rpx 18rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
margin-left: 26rpx;
|
|
|
|
|
width: 420rpx;
|
|
|
|
|
height: 64rpx;
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
|
|
|
border: 2rpx solid #979797;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.input {
|
|
|
|
|
width: 80%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.tip {
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.txt {
|
|
|
|
|
margin-top: 32rpx;
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
|
|
|
|
.bots {
|
2024-06-21 18:03:21 +08:00
|
|
|
|
position: absolute;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
width: 610rpx;
|
|
|
|
|
// border-top: 2rpx solid #D8D8D8;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
// height: 100%;
|
|
|
|
|
bottom: -20rpx;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.bot_left {
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 30rpx;
|
|
|
|
|
width: 50%;
|
|
|
|
|
height: 86rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
background: #EEEEEE;
|
|
|
|
|
}
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
.bot_right {
|
|
|
|
|
border-radius: 0rpx 0rpx 30rpx 0rpx;
|
|
|
|
|
width: 50%;
|
|
|
|
|
height: 86rpx;
|
|
|
|
|
background: #4C97E7;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
// border-left: 2rpx solid #D8D8D8;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
// color: #4C97E7;
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
}
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
2024-06-21 18:03:21 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-27 18:04:37 +08:00
|
|
|
|
|
|
|
|
|
|
2024-06-25 18:02:39 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
.map {
|
2024-06-25 18:02:39 +08:00
|
|
|
|
position: relative;
|
2024-05-09 17:05:51 +08:00
|
|
|
|
width: 750rpx;
|
|
|
|
|
height: 752rpx;
|
2024-06-25 18:02:39 +08:00
|
|
|
|
.park {
|
|
|
|
|
position: absolute;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
right: 30rpx;
|
|
|
|
|
bottom: 40rpx;
|
|
|
|
|
// background-color: #fff;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
width: 82rpx;
|
|
|
|
|
height: 82rpx;
|
|
|
|
|
z-index: 10;
|
|
|
|
|
|
|
|
|
|
.img {
|
|
|
|
|
width: 82rpx;
|
|
|
|
|
height: 82rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-05-09 17:05:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info_card {
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
|
|
|
|
.info_tit {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
padding: 22rpx 28rpx;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #3D3D3D;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
|
|
|
|
.money {
|
2024-05-09 17:05:51 +08:00
|
|
|
|
margin-left: auto;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #4C97E7;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.lines {
|
|
|
|
|
width: 750rpx;
|
|
|
|
|
height: 2rpx;
|
|
|
|
|
border: 2rpx solid #ccc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cont {
|
|
|
|
|
padding: 26rpx 28rpx;
|
|
|
|
|
|
|
|
|
|
.info_li {
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: #808080;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
|
|
|
|
.text {
|
2024-05-15 18:02:17 +08:00
|
|
|
|
width: 70%;
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
/* 禁止换行 */
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
/* 超出部分隐藏 */
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
}
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
span {
|
|
|
|
|
color: #3D3D3D;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
line-height: 48rpx;
|
|
|
|
|
|
|
|
|
|
.half_infoli {
|
|
|
|
|
width: 50%;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: #808080;
|
|
|
|
|
|
2024-05-15 18:02:17 +08:00
|
|
|
|
span {
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-15 18:02:17 +08:00
|
|
|
|
.info_lis {
|
2024-06-24 17:59:49 +08:00
|
|
|
|
width: 90%;
|
2024-05-15 18:02:17 +08:00
|
|
|
|
display: inline-block;
|
|
|
|
|
// flex-wrap: nowrap;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: #808080;
|
2024-06-24 17:59:49 +08:00
|
|
|
|
white-space: nowrap;
|
|
|
|
|
/* 禁止换行 */
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
/* 超出部分隐藏 */
|
|
|
|
|
text-overflow: ellipsis;
|
2024-06-25 18:02:39 +08:00
|
|
|
|
|
2024-06-20 18:08:54 +08:00
|
|
|
|
.text {
|
2024-05-15 18:02:17 +08:00
|
|
|
|
display: inline;
|
|
|
|
|
// width: 70%;
|
|
|
|
|
// white-space: nowrap;
|
|
|
|
|
// /* 禁止换行 */
|
|
|
|
|
// overflow: hidden;
|
|
|
|
|
// /* 超出部分隐藏 */
|
|
|
|
|
// text-overflow: ellipsis;
|
|
|
|
|
}
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-15 18:02:17 +08:00
|
|
|
|
span {
|
|
|
|
|
color: #3D3D3D;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-15 18:02:17 +08:00
|
|
|
|
}
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-15 18:02:17 +08:00
|
|
|
|
line-height: 48rpx;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-15 18:02:17 +08:00
|
|
|
|
.half_infoli {
|
|
|
|
|
width: 50%;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: #808080;
|
2024-06-20 18:08:54 +08:00
|
|
|
|
|
2024-05-09 17:05:51 +08:00
|
|
|
|
span {
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bot {
|
|
|
|
|
position: fixed;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
width: 750rpx;
|
|
|
|
|
height: 184rpx;
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08), 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
|
|
|
|
|
|
|
|
.btn {
|
|
|
|
|
margin: 46rpx auto;
|
|
|
|
|
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>
|