2025-02-06 20:53:16 +08:00
|
|
|
|
<template>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="page" style="width: 100%;height: 90vh;overflow: scroll;">
|
2025-02-06 20:53:16 +08:00
|
|
|
|
<u-navbar :title="tittxt" :border-bottom="false" :background="bgc" back-icon-color="#fff" title-color='#fff'
|
|
|
|
|
:custom-back="btns" title-size='36' height='50' id="navbar">
|
|
|
|
|
</u-navbar>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<!-- 操作 -->
|
|
|
|
|
<view class="card2" style="height: 130rpx;padding-top: 28rpx;" v-if="detaobj.suitFeeType == 1 || detaobj.suitFeeType == 4">
|
|
|
|
|
<view class="" style="display: flex;box-sizing: border-box;width: 100%;
|
|
|
|
|
height: 80rpx;align-items: center;justify-content: space-between;border-radius: 20rpx;font-size: 32rpx;color: #3D3D3D;">
|
|
|
|
|
<view class="bot" style="display: flex;align-items: center;"><image style="width: 42rpx;height: 42rpx;margin-right: 10rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uHhpYbtWtakjIWbBdfkU" mode=""></image> 临时开关:{{tdtxt}}</view>
|
|
|
|
|
<view class="cont" @click="btnkq">
|
|
|
|
|
<view class="top" style="padding-top: 10rpx;">
|
|
|
|
|
<view class="rt">
|
|
|
|
|
<image v-if="tdtxt == '开启'" style="width: 160rpx;height: 80rpx;"
|
|
|
|
|
src="https://api.ccttiot.com/smartmeter/img/static/uccaWar4FDp37op7haWM " mode="aspectFit">
|
|
|
|
|
</image>
|
|
|
|
|
<image style="width: 160rpx;height: 80rpx;" v-else
|
|
|
|
|
src="https://api.ccttiot.com/smartmeter/img/static/ur9HRtZKY7YcxGewJARz" mode="aspectFit">
|
|
|
|
|
</image>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="" style="background-color: #fff;padding: 30rpx;border-radius: 20rpx;box-sizing: border-box;box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);margin-top: 30rpx;">
|
|
|
|
|
<view class="dltop">
|
|
|
|
|
<view class="dian_list">
|
|
|
|
|
<view class="">
|
|
|
|
|
{{sbobj.voltage == undefined ? '--' : sbobj.voltage}}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{sbobj.electricity == undefined ? '--' : sbobj.electricity}}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{sbobj.realTimePower == undefined ? '--' : sbobj.realTimePower}}
|
|
|
|
|
</view>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="dian_list">
|
|
|
|
|
<view class="">
|
|
|
|
|
电压(V)
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
电流(A)
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
功率(W)
|
|
|
|
|
</view>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="botwz">
|
|
|
|
|
<!-- 点击刷新实时信息 -->
|
|
|
|
|
<view @click="shuaxin(1)" style="width: 100%;display: flex;color: #fff;justify-content: center;align-items: center;padding-top:40rpx;padding-bottom: 30rpx;box-sizing: border-box;">
|
|
|
|
|
点击刷新实时信息
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="wz" v-if="onlineStatus == 0">
|
|
|
|
|
<view v-if="ver_dataflag == 1" style="color: #8883F0;">
|
|
|
|
|
<image src="https://api.ccttiot.com/smartmeter/img/static/u6akzRBuxxP94XlUcMtV" mode=""></image>
|
|
|
|
|
未连接
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view v-if="ver_dataflag == 2" style="color: #8883F0;">
|
|
|
|
|
<image src="https://api.ccttiot.com/smartmeter/img/static/u6akzRBuxxP94XlUcMtV" mode=""></image>
|
|
|
|
|
连接中
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view v-if="ver_dataflag == 3" style="color: #8883F0;">
|
|
|
|
|
<image src="https://api.ccttiot.com/smartmeter/img/static/usSHAkmok1YIdjsgRECI" mode=""></image>
|
|
|
|
|
已连接
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="time_list">
|
|
|
|
|
<view class="time_top">
|
|
|
|
|
<view class="">
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 2 || detaobj.suitFeeType == 3">{{du}}度</text>
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 1 || detaobj.suitFeeType == 4">{{formattedTime == '1秒' ? '0' : formattedTime}}</text>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="" v-if="detaobj.suitEndTime">
|
|
|
|
|
¥{{detaobj.money}}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="" v-else>
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 3 || detaobj.suitFeeType == 4">¥{{feeprice}}</text> <text
|
|
|
|
|
v-else>¥{{detaobj.suitPrice == null ? '--' : detaobj.suitPrice}}</text>
|
|
|
|
|
</view>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="time_bot" v-if="!detaobj.suitEndTime || detaobj.suitFeeType == 1">
|
|
|
|
|
<view class="">
|
|
|
|
|
<text >订单剩余</text>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 3 || detaobj.suitFeeType == 4">预估金额,以实际金额为准</text>
|
|
|
|
|
<text v-else>金额</text>
|
|
|
|
|
</view>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="price_list">
|
|
|
|
|
<view class="top_price">
|
|
|
|
|
价格明细
|
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<!-- <u-collapse>
|
|
|
|
|
<u-collapse-item title="价格明细"> -->
|
|
|
|
|
<view class="qian">
|
|
|
|
|
<view class="yajin">
|
|
|
|
|
<text v-if="detaobj.suitFeeMode == 2">押金</text>
|
|
|
|
|
<text v-else>
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 1">{{detaobj.suitTime == null ? '--' : detaobj.suitTime}}<text
|
|
|
|
|
v-if="detaobj.suitTimeUnit == 2">时</text> <text v-if="detaobj.suitTimeUnit == 3">分钟</text>
|
|
|
|
|
<text v-if="detaobj.suitTimeUnit == 4">秒</text></text>
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 2">{{detaobj.suitTime}}度</text>
|
|
|
|
|
</text>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="yuan" v-if="detaobj.suitFeeMode == 2">
|
|
|
|
|
{{detaobj.suitDeposit == null ? '--' : detaobj.suitDeposit}}元
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="yuan" v-else>
|
|
|
|
|
{{detaobj.suitPrice == null ? '--' : detaobj.suitPrice}}元
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="jisuan">
|
|
|
|
|
计价方式:<text v-if="detaobj.suitFeeType == 1">计时收费</text>
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 2">按量收费</text>
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 3">分时段按量收费</text>
|
|
|
|
|
<text v-if="detaobj.suitFeeType == 4">分时段按时收费</text>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="list_box" style="width: 100%" v-if="detaobj.suitFeeType == 3 || detaobj.suitFeeType == 4">
|
|
|
|
|
<view class="ulbox">
|
|
|
|
|
<view class="ulli">
|
|
|
|
|
<view class="li" v-for="(val,gearAmountindex) in newArr" :key="gearAmountindex">
|
|
|
|
|
{{val}}元
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="olli">
|
|
|
|
|
<view class="li" v-for="(vals,timeindex) in 24" :key="timeindex">
|
|
|
|
|
{{timeindex + ':00'}}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="" style="margin-top: 16rpx;margin-bottom: 10rpx;width: 100%;text-align: center;color: #666;font-size: 24rpx;">
|
|
|
|
|
左滑查看全部时段收费价格
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<!-- </u-collapse-item>
|
|
|
|
|
</u-collapse> -->
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view class="zujie">
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<u-collapse>
|
|
|
|
|
<u-collapse-item title="订单信息">
|
|
|
|
|
<view class="emilist">
|
|
|
|
|
<view class="">
|
|
|
|
|
开始时间
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{detaobj.suitStartTime == null ? '--' : detaobj.suitStartTime}}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="emilist">
|
|
|
|
|
<view class="">
|
|
|
|
|
店铺名称
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{detaobj.storeName == null ? '--' : detaobj.storeName}}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="emilist">
|
|
|
|
|
<view class="">
|
|
|
|
|
详细地址
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{detaobj.storeAddress == null ? '--' : detaobj.storeAddress}}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="emilist">
|
|
|
|
|
<view class="">
|
|
|
|
|
套餐名称
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{detaobj.suitName == null ? '--' : detaobj.suitName}}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="emilist">
|
|
|
|
|
<view class="">
|
|
|
|
|
设备编号
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{detaobj.deviceNo == null ? '--' : detaobj.deviceNo}}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="emilist">
|
|
|
|
|
<view class="">
|
|
|
|
|
订单编号
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{detaobj.billNo == null ? '--' : detaobj.billNo}}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</u-collapse-item>
|
|
|
|
|
</u-collapse>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="zujie" v-if="detaobj.suitFeeType == 3">
|
|
|
|
|
<u-collapse>
|
|
|
|
|
<u-collapse-item title="电量记录">
|
|
|
|
|
<view class="emilist" v-for="(item,index) in yongdianlist" :key="index">
|
|
|
|
|
<view class="">
|
|
|
|
|
{{item.timeStart}}-{{item.timeEnd}}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="">
|
|
|
|
|
{{item.usedEle}}度
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="" style="width: 100%;text-align: center;margin-top: 10rpx;color: #ccc;">
|
|
|
|
|
暂时没有更多记录了
|
|
|
|
|
</view>
|
|
|
|
|
</u-collapse-item>
|
|
|
|
|
</u-collapse>
|
|
|
|
|
</view>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
|
|
|
|
|
<view class="">
|
|
|
|
|
<view class="jieshu" v-if="jieshuflag">
|
|
|
|
|
<text style="justify-content: center;" v-if="detaobj.status == 1">立即支付</text>
|
|
|
|
|
<text style="justify-content: center" v-else>结束订单</text>
|
|
|
|
|
</view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="jieshu" v-else @click="btnjieshu">
|
2025-02-06 20:53:16 +08:00
|
|
|
|
<!-- <text style="justify-content: center;" v-if="detaobj.status == 1" @click="btnljzf">立即支付</text> -->
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<text style="justify-content: center;width: 350rpx;">结束订单</text>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="mask" v-if="jieshufalg"></view>
|
|
|
|
|
<!-- 点击结束弹窗 -->
|
|
|
|
|
<view class="truebox" v-if="trueboxfalg">
|
|
|
|
|
<view class="titvalue">
|
|
|
|
|
您要提前结束此订单吗?
|
|
|
|
|
</view>
|
|
|
|
|
<view class="titvalue">
|
|
|
|
|
当前预估消费金额为{{feeprice}}元,实际消费以实际金额为准 <text
|
|
|
|
|
v-if="detaobj.suitFeeMode == 2 && detaobj.suitFeeType == 3">用电量为{{Number(totalElectriQuantity) - Number(suitStartEle)}}度</text>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="truebtn">
|
|
|
|
|
<view class="quxiao" @click="trueboxfalg = false">
|
|
|
|
|
取消
|
|
|
|
|
</view>
|
|
|
|
|
<view class="queding" @click="btnbox">
|
|
|
|
|
确定
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="mask" v-if="trueboxfalg"></view>
|
2025-03-04 16:13:46 +08:00
|
|
|
|
<view class="xuanfu">
|
|
|
|
|
<image @click="btnxudan" src="https://api.ccttiot.com/smartmeter/img/static/uoWjvyL09yb5K2BBVXPI" mode=""></image>
|
|
|
|
|
<image @click="btncall" src="https://api.ccttiot.com/smartmeter/img/static/u8TAJX3G33gR7SPKtauw" mode=""></image>
|
2025-02-06 20:53:16 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
<script>
|
|
|
|
|
var xBlufi = require("@/page_components/blufi/xBlufi.js")
|
|
|
|
|
import uniEcCanvas from '@/components/uni-ec-canvas/uni-ec-canvas.vue'
|
|
|
|
|
import * as echarts from '@/components/uni-ec-canvas/echarts'
|
2025-03-04 16:13:46 +08:00
|
|
|
|
import { Counter } from './blufi/crypto/aes'
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let chart = null
|
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
uniEcCanvas
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
tdtxt: '开启',
|
|
|
|
|
imgflag: false,
|
|
|
|
|
checkeds: false,
|
|
|
|
|
trueboxfalg: false,
|
|
|
|
|
bgc: {
|
|
|
|
|
backgroundColor: "#8883f0",
|
|
|
|
|
},
|
|
|
|
|
ec: {
|
|
|
|
|
lazyLoad: true
|
|
|
|
|
},
|
|
|
|
|
deviceInfo: {},
|
|
|
|
|
loadings: false,
|
|
|
|
|
info: '',
|
|
|
|
|
tittxt: "设备详情",
|
|
|
|
|
titlist: [
|
|
|
|
|
"全部",
|
|
|
|
|
"电表",
|
|
|
|
|
"水表",
|
|
|
|
|
],
|
|
|
|
|
czflag:false,
|
|
|
|
|
curtitidx: 0,
|
|
|
|
|
id: '',
|
|
|
|
|
timeday: '',
|
|
|
|
|
imglist: '',
|
|
|
|
|
token: '',
|
|
|
|
|
userImgs: '',
|
|
|
|
|
imgflag: true,
|
|
|
|
|
mac: "",
|
|
|
|
|
name: '',
|
|
|
|
|
deviceId: '',
|
|
|
|
|
storeId: '',
|
|
|
|
|
qrResult: '',
|
|
|
|
|
devicesList: [],
|
|
|
|
|
setMode: null,
|
|
|
|
|
vipflag: false,
|
|
|
|
|
cztime: '',
|
|
|
|
|
opflag: '',
|
|
|
|
|
timer: null,
|
|
|
|
|
newArr: [],
|
|
|
|
|
detaobj: {},
|
|
|
|
|
timeDifferenceString: 0,
|
|
|
|
|
timerId: null,
|
|
|
|
|
sbid: '',
|
|
|
|
|
onlineStatus: '',
|
|
|
|
|
billId: '',
|
|
|
|
|
orderno: '',
|
|
|
|
|
jieshuflag: false,
|
|
|
|
|
feeprice: '',
|
|
|
|
|
temperature: null,
|
|
|
|
|
du: '',
|
|
|
|
|
totalElectriQuantity: '',
|
|
|
|
|
suitStartEle: '',
|
|
|
|
|
sbobj: {},
|
|
|
|
|
jieshufalg:false,
|
|
|
|
|
channelId:'',
|
|
|
|
|
dingobj: '',
|
|
|
|
|
timerone:null,
|
|
|
|
|
hasCalledGetczly:false,
|
|
|
|
|
timerIds: null ,
|
|
|
|
|
formattedTime:'',
|
|
|
|
|
ver_data:null,
|
2025-02-11 17:34:32 +08:00
|
|
|
|
ver_dataflag:1,
|
|
|
|
|
modelId:[],
|
2025-02-15 14:15:36 +08:00
|
|
|
|
devicesarr:[],
|
|
|
|
|
timedingshi: null, // 定时器
|
|
|
|
|
countdown: 30, // 倒计时时间
|
2025-03-04 16:13:46 +08:00
|
|
|
|
yongdianlist:[]
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onLoad(option) {
|
|
|
|
|
this.id = option.id
|
|
|
|
|
this.deviceId = option.deviceId
|
|
|
|
|
this.name = option.name
|
|
|
|
|
this.$u.put(`/app/bill/${this.id}/refreshPayResult`).then(res => {
|
|
|
|
|
this.getDevice()
|
|
|
|
|
})
|
2025-02-11 17:34:32 +08:00
|
|
|
|
if(option.deviceId){
|
|
|
|
|
this.ver_dataflag = 3
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
|
2025-02-15 14:15:36 +08:00
|
|
|
|
this.startTimerdingshi()
|
2025-02-11 17:34:32 +08:00
|
|
|
|
}else{
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({'isStart': true})
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
if (option.flag) {
|
|
|
|
|
this.opflag = option.flag
|
|
|
|
|
}
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
this.startTimerone()
|
|
|
|
|
},1500)
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
onUnload: function() {
|
2025-03-04 16:13:46 +08:00
|
|
|
|
console.log("unload");
|
2025-02-06 20:53:16 +08:00
|
|
|
|
this.stopTimer();
|
2025-02-15 14:15:36 +08:00
|
|
|
|
this.clearTimer()
|
2025-02-06 20:53:16 +08:00
|
|
|
|
clearInterval(this.timerone);
|
|
|
|
|
this.timerone= null
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
|
|
|
|
|
xBlufi.notifyConnectBle({
|
2025-02-11 17:34:32 +08:00
|
|
|
|
isStart: false,
|
|
|
|
|
deviceId: this.deviceId,
|
|
|
|
|
name: this.name
|
|
|
|
|
})
|
2025-02-06 20:53:16 +08:00
|
|
|
|
},
|
|
|
|
|
mounted() {
|
|
|
|
|
// 组件挂载后启动定时器
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
// 分享到好友(会话)
|
|
|
|
|
onShareAppMessage: function() {
|
|
|
|
|
return {
|
|
|
|
|
title: '创想物联',
|
|
|
|
|
path: '/pages/shouye/index'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 分享到朋友圈
|
|
|
|
|
onShareTimeline: function() {
|
|
|
|
|
return {
|
|
|
|
|
title: '创想物联',
|
|
|
|
|
query: '',
|
|
|
|
|
path: '/pages/shouye/index'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onShow() {
|
|
|
|
|
clearInterval(this.timerIds);
|
|
|
|
|
this.timeday = ''
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.startTimers()
|
|
|
|
|
this.gethuidaio()
|
|
|
|
|
if (this.id) {
|
|
|
|
|
//判断有没有id 没有的话则直接返回首页
|
|
|
|
|
} else {
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}, 1000)
|
2025-02-27 17:56:35 +08:00
|
|
|
|
console.log("页面显示");
|
|
|
|
|
this.handleScreenOn();
|
2025-02-06 20:53:16 +08:00
|
|
|
|
},
|
|
|
|
|
beforeDestroy() {
|
|
|
|
|
uni.navigateBack()
|
|
|
|
|
// 组件销毁前清除定时器,防止内存泄漏
|
|
|
|
|
if (this.timerIds) {
|
|
|
|
|
clearInterval(this.timerIds);
|
|
|
|
|
}
|
|
|
|
|
if (this.timer) {
|
|
|
|
|
clearInterval(this.timer)
|
|
|
|
|
this.timer = null;
|
|
|
|
|
console.log('已销毁')
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-02-27 17:56:35 +08:00
|
|
|
|
onHide() {
|
2025-03-04 16:13:46 +08:00
|
|
|
|
console.log("页面隐藏")
|
|
|
|
|
this.handleScreenOff()
|
2025-02-27 17:56:35 +08:00
|
|
|
|
uni.navigateBack()
|
|
|
|
|
},
|
2025-02-06 20:53:16 +08:00
|
|
|
|
methods: {
|
2025-02-27 17:56:35 +08:00
|
|
|
|
// 处理息屏事件
|
2025-03-04 16:13:46 +08:00
|
|
|
|
handleScreenOff() {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
console.log("处理息屏事件")
|
2025-03-04 16:13:46 +08:00
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
isStart: false,
|
|
|
|
|
deviceId: this.deviceId,
|
|
|
|
|
name: this.name
|
|
|
|
|
})
|
|
|
|
|
this.clearTimer() // 倒计时结束,清除定时器
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url:'/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 处理亮屏事件
|
|
|
|
|
handleScreenOn() {
|
|
|
|
|
console.log("处理亮屏事件");
|
|
|
|
|
},
|
2025-02-15 14:15:36 +08:00
|
|
|
|
// 启动定时器
|
|
|
|
|
startTimerdingshi() {
|
|
|
|
|
let that = this
|
2025-03-12 17:04:47 +08:00
|
|
|
|
that.clearTimer() // 先清除之前的定时器
|
2025-02-15 14:15:36 +08:00
|
|
|
|
that.timedingshi = setInterval(() => {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
that.countdown-- // 倒计时减 1
|
|
|
|
|
console.log(that.countdown,that.deviceId)
|
2025-02-15 14:15:36 +08:00
|
|
|
|
if (that.countdown <= 0) {
|
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
isStart: false,
|
|
|
|
|
deviceId: that.deviceId,
|
|
|
|
|
name: that.name
|
|
|
|
|
})
|
|
|
|
|
that.clearTimer() // 倒计时结束,清除定时器
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url:'/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}, 1000); // 每秒执行一次
|
|
|
|
|
},
|
|
|
|
|
// 清除定时器
|
|
|
|
|
clearTimer() {
|
|
|
|
|
if (this.timedingshi) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
clearInterval(this.timedingshi) // 清除定时器
|
|
|
|
|
this.timedingshi = null
|
2025-02-15 14:15:36 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
2025-02-06 20:53:16 +08:00
|
|
|
|
// 点击续单 跳转到重新下单
|
|
|
|
|
btnxudan(){
|
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '温馨提示',
|
|
|
|
|
content: '您是否需要前去续单?',
|
|
|
|
|
showCancel: true,
|
|
|
|
|
success: function(res) {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
url:'/page_components/fuwu/index?id=' + that.sbobj.deviceNo
|
|
|
|
|
})
|
|
|
|
|
} else if (res.cancel) {
|
|
|
|
|
console.log('取消'); // 用户点击取消
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
start() {
|
|
|
|
|
this.timerIds = setInterval(() => {
|
|
|
|
|
// 首先处理秒数的递减
|
|
|
|
|
if (this.timeday.seconds > 0) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.timeday.seconds--
|
2025-02-06 20:53:16 +08:00
|
|
|
|
} else {
|
|
|
|
|
// 如果秒数为0,则处理分钟数的递减,并重置秒数为59
|
|
|
|
|
if (this.timeday.minutes > 0) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.timeday.seconds = 59
|
|
|
|
|
this.timeday.minutes--
|
2025-02-06 20:53:16 +08:00
|
|
|
|
} else {
|
|
|
|
|
// 如果分钟数为0,则处理小时数的递减,并重置分钟和秒数为59
|
|
|
|
|
if (this.timeday.hours > 0) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.timeday.minutes = 59
|
|
|
|
|
this.timeday.seconds = 59
|
|
|
|
|
this.timeday.hours--
|
2025-02-06 20:53:16 +08:00
|
|
|
|
} else {
|
|
|
|
|
// 如果小时数为0,则处理天数的递减,并重置小时、分钟和秒数为最大值
|
|
|
|
|
if (this.timeday.days > 0) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.timeday.hours = 23
|
|
|
|
|
this.timeday.minutes = 59
|
|
|
|
|
this.timeday.seconds = 59
|
|
|
|
|
this.timeday.days--
|
2025-02-06 20:53:16 +08:00
|
|
|
|
} else {
|
|
|
|
|
// 当天数也为0时,清除定时器并执行所需操作
|
2025-03-12 17:04:47 +08:00
|
|
|
|
clearInterval(this.timerIds)
|
|
|
|
|
this.getDevice()
|
|
|
|
|
return // 这里可以添加return来退出函数,但实际上由于setInterval是异步的,它不会阻止后续的console.log执行(但在这个上下文中它是多余的)
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 格式化时间并打印到控制台
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.formattedTime = this.formatTime(this.timeday)
|
|
|
|
|
}, 1000) // 每1000毫秒(1秒)执行一次
|
2025-02-06 20:53:16 +08:00
|
|
|
|
},
|
|
|
|
|
formatTime(timeObj) {
|
|
|
|
|
// 根据时间的不同部分构建格式化的字符串
|
|
|
|
|
if (timeObj.days > 0) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
return `${timeObj.days}天 ${timeObj.hours.toString().padStart(2, '0')}小时 ${timeObj.minutes.toString().padStart(2, '0')}分钟 ${timeObj.seconds.toString().padStart(2, '0')}秒`
|
2025-02-06 20:53:16 +08:00
|
|
|
|
} else if (timeObj.hours > 0) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
return `${timeObj.hours}小时 ${timeObj.minutes.toString().padStart(2, '0')}分钟 ${timeObj.seconds.toString().padStart(2, '0')}秒`
|
2025-02-06 20:53:16 +08:00
|
|
|
|
} else if (timeObj.minutes > 0) {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
return `${timeObj.minutes}分钟 ${timeObj.seconds.toString().padStart(2, '0')}秒`
|
2025-02-06 20:53:16 +08:00
|
|
|
|
} else {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
return `${timeObj.seconds}秒`
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
startTimerone() {
|
|
|
|
|
// 清除之前可能存在的定时器,防止重复设置
|
2025-03-12 17:04:47 +08:00
|
|
|
|
clearInterval(this.timerone)
|
2025-02-06 20:53:16 +08:00
|
|
|
|
this.timerone = setInterval(() => {
|
|
|
|
|
this.shuaxin()
|
|
|
|
|
this.gethuidaio()
|
2025-03-12 17:04:47 +08:00
|
|
|
|
}, 2000)
|
2025-02-06 20:53:16 +08:00
|
|
|
|
},
|
|
|
|
|
// 判断是否充值失败 充值失败启用蓝牙离线充值
|
|
|
|
|
gethuidaio() {
|
|
|
|
|
this.$u.get('/app/bill/recharge/device/fail/list').then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
if (res.data.length > 0) {
|
|
|
|
|
this.czflag = true
|
|
|
|
|
this.dingobj = res.data
|
2025-03-12 17:04:47 +08:00
|
|
|
|
clearInterval(this.timerone)
|
2025-02-06 20:53:16 +08:00
|
|
|
|
this.timerone= null
|
|
|
|
|
} else {
|
|
|
|
|
uni.removeStorageSync('time')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 点击进行蓝牙离线充值
|
|
|
|
|
tocz() {
|
|
|
|
|
this.czflag = false
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
url: '/page_fenbao/chongzhi?dingobj=' + JSON.stringify(this.dingobj)
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 点击拨打客服电话
|
|
|
|
|
btncall(){
|
|
|
|
|
let phoneNumber = ''
|
|
|
|
|
phoneNumber = this.sbobj.userMobile
|
|
|
|
|
uni.makePhoneCall({
|
|
|
|
|
phoneNumber: phoneNumber,
|
|
|
|
|
success: function(res) {
|
|
|
|
|
console.log('拨打电话成功', res)
|
|
|
|
|
},
|
|
|
|
|
fail: function(err) {
|
|
|
|
|
console.error('拨打电话失败', err)
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '拨打电话失败',
|
|
|
|
|
icon: 'none'
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 开启和关闭
|
|
|
|
|
btnkq() {
|
|
|
|
|
if (this.onlineStatus == 1) {
|
|
|
|
|
if (this.tdtxt == '开启') {
|
|
|
|
|
this.$u.put(`/app/bill/switchDevice?billId=${this.billId}&open=false`).then((res) => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
this.tdtxt = '关闭'
|
|
|
|
|
this.imgflag = false
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
this.imgflag = true
|
|
|
|
|
this.tdtxt = '开启'
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
this.$u.put(`/app/bill/switchDevice?billId=${this.billId}&open=true`).then((res) => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
this.imgflag = true
|
|
|
|
|
this.tdtxt = '开启'
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
this.imgflag = false
|
|
|
|
|
this.tdtxt = '关闭'
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
let currentTime = new Date()
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let endTimeString = this.detaobj.suitEndTime
|
|
|
|
|
let endTimeParts = endTimeString.split(/[- :]/)
|
2025-03-12 17:04:47 +08:00
|
|
|
|
let endTime = new Date(endTimeParts[0], endTimeParts[1] - 1, endTimeParts[2], endTimeParts[3], endTimeParts[4], endTimeParts[5])
|
2025-02-06 20:53:16 +08:00
|
|
|
|
// 比较当前时间和结束时间
|
|
|
|
|
if (currentTime > endTime) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '该订单已结束,不能进行操作',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-02-11 17:34:32 +08:00
|
|
|
|
if (this.ver_dataflag != 3) {
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '温馨提示',
|
|
|
|
|
content: '正在连接蓝牙,请尽量靠近设备!',
|
|
|
|
|
showCancel: false,
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
// console.log(this.tdtxt,'020202');
|
|
|
|
|
if (this.tdtxt == '开启') {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.countdown = 30 // 重置倒计时时间
|
2025-02-15 14:15:36 +08:00
|
|
|
|
this.startTimerdingshi()
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let that = this
|
|
|
|
|
uni.getNetworkType({
|
|
|
|
|
success(res) {
|
|
|
|
|
if (res.networkType !== 'none') {
|
|
|
|
|
that.tdtxt = '关闭'
|
|
|
|
|
that.imgflag = false
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: 'close'
|
|
|
|
|
})
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: '11close'
|
|
|
|
|
})
|
|
|
|
|
let datas = {
|
|
|
|
|
mac:that.qrResult,
|
|
|
|
|
reason:'用户临时开关关闭',
|
|
|
|
|
command:'11close',
|
|
|
|
|
result:'成功'
|
|
|
|
|
}
|
2025-03-12 17:04:47 +08:00
|
|
|
|
console.log(datas,'111')
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.countdown = 30 // 重置倒计时时间
|
2025-02-15 14:15:36 +08:00
|
|
|
|
this.startTimerdingshi()
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let that = this
|
|
|
|
|
uni.getNetworkType({
|
|
|
|
|
success(res) {
|
|
|
|
|
if (res.networkType !== 'none') {
|
|
|
|
|
that.tdtxt = '开启'
|
|
|
|
|
that.imgflag = true
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: 'open'
|
|
|
|
|
})
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: '11open'
|
|
|
|
|
})
|
|
|
|
|
let datas = {
|
|
|
|
|
mac:that.qrResult,
|
|
|
|
|
reason:'用户临时开关开启',
|
|
|
|
|
command:'11open',
|
|
|
|
|
result:'成功'
|
|
|
|
|
}
|
|
|
|
|
that.$u.post(`/app/commandLog/bluetooth`,datas).then(res => {})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 点击进行强刷数据
|
|
|
|
|
shuaxin(txt){
|
|
|
|
|
clearInterval(this.timerIds);
|
|
|
|
|
this.timeday = ''
|
|
|
|
|
this.$u.get(`/app/device/${this.sbid}/refreshIot`).then((res) => {
|
|
|
|
|
if(res.code == 200){
|
|
|
|
|
this.getDevice()
|
|
|
|
|
this.getsb()
|
|
|
|
|
if(txt == 1){
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 1500
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 1500
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 点击默认返回首页
|
|
|
|
|
btns() {
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 点击结束订单
|
|
|
|
|
btnjieshu() {
|
|
|
|
|
if (this.detaobj.suitFeeType == 2 || this.detaobj.suitFeeType == 3){
|
|
|
|
|
if (this.onlineStatus == 1) {
|
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content: '您确定要提前结束订单吗?',
|
|
|
|
|
success: function(res) {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
let data = {
|
|
|
|
|
billId: that.billId
|
|
|
|
|
}
|
|
|
|
|
that.$u.put(`/app/bill/endUse`, data).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '结束成功',
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 1000
|
|
|
|
|
})
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
},1000)
|
|
|
|
|
} else {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 1000
|
|
|
|
|
})
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
},1000)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-02-11 17:34:32 +08:00
|
|
|
|
if (this.ver_dataflag != 3) {
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '温馨提示',
|
|
|
|
|
content: '正在连接蓝牙,请尽量靠近设备。',
|
|
|
|
|
showCancel: false,
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-02-27 17:56:35 +08:00
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content: '您确定要提前结束订单吗?',
|
|
|
|
|
success: function(res) {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
that.jieshufalg = true
|
|
|
|
|
let data = {
|
|
|
|
|
billId: that.billId,
|
|
|
|
|
}
|
|
|
|
|
that.$u.put(`/app/bill/endUse`, data).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: 'time0@'
|
|
|
|
|
})
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: '11time0@'
|
|
|
|
|
})
|
|
|
|
|
let datas = {
|
|
|
|
|
mac:that.qrResult,
|
|
|
|
|
reason:'用户结束订单操作',
|
|
|
|
|
command:'11time0@',
|
|
|
|
|
result:'成功'
|
|
|
|
|
}
|
|
|
|
|
that.$u.post(`/app/commandLog/bluetooth`,datas).then(res => {})
|
|
|
|
|
that.jieshufalg = false
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title:'结束成功',
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
'isStart': false
|
|
|
|
|
})
|
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
isStart: false,
|
|
|
|
|
deviceId: that.deviceId,
|
|
|
|
|
name: that.name
|
|
|
|
|
})
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
}, 2000)
|
|
|
|
|
}, 1000)
|
|
|
|
|
} else {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-02-11 17:34:32 +08:00
|
|
|
|
})
|
2025-02-27 17:56:35 +08:00
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else{
|
2025-03-12 17:04:47 +08:00
|
|
|
|
let currentTime = new Date()
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let endTimeString = this.detaobj.suitEndTime
|
|
|
|
|
let endTimeParts = endTimeString.split(/[- :]/)
|
2025-03-12 17:04:47 +08:00
|
|
|
|
let endTime = new Date(endTimeParts[0], endTimeParts[1] - 1, endTimeParts[2], endTimeParts[3], endTimeParts[4], endTimeParts[5])
|
2025-02-06 20:53:16 +08:00
|
|
|
|
// 比较当前时间和结束时间
|
|
|
|
|
if (currentTime > endTime) {
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url:'/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
}else if (this.onlineStatus == 1) {
|
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content: '您确定要提前结束订单吗?',
|
|
|
|
|
success: function(res) {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
let data = {
|
|
|
|
|
billId: that.billId
|
|
|
|
|
}
|
|
|
|
|
that.$u.put(`/app/bill/endUse`, data).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '结束成功',
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 1000
|
|
|
|
|
})
|
2025-02-11 17:34:32 +08:00
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
isStart: false,
|
|
|
|
|
deviceId: that.deviceId,
|
|
|
|
|
name: that.name
|
|
|
|
|
})
|
2025-02-06 20:53:16 +08:00
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
},500)
|
|
|
|
|
} else {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 1000
|
|
|
|
|
})
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
},500)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-02-11 17:34:32 +08:00
|
|
|
|
if (this.ver_dataflag != 3) {
|
2025-02-06 20:53:16 +08:00
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '温馨提示',
|
|
|
|
|
content: '正在连接蓝牙,请尽量靠近设备',
|
|
|
|
|
showCancel: false,
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-02-27 17:56:35 +08:00
|
|
|
|
let that = this
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content: '您确定要提前结束订单吗?',
|
|
|
|
|
success: function(res) {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
that.jieshufalg = true
|
|
|
|
|
let data = {
|
|
|
|
|
billId: that.billId,
|
|
|
|
|
}
|
|
|
|
|
that.$u.put(`/app/bill/endUse`, data).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: 'time0@'
|
|
|
|
|
})
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
customData: '11time0@'
|
|
|
|
|
})
|
|
|
|
|
let datas = {
|
|
|
|
|
mac:that.qrResult,
|
|
|
|
|
reason:'用户结束订单操作',
|
|
|
|
|
command:'11time0@',
|
|
|
|
|
result:'成功'
|
|
|
|
|
}
|
|
|
|
|
that.$u.post(`/app/commandLog/bluetooth`,datas).then(res => {})
|
|
|
|
|
that.jieshufalg = false
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title:'结束成功',
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/shouye/index'
|
|
|
|
|
})
|
|
|
|
|
}, 2000)
|
|
|
|
|
}, 1000)
|
|
|
|
|
} else {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
})
|
2025-02-27 17:56:35 +08:00
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 每一分钟请求更新一次
|
|
|
|
|
startTimers() {
|
|
|
|
|
// 确保没有重复的定时器
|
|
|
|
|
if (this.timerId !== null) {
|
|
|
|
|
clearInterval(this.timerId)
|
|
|
|
|
}
|
|
|
|
|
// 设置定时器,每分钟执行一次 timerCallback 函数
|
|
|
|
|
this.timerId = setInterval(() => {
|
|
|
|
|
this.shuaxin()
|
|
|
|
|
}, 60000);
|
|
|
|
|
},
|
|
|
|
|
// 销毁定时器
|
|
|
|
|
stopTimer() {
|
|
|
|
|
if (this.timerId !== null) {
|
|
|
|
|
clearInterval(this.timerId)
|
|
|
|
|
this.timerId = null
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 预估金额
|
|
|
|
|
getprice() {
|
|
|
|
|
this.$u.get(`app/bill/calcPrice?billId=${this.billId}`).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
this.feeprice = res.data.toFixed(2)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
2025-03-04 16:13:46 +08:00
|
|
|
|
// 获取分时段用电量
|
|
|
|
|
getyongdian() {
|
|
|
|
|
this.$u.get(`/app/billEleRecord/listByBill?billId=${this.billId}`).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
this.yongdianlist = res.data
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
2025-02-06 20:53:16 +08:00
|
|
|
|
// 获取订单详情
|
|
|
|
|
getDevice() {
|
|
|
|
|
this.$u.get(`/app/bill/byNo/${this.id}`).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
this.sbid = res.data.deviceId
|
|
|
|
|
this.suitStartEle = res.data.suitStartEle //设备开始前用电
|
|
|
|
|
this.getsb()
|
|
|
|
|
this.detaobj = res.data
|
|
|
|
|
this.billId = res.data.billId
|
|
|
|
|
this.orderno = res.data.billNo
|
2025-03-04 16:13:46 +08:00
|
|
|
|
this.getyongdian()
|
2025-02-06 20:53:16 +08:00
|
|
|
|
if(res.data.deviceRechargeStatus == 1){
|
2025-03-12 17:04:47 +08:00
|
|
|
|
clearInterval(this.timerone)
|
2025-02-06 20:53:16 +08:00
|
|
|
|
this.timerone = null
|
|
|
|
|
}
|
|
|
|
|
this.getprice()
|
|
|
|
|
let dateTimeString = res.data.suitStartTime // 示例时间字符串
|
2025-03-12 17:04:47 +08:00
|
|
|
|
this.timeDifferenceString = this.calculateTimeDifference(dateTimeString) // 调用函数
|
2025-02-06 20:53:16 +08:00
|
|
|
|
if (res.data.suitGearAmount.length > 0) {
|
|
|
|
|
this.newArr = []
|
|
|
|
|
for (let i = 0; i < res.data.suitGearTime.length; i++) {
|
|
|
|
|
let value = res.data.suitGearAmount[res.data.suitGearTime[i]];
|
|
|
|
|
this.newArr.push(value)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (this.detaobj.suitEndEle) {
|
|
|
|
|
let du = Number(this.detaobj.suitEndEle) - Number(this.detaobj.deviceTotalEle)
|
|
|
|
|
this.du = du.toFixed(2)
|
|
|
|
|
}
|
|
|
|
|
if (res.data.deviceExpireTime == null) {
|
|
|
|
|
this.timeday = 0
|
|
|
|
|
console.log(res.data.deviceExpireTime,'000');
|
|
|
|
|
} else {
|
|
|
|
|
console.log(res.data.deviceExpireTime,'111');
|
|
|
|
|
let expireTimeStr = ''
|
|
|
|
|
expireTimeStr = res.data.deviceExpireTime
|
|
|
|
|
let expireTimeParts = expireTimeStr.split(" ")
|
|
|
|
|
let expireDateParts = expireTimeParts[0].split("-")
|
|
|
|
|
let expireTimePartsTime = expireTimeParts[1].split(":")
|
|
|
|
|
let expireDate = new Date(expireDateParts[0], expireDateParts[1] - 1, expireDateParts[2], expireTimePartsTime[0], expireTimePartsTime[1], expireTimePartsTime[2])
|
|
|
|
|
let now = new Date()
|
|
|
|
|
let differenceInMs = expireDate - now
|
|
|
|
|
this.timeday == ''
|
|
|
|
|
if (differenceInMs <= 0) {
|
|
|
|
|
this.timeday = 0
|
|
|
|
|
} else {
|
|
|
|
|
if (this.timeday == '') {
|
|
|
|
|
this.timeday = this.formatMilliseconds(differenceInMs)
|
|
|
|
|
this.start()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
getsb() {
|
|
|
|
|
this.$u.get(`/app/device/${this.sbid}`).then(res => {
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
this.sbobj = res.data
|
|
|
|
|
if (this.sbobj.powerStatus == 0) {
|
|
|
|
|
this.imgflag = false
|
|
|
|
|
} else {
|
|
|
|
|
this.imgflag = true
|
|
|
|
|
}
|
|
|
|
|
this.onlineStatus = res.data.onlineStatus
|
|
|
|
|
this.qrResult = res.data.mac
|
2025-02-15 14:15:36 +08:00
|
|
|
|
if(this.ver_dataflag != 3){
|
|
|
|
|
this.deviceId = res.data.mac.match(/.{2}/g).reverse().join(':')
|
|
|
|
|
}
|
2025-02-11 17:34:32 +08:00
|
|
|
|
this.modelId = res.data.modelTags
|
|
|
|
|
if(this.ver_dataflag != 3){
|
|
|
|
|
this.getlanya()
|
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
this.totalElectriQuantity = res.data.totalElectriQuantity
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
2025-02-11 17:34:32 +08:00
|
|
|
|
getlanya(){
|
|
|
|
|
if (this.ver_dataflag != 3) {
|
|
|
|
|
this.czflag = true
|
|
|
|
|
this.ver_dataflag = 2
|
|
|
|
|
let that = this
|
|
|
|
|
if (that.deviceId != '') {
|
|
|
|
|
let systemInfo = uni.getSystemInfoSync()
|
2025-03-04 16:13:46 +08:00
|
|
|
|
if (systemInfo.platform == 'android') {
|
|
|
|
|
that.modelId.some(item => {
|
|
|
|
|
if(item == 2){
|
|
|
|
|
console.log('配网');
|
|
|
|
|
let zuih = ''
|
|
|
|
|
if(that.deviceId.slice(-1) == 8){
|
|
|
|
|
zuih = 'A'
|
|
|
|
|
}else if(that.deviceId.slice(-1) == 9){
|
|
|
|
|
zuih = 'B'
|
|
|
|
|
}else if(that.deviceId.slice(-1) == 'A'){
|
|
|
|
|
zuih = 'C'
|
|
|
|
|
}else if(that.deviceId.slice(-1) == 'B'){
|
|
|
|
|
zuih = 'D'
|
|
|
|
|
}else if(that.deviceId.slice(-1) == 'C'){
|
|
|
|
|
zuih = 'E'
|
|
|
|
|
}else if(that.deviceId.slice(-1) == 'D'){
|
|
|
|
|
zuih = 'F'
|
|
|
|
|
}else{
|
|
|
|
|
zuih = Number(that.deviceId.slice(-1)) + 2
|
|
|
|
|
}
|
|
|
|
|
that.deviceId = that.deviceId.slice(0, -1) + zuih
|
|
|
|
|
console.log(that.modelId,zuih,that.deviceId.slice(0, -1),'...........')
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
'isStart': false
|
|
|
|
|
})
|
|
|
|
|
console.log("进入蓝牙连接", that.deviceId)
|
|
|
|
|
console.log("进入that.name", that.name)
|
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
isStart: true,
|
|
|
|
|
deviceId: that.deviceId,
|
|
|
|
|
name: that.name
|
|
|
|
|
})
|
|
|
|
|
}else{
|
|
|
|
|
console.log('无配网');
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
'isStart': false
|
|
|
|
|
})
|
|
|
|
|
console.log("进入蓝牙连接", that.deviceId)
|
|
|
|
|
console.log("进入that.name", that.name)
|
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
isStart: true,
|
|
|
|
|
deviceId: that.deviceId,
|
|
|
|
|
name: that.name
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else if (systemInfo.platform == 'ios') {
|
|
|
|
|
// 当前设备是 iOS
|
|
|
|
|
that.findDevice()
|
2025-02-11 17:34:32 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
findDevice() {
|
|
|
|
|
// 使用 find 方法查找匹配的设备
|
|
|
|
|
const matchedDevice = this.devicesarr.find(device => {
|
|
|
|
|
console.log(device.name, this.qrResult, '111')
|
|
|
|
|
console.log("IOSMAC", device)
|
|
|
|
|
return device.name.slice(-12) == this.qrResult.slice(-12)
|
|
|
|
|
})
|
|
|
|
|
if (matchedDevice) {
|
|
|
|
|
// 找到匹配的设备
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
'isStart': false
|
|
|
|
|
})
|
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
isStart: true,
|
|
|
|
|
deviceId: matchedDevice.deviceId,
|
|
|
|
|
name: matchedDevice.name
|
|
|
|
|
})
|
|
|
|
|
this.deviceId = matchedDevice.deviceId
|
|
|
|
|
this.name = matchedDevice.name
|
|
|
|
|
console.log(this.deviceId, '11221')
|
|
|
|
|
} else {
|
|
|
|
|
console.log("未找到匹配的设备,继续查找...")
|
|
|
|
|
setTimeout(this.findDevice.bind(this), 1000) // 使用 bind 保持 this 上下文
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-02-06 20:53:16 +08:00
|
|
|
|
calculateTimeDifference(dateTimeString) {
|
|
|
|
|
// 将时间字符串转换为Date对象
|
|
|
|
|
const date = new Date(dateTimeString)
|
|
|
|
|
// 获取当前时间
|
|
|
|
|
const now = new Date()
|
|
|
|
|
// 计算时间差(毫秒)
|
|
|
|
|
const diff = now - date
|
|
|
|
|
// 将毫秒转换为天、小时、分钟和秒
|
|
|
|
|
const days = Math.floor(diff / (1000 * 60 * 60 * 24))
|
|
|
|
|
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
|
|
|
|
|
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60))
|
|
|
|
|
const seconds = Math.floor((diff % (1000 * 60)) / 1000)
|
|
|
|
|
// 创建一个对象来存储结果,并忽略零值
|
|
|
|
|
const timeDifference = {
|
|
|
|
|
days: days > 0 ? days : undefined,
|
|
|
|
|
hours: hours > 0 ? hours : undefined,
|
|
|
|
|
minutes: minutes > 0 ? minutes : undefined,
|
|
|
|
|
seconds: seconds > 0 ? seconds : undefined
|
|
|
|
|
}
|
|
|
|
|
// 转换为字符串,忽略未定义的属性
|
|
|
|
|
let result = ''
|
|
|
|
|
if (timeDifference.days !== undefined) {
|
|
|
|
|
result += `${timeDifference.days}天`
|
|
|
|
|
}
|
|
|
|
|
if (timeDifference.hours !== undefined) {
|
|
|
|
|
result += `${timeDifference.hours}时`
|
|
|
|
|
}
|
|
|
|
|
if (timeDifference.minutes !== undefined) {
|
|
|
|
|
result += `${timeDifference.minutes + 1}分`
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
},
|
|
|
|
|
// 计算天时分秒
|
|
|
|
|
formatMilliseconds(milliseconds) {
|
|
|
|
|
// 计算天数
|
|
|
|
|
let days = Math.floor(milliseconds / (1000 * 60 * 60 * 24))
|
|
|
|
|
// 计算剩余的小时数
|
|
|
|
|
let hours = Math.floor((milliseconds % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
|
|
|
|
|
// 计算剩余的分钟数
|
|
|
|
|
let minutes = Math.floor((milliseconds % (1000 * 60 * 60)) / (1000 * 60))
|
|
|
|
|
// 计算剩余的秒数
|
|
|
|
|
let seconds = Math.floor((milliseconds % (1000 * 60)) / 1000)
|
|
|
|
|
// 返回一个对象,包含天、小时、分钟和秒
|
|
|
|
|
return {
|
|
|
|
|
days: days,
|
|
|
|
|
hours: hours,
|
|
|
|
|
minutes: minutes,
|
|
|
|
|
seconds: seconds
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
funListenDeviceMsgEvent: function(options) {
|
|
|
|
|
switch (options.type) {
|
2025-02-11 17:34:32 +08:00
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_STATUS_CONNECTED:
|
|
|
|
|
if (!options.result) {
|
|
|
|
|
this.ver_dataflag = 1
|
|
|
|
|
}
|
|
|
|
|
break;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS:
|
|
|
|
|
if (options.result) {
|
2025-02-11 17:34:32 +08:00
|
|
|
|
this.devicesarr = options.data
|
2025-03-04 16:13:46 +08:00
|
|
|
|
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED:
|
|
|
|
|
console.log("连接回调:" + JSON.stringify(options))
|
2025-02-11 17:34:32 +08:00
|
|
|
|
if (options.result == true) {
|
|
|
|
|
// console.log('125451245')
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
this.ver_dataflag = 3
|
|
|
|
|
},2000)
|
2025-02-15 14:15:36 +08:00
|
|
|
|
this.startTimerdingshi()
|
2025-02-11 17:34:32 +08:00
|
|
|
|
xBlufi.notifyInitBleEsp32({
|
|
|
|
|
deviceId: this.deviceId
|
|
|
|
|
})
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvents)
|
|
|
|
|
this.deviceIds = options.data.deviceId
|
|
|
|
|
this.name = this.name
|
2025-03-12 17:04:47 +08:00
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
break;
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
|
|
|
|
|
this.ver_data = this.parseCustomData(options.data)
|
|
|
|
|
console.log("1收到设备发来的自定义数据结果:", this.ver_data)
|
|
|
|
|
this.temperature = this.ver_data.temperature / 1000
|
|
|
|
|
this.ver_dataflag = 3
|
|
|
|
|
this.jieshuflag = false
|
|
|
|
|
this.jieshufalg = false
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
break
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START:
|
|
|
|
|
if (!options.result) {
|
|
|
|
|
this.lanyaflag = true
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
this.lanyaflag = false
|
|
|
|
|
}
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
parseCustomData(data) {
|
|
|
|
|
// 将字符串按照 "@" 分割成数组
|
|
|
|
|
const dataArray = data.split('@')
|
|
|
|
|
// 初始化一个空对象来存储解析后的数据
|
|
|
|
|
const parsedData = {}
|
|
|
|
|
// 前缀到属性名的映射
|
|
|
|
|
const prefixMap = {
|
|
|
|
|
'V': 'voltage',
|
|
|
|
|
'S': 'switchState',
|
|
|
|
|
'A': 'current',
|
|
|
|
|
'P': 'power',
|
|
|
|
|
'M': 'remainingPower',
|
|
|
|
|
'T': 'setMode',
|
|
|
|
|
'W': 'temperature'
|
|
|
|
|
};
|
|
|
|
|
// 遍历数组并解析每个字段
|
|
|
|
|
for (let i = 0; i < dataArray.length; i++) {
|
|
|
|
|
const field = dataArray[i];
|
|
|
|
|
for (const prefix in prefixMap) {
|
|
|
|
|
if (field.startsWith(prefix)) {
|
|
|
|
|
// 去除前缀并将剩余部分转换为适当的类型(这里默认为浮点数或字符串)
|
|
|
|
|
const value = field.substring(1);
|
|
|
|
|
const propertyName = prefixMap[prefix]
|
|
|
|
|
// 根据需要,这里可以添加更复杂的类型转换逻辑
|
|
|
|
|
// 但为了简单起见,我们总是尝试将其转换为浮点数,如果失败则保留为字符串
|
|
|
|
|
parsedData[propertyName] = isNaN(parseFloat(value)) ? value : parseFloat(value)
|
|
|
|
|
// 找到了匹配的前缀,跳出内层循环
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 返回解析后的数据对象
|
|
|
|
|
return parsedData
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
<style lang="scss">
|
2025-03-04 16:13:46 +08:00
|
|
|
|
/deep/ .u-collapse-title{
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
/deep/ .u-title {
|
|
|
|
|
padding-bottom: 22rpx;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .u-icon__icon {
|
2025-03-04 16:13:46 +08:00
|
|
|
|
padding-bottom: 12rpx;
|
|
|
|
|
}
|
|
|
|
|
.xuanfu{
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 66%;
|
|
|
|
|
right: 0;
|
|
|
|
|
image{
|
|
|
|
|
width: 114rpx;
|
|
|
|
|
height: 114rpx;
|
|
|
|
|
margin-top: 40rpx;
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
.imgtel{
|
|
|
|
|
position: fixed;
|
|
|
|
|
left: 36rpx;
|
|
|
|
|
bottom: 78rpx;
|
|
|
|
|
width: 90rpx;
|
|
|
|
|
height: 90rpx;
|
|
|
|
|
z-index: 99;
|
|
|
|
|
}
|
|
|
|
|
page {
|
|
|
|
|
background-color: #F7FAFE;
|
|
|
|
|
padding: 0 30rpx;
|
|
|
|
|
box-sizing: border-box;
|
2025-02-27 17:56:35 +08:00
|
|
|
|
-ms-overflow-style: none;
|
|
|
|
|
/* 去除IE和Edge的默认滚动条 */
|
|
|
|
|
scrollbar-width: none;
|
|
|
|
|
/* 去除Firefox的默认滚动条 */
|
|
|
|
|
&::-webkit-scrollbar {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
.wz {
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
view{
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
image{
|
|
|
|
|
width: 80rpx;
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
margin-right: 10rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.card2 {
|
2025-03-04 16:13:46 +08:00
|
|
|
|
padding-bottom: 30rpx;box-sizing: border-box;margin-top: 0;margin-top: 20rpx;padding: 0 20rpx;box-sizing: border-box;box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);
|
|
|
|
|
margin-top: 30rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
max-height: 314rpx;
|
|
|
|
|
border-radius: 28rpx;
|
|
|
|
|
.aa{
|
|
|
|
|
padding-left: 40rpx;
|
|
|
|
|
padding-right: 40rpx;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
margin-top: 10rpx;
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: #808080;
|
|
|
|
|
}
|
|
|
|
|
.tit {
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
}
|
|
|
|
|
.cont_box {
|
|
|
|
|
margin-top: 32rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
.cont {
|
|
|
|
|
width: 25%;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
text-align: center;
|
|
|
|
|
.top {
|
|
|
|
|
width: 100%;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
}
|
|
|
|
|
.bot {
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.truebox {
|
|
|
|
|
width: 500rpx;
|
|
|
|
|
max-height: 380rpx;
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 40%;
|
|
|
|
|
left: 50%;
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
z-index: 99;
|
|
|
|
|
padding: 30rpx;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
.titvalue {
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
}
|
|
|
|
|
.truebtn {
|
|
|
|
|
display: flex;
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
.quxiao {
|
|
|
|
|
border-right: 1px solid #ccc;
|
|
|
|
|
}
|
|
|
|
|
view {
|
|
|
|
|
width: 50%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
height: 90rpx;
|
|
|
|
|
line-height: 90rpx;
|
|
|
|
|
border-top: 1px solid #ccc;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.jieshu {
|
|
|
|
|
width: 558rpx;
|
|
|
|
|
height: 90rpx;
|
|
|
|
|
line-height: 90rpx;
|
|
|
|
|
background: #8883F0;
|
|
|
|
|
border-radius: 54rpx 54rpx 54rpx 54rpx;
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
text-align: center;
|
|
|
|
|
position: fixed;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
bottom: 50rpx;
|
|
|
|
|
left: 50%;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
}
|
|
|
|
|
.zujie {
|
|
|
|
|
margin-top: 32rpx;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
width: 100%;
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
padding: 10rpx 20rpx;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);
|
2025-02-06 20:53:16 +08:00
|
|
|
|
.toptit {
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #333333;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
}
|
|
|
|
|
.emilist {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
margin-bottom: 28rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
view {
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
color: #808080;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.price_list {
|
2025-03-04 16:13:46 +08:00
|
|
|
|
padding: 20rpx;
|
|
|
|
|
margin-top: 30rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
box-sizing: border-box;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
background-color: #fff;
|
|
|
|
|
border-radius: 20rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
.top_price {
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #333333;
|
|
|
|
|
font-weight: 600;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
margin-bottom: 14rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
.jisuan {
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
color: #333333;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
margin-top: 16rpx;
|
|
|
|
|
margin-bottom: 10rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
}
|
|
|
|
|
.qian {
|
|
|
|
|
width: 100%;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
.yuan {
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
.yajin {
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
color: #808080;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.list_box {
|
|
|
|
|
.ulbox {
|
|
|
|
|
width: 100%;
|
|
|
|
|
overflow: scroll;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
margin-top: 20rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
.ulli {
|
|
|
|
|
display: flex;
|
|
|
|
|
width: 170vh;
|
|
|
|
|
.li {
|
|
|
|
|
flex: 1;
|
|
|
|
|
border: 1rpx solid #ccc;
|
|
|
|
|
text-align: center;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #8883F0;
|
|
|
|
|
height: 88rpx;
|
|
|
|
|
line-height: 88rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.olli {
|
|
|
|
|
display: flex;
|
|
|
|
|
width: 170vh;
|
|
|
|
|
.li {
|
|
|
|
|
flex: 1;
|
|
|
|
|
border: 1rpx solid #ccc;
|
|
|
|
|
text-align: center;
|
|
|
|
|
font-size: 22rpx;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
height: 88rpx;
|
|
|
|
|
line-height: 88rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.time_list {
|
|
|
|
|
width: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
.time_top {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
view {
|
|
|
|
|
font-size: 40rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.time_bot {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
view {
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
color: #666666;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.dltop {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 224rpx;
|
|
|
|
|
background: #8883F0;
|
|
|
|
|
border-radius: 16rpx 16rpx 16rpx 16rpx;
|
|
|
|
|
margin: auto;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
// margin-top: 36rpx;
|
2025-02-06 20:53:16 +08:00
|
|
|
|
padding-bottom: 20rpx;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
|
|
|
|
.dian_list {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
text-align: center;
|
|
|
|
|
font-size: 34rpx;
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
|
|
|
|
view {
|
|
|
|
|
width: 180rpx;
|
|
|
|
|
text-align: center;
|
|
|
|
|
margin-top: 22rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.botwz {
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.mask {
|
|
|
|
|
width: 750rpx;
|
|
|
|
|
height: 100vh;
|
|
|
|
|
background: #000000;
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
|
|
|
opacity: 0.2;
|
|
|
|
|
z-index: 1;
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tanc {
|
|
|
|
|
width: 610rpx;
|
|
|
|
|
height: 282rpx;
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
border-radius: 30rpx 30rpx 30rpx 30rpx;
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 628rpx;
|
|
|
|
|
left: 50%;
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
z-index: 2;
|
|
|
|
|
|
|
|
|
|
.tit {
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
margin-top: 28rpx;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input {
|
|
|
|
|
width: 504rpx;
|
|
|
|
|
height: 62rpx;
|
|
|
|
|
background: #EEEEEE;
|
|
|
|
|
border-radius: 6rpx 6rpx 6rpx 6rpx;
|
|
|
|
|
margin: auto;
|
|
|
|
|
margin-top: 22rpx;
|
|
|
|
|
padding-left: 20rpx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.xian {
|
|
|
|
|
width: 610rpx;
|
|
|
|
|
height: 2rpx;
|
|
|
|
|
background: #D8D8D8;
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
|
|
|
margin-top: 26rpx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.anniu {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
height: 98rpx;
|
|
|
|
|
|
|
|
|
|
text {
|
|
|
|
|
padding: 24rpx;
|
|
|
|
|
text-align: center;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
display: inline-block;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.masks {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100vh;
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 50%;
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
background-color: #000;
|
|
|
|
|
opacity: .6;
|
|
|
|
|
z-index: 998;
|
|
|
|
|
}
|
|
|
|
|
.tip_box {
|
|
|
|
|
position: fixed;
|
|
|
|
|
left: 72rpx;
|
|
|
|
|
top: 700rpx;
|
|
|
|
|
width: 610rpx;
|
|
|
|
|
background: #F7FAFE;
|
|
|
|
|
border-radius: 30rpx 30rpx 30rpx 30rpx;
|
|
|
|
|
z-index: 10000000;
|
|
|
|
|
|
|
|
|
|
.top {
|
|
|
|
|
padding: 52rpx 38rpx 42rpx 36rpx;
|
|
|
|
|
|
|
|
|
|
.txt {
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.bot {
|
|
|
|
|
border-top: 2rpx solid #D8D8D8;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
|
|
|
|
.bot_left {
|
|
|
|
|
width: 50%;
|
|
|
|
|
height: 98rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bot_right {
|
|
|
|
|
width: 50%;
|
|
|
|
|
height: 98rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
|
|
|
|
border-left: 2rpx solid #D8D8D8;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
color: #8883F0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.page {
|
2025-02-27 17:56:35 +08:00
|
|
|
|
-ms-overflow-style: none;
|
|
|
|
|
/* 去除IE和Edge的默认滚动条 */
|
|
|
|
|
scrollbar-width: none;
|
|
|
|
|
|
|
|
|
|
/* 去除Firefox的默认滚动条 */
|
|
|
|
|
&::-webkit-scrollbar {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
2025-02-06 20:53:16 +08:00
|
|
|
|
.zhuhu {
|
|
|
|
|
margin-top: 60rpx;
|
|
|
|
|
padding: 0 40rpx;
|
|
|
|
|
|
|
|
|
|
.card1 {
|
|
|
|
|
padding: 34rpx 0 0 40rpx;
|
|
|
|
|
width: 670rpx;
|
|
|
|
|
height: 260rpx;
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
box-shadow: 0rpx 14rpx 35rpx 0rpx rgba(53, 140, 255, 0.1);
|
|
|
|
|
border-radius: 28rpx 28rpx 0rpx 0rpx;
|
|
|
|
|
|
|
|
|
|
.top {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
.left {
|
|
|
|
|
font-size: 35rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #8883F0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.right {
|
|
|
|
|
margin-right: 56rpx;
|
|
|
|
|
|
|
|
|
|
.img1 {
|
|
|
|
|
width: 76rpx;
|
|
|
|
|
height: 76rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.mid {
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
align-content: flex-start;
|
|
|
|
|
|
|
|
|
|
.mid_left {
|
|
|
|
|
image {
|
|
|
|
|
width: 160rpx;
|
|
|
|
|
height: 160rpx;
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.mid_right {
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
|
|
|
|
.mid_top {
|
|
|
|
|
width: 100%;
|
|
|
|
|
font-size: 42rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.mid_bot {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
.txt {
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #95989D;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tip {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
margin-left: 19rpx;
|
|
|
|
|
// width: 38rpx;
|
|
|
|
|
// height: 23rpx;
|
|
|
|
|
padding: 0 10rpx;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
background: rgba(204, 204, 204, 0);
|
|
|
|
|
opacity: 1;
|
|
|
|
|
border: 2rpx solid #8883F0;
|
|
|
|
|
border-radius: 15rpx;
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #8883F0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bot {
|
|
|
|
|
margin-top: 53rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
.bot_left {
|
|
|
|
|
width: 210rpx;
|
|
|
|
|
height: 180rpx;
|
|
|
|
|
margin-right: 34rpx;
|
|
|
|
|
|
|
|
|
|
.echarts {
|
|
|
|
|
// width: 210rpx;
|
|
|
|
|
height: 200rpx;
|
|
|
|
|
|
|
|
|
|
.uni-ec-canvas {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100rpx !important;
|
|
|
|
|
display: block;
|
|
|
|
|
// margin-top: 30rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bot_right {
|
|
|
|
|
// margin-top: 50rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
// flex-wrap: nowrap;
|
|
|
|
|
width: 100%;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
padding-left: 210rpx;
|
|
|
|
|
padding-right: 80rpx;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
|
|
|
|
.cont {
|
|
|
|
|
.tit {
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
line-height: 49rpx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.txt {
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bot_right {
|
|
|
|
|
// margin-top: 50rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
// flex-wrap: nowrap;
|
|
|
|
|
width: 100%;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
padding-left: 220rpx;
|
|
|
|
|
padding-right: 80rpx;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
|
|
|
|
.cont {
|
|
|
|
|
.tit {
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
line-height: 49rpx;
|
|
|
|
|
margin-left: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.txt {
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.card2 {
|
|
|
|
|
padding-top: 0rpx;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
// background: #FFFFFF;
|
|
|
|
|
border-radius: 0 0 28rpx 28rpx;
|
2025-03-04 16:13:46 +08:00
|
|
|
|
padding-bottom: 30rpx;box-sizing: border-box;margin-top: 0;margin-top: 20rpx;padding: 0 20rpx;box-sizing: border-box;box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);
|
2025-02-06 20:53:16 +08:00
|
|
|
|
.tit {
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
|
|
|
|
|
font-size: 35rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #8883F0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cont_box {
|
|
|
|
|
margin-top: 32rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.cont {
|
|
|
|
|
width: 25%;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
|
|
|
|
.top {
|
|
|
|
|
width: 110rpx;
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bot {
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #262B37;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.card3 {
|
|
|
|
|
padding-top: 40rpx;
|
|
|
|
|
margin-top: 24rpx;
|
|
|
|
|
width: 670rpx;
|
|
|
|
|
// height: 318rpx;
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
// box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(53, 140, 255, 0.1);
|
|
|
|
|
border-radius: 28rpx;
|
|
|
|
|
padding-bottom: 20rpx;
|
|
|
|
|
|
|
|
|
|
.tit {
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
|
|
|
|
|
font-size: 35rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #8883F0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cont_box {
|
|
|
|
|
// padding-left: 30rpx;
|
|
|
|
|
// padding-right: 30rpx;
|
|
|
|
|
padding: 0 40rpx;
|
|
|
|
|
margin-top: 32rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
|
|
|
|
|
.cont:last-child {
|
|
|
|
|
margin-right: 0rpx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cont {
|
|
|
|
|
width: 112rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
margin-right: 80rpx;
|
|
|
|
|
|
|
|
|
|
.top {
|
|
|
|
|
image {
|
|
|
|
|
width: 56rpx;
|
|
|
|
|
height: 56rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bot {
|
|
|
|
|
margin-top: 15rpx;
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #808080;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.button {
|
|
|
|
|
margin-left: 76rpx;
|
|
|
|
|
margin-top: 178rpx;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
width: 520rpx;
|
|
|
|
|
height: 104rpx;
|
|
|
|
|
background: #8883F0;
|
|
|
|
|
box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1);
|
|
|
|
|
border-radius: 52rpx 52rpx 52rpx 52rpx;
|
|
|
|
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2024-03-13 10:54:22 +08:00
|
|
|
|
</style>
|