<template> <view class="page"> <u-navbar :title="tittxt" :border-bottom="false" :background="bgc" back-icon-color="#fff" title-color='#fff' title-size='36' height='50' id="navbar"> </u-navbar> <view class="zhuhu"> <view class="card1"> <view class="top"> <view class="left"> 设备 </view> <view class="right"> <!-- <image class="img1" src="https://api.ccttiot.com/smartmeter/img/static/uGvS4RQvbw7OOfhzy6xf" mode="" style="margin-right: 30rpx;" @click="opendevices"></image> <image class="img1" src="https://api.ccttiot.com/smartmeter/img/static/uNEKwe2WKsJdtQzOdEay" mode="" @click="toewm()"></image> --> </view> </view> <view class="mid"> <view class="mid_left"> <button style="border: 0;outline: none;width: 143rpx;padding-left: 0rpx;height: 143rpx;border-radius: 16rpx;" type="primary reverse" open-type="chooseAvatar" @chooseavatar="btnpic"> <image :src="imglist" mode="" style="width: 142rpx;height: 142rpx;border-radius: 20rpx;"></image> </button> <!-- <image :src="imglist" mode=""></image> --> </view> <view class="mid_right"> <view class="mid_top"> {{ deviceInfo.deviceName == null ? '' : deviceInfo.deviceName }} <view class="" style="font-size: 26rpx;margin-top: 8rpx;"> 更新时间:{{deviceInfo.lastPullTime == null ? '--' : deviceInfo.lastPullTime}}</view> </view> <view class="mid_bot"> <view class="txt" v-if="deviceInfo"> S/N码:{{ deviceInfo.deviceNo == null ? '' : deviceInfo.deviceNo }}</view> <div class="tip" v-if="deviceInfo.onlineStatus==1">在线</div> <div class="tip" v-if="deviceInfo.onlineStatus==0">离线</div> <div class="tip" v-if="deviceInfo.powerStatus==0">断电</div> <div class="tip" v-if="deviceInfo.powerStatus==1">正常</div> </view> </view> </view> <view class="bot"> <!-- <view class="bot_left"> <view class="echarts"> <l-echart ref="chart" @finished="initChart"></l-echart> <uni-ec-canvas class="uni-ec-canvas" id="uni-ec-canvas" ref="canvas" canvas-id="uni-ec-canvas" :ec="ec"> </uni-ec-canvas> </view> </view> --> <!-- <view class="bot_right"> <view class="cont" style="text-align: center;"> <view class="tit"> {{deviceInfo.orderAmount == null ? 0 : deviceInfo.orderAmount}} </view> <view class="txt"> 订单金额 </view> </view> <view class="cont" style="text-align: center;"> <view class="tit"> {{deviceInfo.orderCount == null ? 0 : deviceInfo.orderCount}} </view> <view class="txt"> 订单数 </view> </view> <view class="cont" style="text-align: center;"> <view class="tit"> {{timeday}} sb:{{setMode}} </view> <view class="txt"> 剩余分钟 </view> </view> </view> --> </view> </view> <view class="card2"> <view class="tit">实时</view> <!-- <view class="cont_box"> <view class="cont"> <view class="top">{{deviceInfo.realTimePower == null ? '' : deviceInfo.realTimePower}}KW</view> <view class="bot">实时功率</view> </view> <view class="cont" > <view class="top" style="width: 100%">{{deviceInfo.electricity == null ? '' : deviceInfo.electricity}}A</view> <view class="bot">电流</view> </view> <view class="cont" > <view class="top" style="width:100%">{{deviceInfo.voltage == null ? '' : deviceInfo.voltage}}V</view> <view class="bot">电压</view> </view> </view> --> <view class="bot_right"> <view class="cont" style="text-align: center;"> <view class="tit"> {{deviceInfo.orderAmount == null ? 0 : deviceInfo.orderAmount}} </view> <view class="txt"> 订单金额 </view> </view> <view class="cont" style="text-align: center;"> <view class="tit"> {{deviceInfo.orderCount == null ? 0 : deviceInfo.orderCount}} </view> <view class="txt"> 订单数 </view> </view> <view class="cont" style="text-align: center;"> <view class="tit"> {{timeday}} <!-- sb:{{setMode}} --> </view> <view class="txt"> 剩余分钟 </view> </view> </view> </view> <view class="card3"> <view class="tit">其他</view> <view class="cont_box" style="display: block;"> <view class="" style="display: flex;justify-content: space-between;"> <view class="cont" style="width: 120rpx;margin-right: 50rpx;" @click="topage(0)"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/uKrpw3p37UHW56IypPJU" mode="" style="width: 58rpx;height: 56rpx;"></image> </view> <view class="bot">充值记录</view> </view> <view class="cont" style="width: 60rpx;" @click="topage(1)"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/uaS4iFmD786AtBt2tKFs" mode="" style="width: 58rpx;height: 58rpx;"></image> </view> <view class="bot">归零</view> </view> <view class="cont" style="width: 60rpx;" @click="topage(2)"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/ue0X00T1C3fh7TCgjopm" mode="" style="width: 58rpx;height: 60rpx;"></image> </view> <view class="bot">异常</view> </view> <!-- <view class="cont" style="width: 120rpx;" @click="toydfx()"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/uDVSE5BFHQnjG2JTVE62" mode=""> </image> </view> <view class="bot">用电分析</view> </view> --> <view class="cont" style="width: 120rpx;" @click="topage(6)"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/uAnBmmayp3tVGwXntdaM" mode=""> </image> </view> <view class="bot">电量充值</view> </view> </view> <view class="" style="display: flex;margin-top: 20rpx;"> <view class="cont" style="width: 120rpx;margin-right: 50rpx;" @click="topage(3)"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/umjPUc8nDKf1JwVqRAeb" mode="" style="width: 58rpx;height: 60rpx;"></image> </view> <view class="bot">收费方式</view> </view> <view class="cont" style="width: 66rpx;" @click="topage(4)"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/u2Uco0iXf8aure0H2ihz" mode=""> </image> </view> <view class="bot">设置</view> </view> <view class="cont" style="width: 60rpx;" @click="topage(5)"> <view class="top"> <image src="https://api.ccttiot.com/smartmeter/img/static/uXdBHA7pzOv2LYL7stJp" mode=""> </image> </view> <view class="bot">配网</view> </view> </view> </view> <view class="cont_box" style="padding-left: 30rpx;"> </view> </view> </view> <view class="tanc" v-if="vipflag"> <view class="tit">请输入您需要充值的时长(分钟)</view> <input type="text" v-model="cztime" /> <view class="xian"></view> <view class="anniu"> <text @click="btnqx">取消</text> <text style="border-left: 1px solid #D8D8D8;color: #8883F0;" @click="trueje">确定</text> </view> </view> <view class="mask" v-if="vipflag"></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' let chart = null export default { components: { uniEcCanvas }, data() { return { bgc: { backgroundColor: "#8883f0", }, ec: { lazyLoad: true }, deviceInfo: {}, loadings: false, info: '', tittxt: "设备列表", titlist: [ "全部", "电表", "水表", ], curtitidx: 0, id: '', timeday: '', imglist: '', token: '', userImgs: '', imgflag: true, mac: "", name: '', deviceId: '', storeId: '', qrResult: '', devicesList: [], setMode:0, vipflag:false, cztime:'' } }, onLoad(option) { let id = option.id this.id = id this.getDevice(id) // xBlufi.initXBlufi(1); // xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent); // xBlufi.notifyStartDiscoverBle({ // 'isStart': true // }) // 停止蓝牙搜索 // setTimeout(() => { // xBlufi.notifyStartDiscoverBle({ // 'isStart': false // }); // xBlufi.notifyConnectBle({ // isStart: true, // deviceId: this.deviceId, // name: this.name // }) // xBlufi.notifyInitBleEsp32({ // deviceId: this.deviceId // }); // }, 2000) }, onShow() { setTimeout(() => { this.getDevice(this.id) }, 1000) this.getQiniuToken() }, onUnload: function() { xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent); xBlufi.notifyStartDiscoverBle({ 'isStart': false }); wx.closeBLEConnection({ deviceId: this.objlist.deviceId, }) }, onHide() { xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent); xBlufi.notifyStartDiscoverBle({ 'isStart': false }); wx.closeBLEConnection({ deviceId: this.objlist.deviceId, }) }, onBeforeUnmount() { xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent); xBlufi.notifyStartDiscoverBle({ 'isStart': false }); wx.closeBLEConnection({ deviceId: this.objlist.deviceId, }) }, methods: { getQiniuToken() { this.$u.get("/common/qiniu/uploadInfo").then((res) => { if (res.code == 200) { this.token = res.token } }); }, btnpic(e) { let _this = this let math = 'static/' + _this.$u.guid(20) const tempFilePaths = e.detail.avatarUrl wx.uploadFile({ url: 'https://up-z2.qiniup.com', name: 'file', filePath: tempFilePaths, formData: { token: _this.token, key: 'smartmeter/img/' + math }, success: function(res) { let str = JSON.parse(res.data) console.log(str.key) _this.userImgs = 'https://api.ccttiot.com/' + str.key _this.imglist = _this.userImgs _this.imgflag = false let data = { deviceId:_this.id, customPicture:_this.imglist } _this.putdevice(data) } }) }, putdevice(data) { this.$u.put('/app/device', data).then((res) => { if (res.code == 200) { uni.showToast({ title: '修改成功', icon: 'success', duration: 2000 }) } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) }, // 获取设备详情 getDevice(id) { this.$u.get("/app/device/" + id).then((res) => { // this.$forceUpdate() if (res.code == 200) { this.deviceInfo = res.data this.storeId = res.data.storeId this.qrResult = 'CTKG-' + res.data.mac if (res.data.customPicture != null) { this.imglist = res.data.customPicture } else { this.imglist = res.data.picture } if(this.deviceInfo.expireTime == null){ this.timeday = 0 }else{ let expireTimeStr = this.deviceInfo.expireTime 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; if (differenceInMs <= 0) { this.timeday = 0 } else { this.timeday = Math.abs(Math.floor(differenceInMs / (1000 * 60))); } } this.loadings = true } }); }, opendevice() { let stause = 0 if (this.deviceInfo.powerStatus == 1) { stause = 0 } else { stause = 1 } console.log(stause, 'stausestause'); this.$u.put(`/app/device/${this.deviceInfo.deviceId}/changePower?status=` + stause).then((res) => { // this.$forceUpdate() if (res.code == 200) { // this.groupList=res.rows setTimeout(() => { this.getDevice(this.id) }, 2000) // this.loadings=true // this.initChart() } else { uni.showToast({ title: res.msg, icon: 'none' }); } }); }, opendevices() { }, swiperchange(e) { this.curtitidx = e.detail.current console.log(e, 'aaaa'); }, changeidx(index) { this.curtitidx = index }, toydfx() { uni.navigateTo({ url: "/page_components/eletj?id=" + this.id }) }, // 其他部分 点击进行跳转 topage(num) { if (num == 0) { uni.navigateTo({ //抄表 url: '/page_user/cbRecord?id=' + this.id }) } else if (num == 1) { let that = this uni.showModal({ title: '提示', content: '您确定要将电表时间归零吗?', success: function(res) { if (res.confirm) { //归零 that.$u.put(`/app/device/${that.id}/reset`).then((res) => { if (res.code == 200) { console.log(res.data); uni.showToast({ title: res.data, icon: 'none', duration: 2000 }) that.getDevice(that.id) } else if (res.msg == '设备剩余时间不足,无需归零') { uni.showToast({ title: '设备剩余时间不足,无需归零', icon: 'none', duration: 2000 }) }else if(res.code == 500){ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) // uni.showLoading({ // title: '充值中...' // }) // let vm = this; // 将外部的 this 绑定到 vm 上 // uni.getNetworkType({ // success(res) { // if (res.networkType !== 'none') { // uni.getConnectedBluetoothDevices({ // success(res) { // console.log('已连接的蓝牙设备信息:', res); // xBlufi.notifySendCustomData({ // customData: "time@" + 0 // }); // }, // fail(err) { // console.error('获取已连接蓝牙设备信息失败:', err); // } // }) // // vm.$u.get(`/app/bill/recharge/${vm.billNo}/bluetoothSuccess`).then(res => { // // if(res.code == 200){ // // setTimeout(()=>{ // // uni.hideLoading() // // uni.navigateBack() // // },1000) // // } // // }) // } else { // console.log('手机未连接网络'); // } // } // }) } }) } else if (res.cancel) { console.log('用户点击了取消'); } } }) } else if (num == 2) { //异常 uni.navigateTo({ url: '/page_fenbao/statulist/fault/yichang/index' }) } else if (num == 3) { uni.navigateTo({ url: "/page_fenbao/statulist/taocanlist/index?id=" + this.id }) } else if (num == 4) { //设置 uni.navigateTo({ url: '/page_user/setting?id=' + this.id }) } else if (num == 5) { if(this.deviceId == ''){ xBlufi.initXBlufi(1); xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent); xBlufi.notifyStartDiscoverBle({ 'isStart': true }) // 停止蓝牙搜索 setTimeout(() => { xBlufi.notifyStartDiscoverBle({ 'isStart': false }); xBlufi.notifyConnectBle({ isStart: true, deviceId: this.deviceId, name: this.name }) xBlufi.notifyInitBleEsp32({ deviceId: this.deviceId }) let name = '' let index = this.name.indexOf('-'); if (index !== -1) { name = this.name.slice(index + 1); } let data = { storeId: this.storeId, mac: this.mac } this.$u.put('/app/device/bind', data).then((res) => { if (res.code == 200) { uni.showToast({ title: '绑定成功', icon: 'success', duration: 2000 }) uni.hideLoading(); uni.removeStorageSync('mac'); let systemInfo = uni.getSystemInfoSync(); if (systemInfo.platform == 'android') { // 当前设备是 Android uni.navigateTo({ url: '/page_components/wifilist/index?deviceId=' +this.deviceId + '&name=' +this.name }) } else if (systemInfo.platform == 'ios') { // 当前设备是 iOS uni.navigateTo({ url: '/page_fenbao/device/wifivideo?deviceId=' +this.deviceId + '&name=' +this.name }) } } else if (res.msg == '设备编号和mac不能同时为空') { uni.showToast({ title: '设备不在线,未找到设备', icon: 'none', duration: 2000 }); } else { uni.showToast({ title: '连接失败', icon: 'none', duration: 2000 }); // uni.navigateBack() } }) }, 1000) }else{ let name = '' let index = this.name.indexOf('-'); if (index !== -1) { name = this.name.slice(index + 1); } let data = { storeId: this.storeId, mac: this.mac } this.$u.put('/app/device/bind', data).then((res) => { if (res.code == 200) { uni.showToast({ title: '绑定成功', icon: 'none', duration: 2000 }) uni.hideLoading(); uni.removeStorageSync('mac'); let systemInfo = uni.getSystemInfoSync(); if (systemInfo.platform == 'android') { // 当前设备是 Android uni.navigateTo({ url: '/page_components/wifilist/index?deviceId=' +this.deviceId + '&name=' +this.name }) } else if (systemInfo.platform == 'ios') { // 当前设备是 iOS uni.navigateTo({ url: '/page_fenbao/device/wifivideo?deviceId=' +this.deviceId + '&name=' +this.name }) } } else if (res.msg == '设备编号和mac不能同时为空') { uni.showToast({ title: '设备不在线,未找到设备', icon: 'none', duration: 2000 }) } else { uni.showToast({ title: '连接失败', icon: 'none', duration: 2000 }); // uni.navigateBack() } }) } }else if(num == 6){ this.vipflag = true } }, trueje(){ let id = this.deviceInfo.deviceId this.vipflag = false this.$u.put('/app/device/addTime/' + id + '?amount=' + this.cztime).then(res => { if(res.code == 200){ uni.showToast({ title: '充值成功', icon: 'success', duration: 2000 }) this.getDevice(this.id) this.cztime = '' }else if(res.code == 500){ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) // let vm = this; // 将外部的 this 绑定到 vm 上 // uni.getNetworkType({ // success(res) { // if (res.networkType !== 'none') { // uni.getConnectedBluetoothDevices({ // success(res) { // console.log('已连接的蓝牙设备信息:', res); // xBlufi.notifySendCustomData({ // customData: "time@" + vm.setMode + vm.cztime // }); // }, // fail(err) { // console.error('获取已连接蓝牙设备信息失败:', err); // } // }) // // vm.$u.get(`/app/bill/recharge/${vm.billNo}/bluetoothSuccess`).then(res => { // // if(res.code == 200){ // // setTimeout(()=>{ // // uni.hideLoading() // // uni.navigateBack() // // },1000) // // } // // }) // } else { // console.log('手机未连接网络'); // } // } // }) } }) }, btnqx(){ this.vipflag = false this.cztime = '' }, funListenDeviceMsgEvent: function(options) { switch (options.type) { case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_MY_DATA: let loadPercent = options.data; let loadText = '文件读取中' // console.log("文件读取中", options.data); break; case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA: let ver_data = this.parseCustomData(options.data) this.setMode = Math.floor(ver_data.setMode / 60) console.log("1收到设备发来的自定义数据结果:", ver_data,this.setMode); break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS: if (options.result) { let devicesarr = options.data // console.log(devicesarr,'devicesarrdevicesarr'); devicesarr.forEach(device => { const mac = device.name.substring(5); if (device.name == this.qrResult) { this.deviceId = device.deviceId this.name = device.name this.mac = device.name.slice(5, 17) // console.log(this.mac, 'macmacmac'); // this.devicesList = uniqueDevicesList; } }) } break; case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED: // console.log("连接回调:" + JSON.stringify(options)); if (options.result) { uni.hideLoading(); // uni.showToast({ // title: '连接成功', // icon: 'none' // }); { console.log("连接回调options.data.deviceId:" + options.data.deviceId, "连接回调options.data.name:" + options.data.name); } } else { uni.hideLoading() uni.showToast({ title: '设备离线或不在范围内', icon: 'none', duration: 2000 }) } break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START: if (!options.result) { console.log("蓝牙未开启", options); uni.showToast({ title: '蓝牙未开启', icon: 'none', duration: 3000 }); } else { // this.searching = true //蓝牙搜索开始 // _this.setData({ // searching: true // }); } break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP: if (options.result) { let uniqueDevicesList = Array.from(new Set(this.devicesList)); // 将去重后的数组重新赋值给 this.devicesList this.devicesList = uniqueDevicesList; let list = [] filteredDevices.forEach(device => { // 从设备名称中提取 MAC 地址(假设 MAC 地址是设备名称的后6个字符) let macFromName = device.name.substring(device.name.length - 12); this.$u.get(`/app/device/${macFromName}/isBind`).then((res) => { if (res.data == false) { list.push(device) } else { } }) }); setTimeout(() => { this.devicesList = list }, 200) console.log('蓝牙停止搜索ok'); } else { //蓝牙停止搜索失败 console.log('蓝牙停止搜索失败'); } this.searching = false // _this.setData({ // searching: false // }); break; } }, parseCustomData(data) { // 将字符串按照 "@" 分割成数组 const dataArray = data.split('@'); // 根据约定,解析各个字段的值 const voltage = parseFloat(dataArray[0].substring(1)); // 去除前缀 "V",并将字符串转换为浮点数 const switchState = dataArray[1].substring(1); // 去除前缀 "S" const current = parseFloat(dataArray[2].substring(1)); // 去除前缀 "A",并将字符串转换为浮点数 const power = parseFloat(dataArray[4].substring(1)); // 去除前缀 "P",并将字符串转换为浮点数 const remainingPower = parseFloat(dataArray[5].substring(1)); // 去除前缀 "M",并将字符串转换为浮点数 const setMode = dataArray[6].substring(1); // 去除前缀 "T" // 返回解析后的数据对象 return { voltage, switchState, current, power, remainingPower, setMode }; }, } } </script> <style lang="scss"> /deep/ .u-title { padding-bottom: 22rpx; } /deep/ .u-icon__icon { padding-bottom: 22rpx; } page { background-color: #F7FAFE; } .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; } } } .page { .zhuhu { margin-top: 60rpx; padding: 0 40rpx; .card1 { padding: 34rpx 0 0 40rpx; width: 670rpx; height: 320rpx; background: #FFFFFF; box-shadow: 0rpx 14rpx 35rpx 0rpx rgba(53, 140, 255, 0.1); border-radius: 28rpx 28rpx 28rpx 28rpx; .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: 80rpx; padding-right: 120rpx; 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: 80rpx; padding-right: 120rpx; box-sizing: border-box; margin-top: 30rpx; .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: 40rpx; margin-top: 24rpx; width: 670rpx; height: 254rpx; background: #FFFFFF; box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(53, 140, 255, 0.1); border-radius: 28rpx; .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; } } } </style>