|
@@ -0,0 +1,1120 @@
|
|
|
+<template>
|
|
|
+ <view class="container">
|
|
|
+ <u-navbar title="设备详情"
|
|
|
+ @rightClick="rightClick" titleStyle="color:#fff;fontSize:36rpx;" bgColor="#2C6FF3"
|
|
|
+ :autoBack="true" leftIconColor="#fff" :placeholder="true">
|
|
|
+ </u-navbar>
|
|
|
+ <view class="content">
|
|
|
+ <view class="xy-card">
|
|
|
+ <view class="top">
|
|
|
+ <view>
|
|
|
+ <view class="t-left">
|
|
|
+ <view v-if="detail.deviceName">{{detail.deviceName}}<text
|
|
|
+ style="color: #666;font-size: 26rpx;">({{detail.deviceId}})</text></view>
|
|
|
+ <view v-else>{{detail.deviceId}}</view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="flex" style="white-space: nowrap;">
|
|
|
+ <view :class="[detail.netStateName=='在线'?'t-right':'t-right off']">
|
|
|
+ {{detail.netStateName||'离线'}}
|
|
|
+ </view>
|
|
|
+ <view :class="[detail.busyState==1?'t-right':'t-right off']">
|
|
|
+ {{detail.busyState==1?'运营中':'已停运'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ </view>
|
|
|
+ <view class="flex flex-between" style="margin-top: 24rpx;">
|
|
|
+ <view>
|
|
|
+ <xbutton v-show="activityState.length>0" round='25rpx' padding='4rpx 10rpx' size="mini" style="margin-right:12rpx;" :bgColor="activityState=='异常'?'#ff0000':'#66CC00'"
|
|
|
+ color="#fff" >{{activityState}}</xbutton>
|
|
|
+ <xbutton round='25rpx' padding='4rpx 10rpx' size="mini" style="margin-right:12rpx;" :bgColor="detail.deviceStatus.doorStateL==2?'#66CC00':'#FFCC33'"
|
|
|
+ color="#fff" >{{detail.deviceStatus.doorStateL==2?'已关门':'已开门'}}</xbutton>
|
|
|
+
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="flex-between">
|
|
|
+ <xbutton size="mini" style="margin-right:12rpx;" bgColor="#fff" borderColor="#2C6FF3"
|
|
|
+ color="#2C6FF3" @click="downloadQr">下载柜门二维码</xbutton>
|
|
|
+ <xbutton size="mini" @click="btnClick('编辑')">编辑</xbutton>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view :class="[isMore?'center center-more':'center']">
|
|
|
+ <view class="d-line">
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 编号:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.deviceId||'/'}}
|
|
|
+ <text @click="copy(detail.deviceId)" v-if="detail.mercDeviceCode">复制</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 商户:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.mercName||'/'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="d-line">
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 温度:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.deviceStatus.tempValue}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 信号强度:
|
|
|
+ </view>
|
|
|
+ <view class="val net">
|
|
|
+ {{detail.deviceStatus.netDbm||'/'}}d<text
|
|
|
+ v-if="detail.deviceStatus.netDbm<-90">(弱)</text>
|
|
|
+ <text
|
|
|
+ v-else-if="detail.deviceStatus.netDbm>-90&&detail.deviceStatus.netDbm<-40">(中)</text>
|
|
|
+ <text
|
|
|
+ v-else-if="detail.deviceStatus.netDbm>-40&&detail.deviceStatus.netDbm<0">(强)</text>
|
|
|
+ <text v-else-if="detail.deviceStatus.netDbm==0">(无)</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 流量卡号:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.deviceSysinfo.simIccid||'/'}} <text @tap="detail.deviceSysinfo.simIccid"> 复制</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 软件版本:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.deviceSysinfo.appUpmVersion||'/'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 最后更新时间:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.updateTime||'/'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 激活状态:
|
|
|
+ </view>
|
|
|
+ <view class="val" v-if="detail.activeState==1">
|
|
|
+ 已激活
|
|
|
+ </view>
|
|
|
+ <view class="val" v-else>
|
|
|
+ 未激活
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 激活时间:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.activeTime||'/'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 区域:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.districtName||'/'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="d-line">
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 点位:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.placeName||'/'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 线路:
|
|
|
+ </view>
|
|
|
+ <view class="val">
|
|
|
+ {{detail.placeLineName||'/'}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="c-item">
|
|
|
+ <view class="name">
|
|
|
+ 设备位置:
|
|
|
+ </view>
|
|
|
+ <view class="val" @click="showPos" style="width:120rpx;">
|
|
|
+ <u-icon slot="right" size="20" name="map"></u-icon>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="unfold" @click="isMore=!isMore">
|
|
|
+ <u-icon :name="isMore?'arrow-down':'arrow-up'" color="#999" size="20"></u-icon>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="bot">
|
|
|
+ <view>
|
|
|
+ <button class="cu-btn cu-btn1" style="width:150rpx;" @click="btnClick('设备重启')">设备重启</button>
|
|
|
+ </view>
|
|
|
+ <view>
|
|
|
+ <button class="cu-btn cu-btn2" style="width:140rpx;" @click="btnClick('声音设置')">声音设置</button>
|
|
|
+ </view>
|
|
|
+ <view>
|
|
|
+ <button class="cu-btn cu-btn2" style="width: 140rpx;" @click="btnClick('温度设置')">温度设置</button>
|
|
|
+ </view>
|
|
|
+ <view>
|
|
|
+ <button class="cu-btn cu-btn2" style="width: 140rpx;" @click="btnClick('灯光设置')">灯光设置</button>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ </view>
|
|
|
+ <view class="bot">
|
|
|
+ <view>
|
|
|
+ <button class="cu-btn cu-btn2" style="width: 140rpx;" @click="btnClick('清除故障')">清除故障</button>
|
|
|
+ </view>
|
|
|
+ <view>
|
|
|
+ <button class="cu-btn cu-btn3" style="width: 140rpx;"
|
|
|
+ @click="btnClick(btnState)">{{btnState}}</button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="xy-card" style="width:750rpx;margin-left: -24rpx;border-radius: 0;">
|
|
|
+ <u-tabs :list="chartTab" :scrollable="false" @click="tabClick" lineColor="#2C6FF3"></u-tabs>
|
|
|
+ </view>
|
|
|
+ <view class="xy-card">
|
|
|
+ <view class="chart-content">
|
|
|
+ <view class="total" v-if="current=='经营数据'">
|
|
|
+ <view style="width:200rpx;">
|
|
|
+ <u-subsection activeColor="#2C6FF3" :list="totalTab" :current="time" @change="totalChange">
|
|
|
+ </u-subsection>
|
|
|
+ </view>
|
|
|
+ <view class="t-content">
|
|
|
+ <view class="t-item">
|
|
|
+ <view class="t-name">
|
|
|
+ 销售额
|
|
|
+ </view>
|
|
|
+ <view class="t-num">
|
|
|
+ ¥<text>{{$xy.delMoney(countData.salesMoney)}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="t-item">
|
|
|
+ <view class="t-name">
|
|
|
+ 订单数
|
|
|
+ </view>
|
|
|
+ <view class="t-num">
|
|
|
+ <text>{{countData.salesCount||0}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="t-item">
|
|
|
+ <view class="t-name">
|
|
|
+ 退款
|
|
|
+ </view>
|
|
|
+ <view class="t-num">
|
|
|
+ ¥<text>{{$xy.delMoney(countData.refundMoney)}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="more-data">
|
|
|
+ <xbutton width="140" @click="orderDetails">
|
|
|
+ 交易明细
|
|
|
+ </xbutton>
|
|
|
+ <xbutton style="margin-left: 20rpx;" width="140" @click="more">
|
|
|
+ 销售统计
|
|
|
+ </xbutton>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="chart" style="height: 600rpx;" v-else>
|
|
|
+ <qiun-data-charts canvasId="canvasString" :canvas2d="true" :ontouch="true" type="line"
|
|
|
+ :opts="opts" :chartData="chartData" :errorMessage="errorMessage" />
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="xy-card">
|
|
|
+ <view class="title">
|
|
|
+ 商品管理
|
|
|
+ </view>
|
|
|
+ <view class="t-content">
|
|
|
+ <view class="t-item">
|
|
|
+ <view class="t-name">
|
|
|
+ 在售商品种类
|
|
|
+ </view>
|
|
|
+ <view class="t-num">
|
|
|
+ <text>{{goodsManageData.categoryNum||0}}</text>种
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="t-item">
|
|
|
+ <view class="t-name">
|
|
|
+ 在售库存
|
|
|
+ </view>
|
|
|
+ <view class="t-num">
|
|
|
+ <text>{{goodsManageData.stock||0}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="t-item">
|
|
|
+ <view class="t-name">
|
|
|
+ 上次补货后库存
|
|
|
+ </view>
|
|
|
+ <view class="t-num">
|
|
|
+ <text>{{goodsManageData.afterFillStock||0}}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="bot bot1">
|
|
|
+ <button class="cu-btn cu-btn2" style="width:140rpx;"
|
|
|
+ @click="$tab.navigateTo(`/pages/equipment/comManage?id=${id}&deviceName=${detail.deviceName}`)">管理商品</button>
|
|
|
+ <button class="cu-btn cu-btn2" style="width: 140rpx;margin:0 12rpx;"
|
|
|
+ @click="$tab.navigateTo(`/pages/replenish/replenishmentRecord?id=${id}`)">补货记录</button>
|
|
|
+ <button class="cu-btn cu-btn3" style="width: 140rpx;"
|
|
|
+ @click="$tab.navigateTo(`/pages/replenish/replenishmentHomePage?id=${id}&&deviceName=${detail.deviceName}`)">补货</button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <xpopup :show="qrcodeShow" mode="center" @close="qrcodeClose" :showBtn="false">
|
|
|
+ <view class="qrcode-content flex flex-direction align-center">
|
|
|
+ <view class="canvas-box">
|
|
|
+ <u--image width="400rpx" height="400rpx" :src="qrCodeImg" mode="aspectFit"
|
|
|
+ :lazy-load="true"></u--image>
|
|
|
+ </view>
|
|
|
+ <view class="save-qrcode" slot="botton">
|
|
|
+ <xbutton @click="handleImgSave">保存二维码</xbutton>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </xpopup>
|
|
|
+
|
|
|
+ <!-- <view class="xy-card">
|
|
|
+ <view class="title">
|
|
|
+ 在线情况
|
|
|
+ </view>
|
|
|
+ <scroll-view style="height: 410rpx;" scroll-y>
|
|
|
+ <view class="l-content" v-if="netRecords&&netRecords.length>0">
|
|
|
+ <view class="l-item" v-for="(item,index) in netRecords" :key="item.id">
|
|
|
+ <view class="l-time">
|
|
|
+ {{item.createTime}}
|
|
|
+ </view>
|
|
|
+ <view class="l-status">
|
|
|
+ {{item.netStatus}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="l-content" v-else>
|
|
|
+ <u-empty text="没有记录~"></u-empty>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="xy-card">
|
|
|
+ <view class="title">
|
|
|
+ 锁异常记录
|
|
|
+ </view>
|
|
|
+ <scroll-view style="height: 410rpx;" scroll-y>
|
|
|
+ <view class="l-content" v-if="errRecordLock&&errRecordLock.length>0">
|
|
|
+ <view class="l-item" v-for="(item,index) in errRecordLock" :key="item.id">
|
|
|
+ <view class="l-time">
|
|
|
+ {{item.createTime}}
|
|
|
+ </view>
|
|
|
+ <view class="l-status">
|
|
|
+ {{item.errorDescript}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="l-content" v-else>
|
|
|
+ <u-empty text="设备状态很好,没有异常~"></u-empty>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="xy-card">
|
|
|
+ <view class="title">
|
|
|
+ 摄像头故障记录
|
|
|
+ </view>
|
|
|
+ <scroll-view style="height: 410rpx;" scroll-y>
|
|
|
+ <view class="l-content" v-if="errRecordCamera&&errRecordCamera.length>0">
|
|
|
+ <view class="l-item" v-for="(item,index) in errRecordCamera" :key="item.id">
|
|
|
+ <view class="l-time">
|
|
|
+ {{item.createTime}}
|
|
|
+ </view>
|
|
|
+ <view class="l-status">
|
|
|
+ {{item.errorDescript}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="l-content" v-else>
|
|
|
+ <u-empty text="设备状态很好,没有任何故障~"></u-empty>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="xy-card">
|
|
|
+ <view class="title">
|
|
|
+ 温度记录
|
|
|
+ </view>
|
|
|
+ <scroll-view style="height: 410rpx;" scroll-y>
|
|
|
+ <view class="l-content" v-if="deviceTempRecords&&deviceTempRecords.length>0">
|
|
|
+ <view class="l-item" v-for="(item,index) in deviceTempRecords" :key="item.id">
|
|
|
+ <view class="l-time">
|
|
|
+ {{item.createTime}}
|
|
|
+ </view>
|
|
|
+ <view class="l-status">
|
|
|
+ 温度为:{{item.tempValue}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="l-content" v-else>
|
|
|
+ <u-empty text="没有温度信息~"></u-empty>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="xy-card">
|
|
|
+ <view class="title">
|
|
|
+ 操作记录
|
|
|
+ </view>
|
|
|
+ <scroll-view style="height: 410rpx;" scroll-y>
|
|
|
+ <view class="l-content" v-if="operaRecords&&operaRecords.length>0">
|
|
|
+ <view class="l-item" v-for="(item,index) in operaRecords" :key="item.id">
|
|
|
+ <view class="l-time">
|
|
|
+ {{item.createTime}}
|
|
|
+ </view>
|
|
|
+ <view class="l-status">
|
|
|
+ {{item.changeBefore}}变更为{{item.changeAfter}}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="l-content" v-else>
|
|
|
+ <u-empty text="没有任何记录~"></u-empty>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view> -->
|
|
|
+
|
|
|
+ <xpopup :show="show" @close="close" @confirm="submit" :showBtn="true" :title="title">
|
|
|
+ <!-- 设备编辑 -->
|
|
|
+ <view class="popup-content" v-if="title=='编辑'">
|
|
|
+ <u--form labelPosition="left" :model="editForm">
|
|
|
+ <u-form-item labelWidth="90" label="名称" prop="name" borderBottom ref="item1">
|
|
|
+ <u--input placeholder="设置机器名称" v-model="editForm.name" border="none"></u--input>
|
|
|
+ </u-form-item>
|
|
|
+ <u-form-item labelWidth="90" label="区域" prop="areaName" borderBottom ref="item1"
|
|
|
+ @click.native="areaChoose">
|
|
|
+ <u--input placeholder="设置机器区域" v-model="editForm.areaName" readonly
|
|
|
+ border="none"></u--input>
|
|
|
+ </u-form-item>
|
|
|
+ <u-form-item labelWidth="90" label="线路" prop="lineName" borderBottom ref="item1"
|
|
|
+ @click.native="lineChoose">
|
|
|
+ <u--input placeholder="设置机器线路" v-model="editForm.lineName" readonly
|
|
|
+ border="none"></u--input>
|
|
|
+ </u-form-item>
|
|
|
+ <u-form-item labelWidth="90" label="点位" prop="placeName" borderBottom ref="item1"
|
|
|
+ @click.native="placeChoose">
|
|
|
+ <u--input placeholder="设置机器点位" v-model="editForm.placeName" readonly
|
|
|
+ border="none"></u--input>
|
|
|
+ </u-form-item>
|
|
|
+ <u-form-item labelWidth="90" label="位置" prop="lon" borderBottom @click.native="getLocation">
|
|
|
+ <u--input placeholder="设置机器位置" readonly v-model="devicePos" border="none"></u--input>
|
|
|
+ <u-icon slot="right" size="26" name="map"></u-icon>
|
|
|
+ </u-form-item>
|
|
|
+ </u--form>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 设备重启 -->
|
|
|
+ <view class="popup-content restart" v-if="title=='设备重启'">
|
|
|
+ 是否确定重启设备?
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 暂停营业 -->
|
|
|
+ <view class="popup-content restart" v-if="title=='暂停营业'||title=='开始营业'">
|
|
|
+ 是否确定{{btnState}}?
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 声音设置 -->
|
|
|
+ <view class="popup-content" v-if="title=='声音设置'">
|
|
|
+ <u-slider :showValue="true" min="0" max="25" v-model="voice"></u-slider>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 温度设置 -->
|
|
|
+ <view class="popup-content temp" v-if="title=='温度设置'">
|
|
|
+ <view class="flex" style="margin-top: 0;">
|
|
|
+ <view class="lab" style="margin-top: -10rpx;">工作模式:</view>
|
|
|
+ <u-radio-group v-model="tempDetail.selTempWorkModel" placement="row">
|
|
|
+ <u-radio :customStyle="{marginBottom:'16rpx',marginLeft:'16rpx'}"
|
|
|
+ v-for="(item, index) in tempWorkModels" :key="index" :label="item.name" :name="item.id">
|
|
|
+ </u-radio>
|
|
|
+ </u-radio-group>
|
|
|
+ </view>
|
|
|
+ <view class="flex" style="margin-top: 0rpx; margin-bottom: 20rpx;">
|
|
|
+ <view class="lab">工作温度(℃):</view>
|
|
|
+ <view style=" margin-left: 20rpx;">
|
|
|
+ <u-number-box button-size="30" v-model="tempDetail.targetTemp" class='martop'>
|
|
|
+ </u-number-box>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="info">时段设置为X点至Y点,结束时间需大于起始时间</view>
|
|
|
+ <view class="flex align-center">
|
|
|
+ <view class="lab">时段1:</view>
|
|
|
+ <view class="flex align-center date-container marleft"
|
|
|
+ style="padding-left: 10rpx; padding-right: 10rpx;" @tap="pickerTimes('temp',0)">
|
|
|
+ <view class="time-box">
|
|
|
+ {{tempDetail.start1}}
|
|
|
+ </view>
|
|
|
+ <view class="lab to">至</view>
|
|
|
+ <view class="time-box">{{tempDetail.end1}}</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="flex align-center">
|
|
|
+ <view class="lab">时段2:</view>
|
|
|
+ <view class="flex align-center date-container marleft"
|
|
|
+ style="padding-left: 10rpx; padding-right: 10rpx;" @tap="pickerTimes('temp',1)">
|
|
|
+ <view class="time-box">
|
|
|
+ {{tempDetail.start2}}
|
|
|
+ </view>
|
|
|
+ <view class="lab to">至</view>
|
|
|
+ <view class="time-box">{{tempDetail.end2}}</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="flex align-center">
|
|
|
+ <view class="lab">时段3:</view>
|
|
|
+ <view class="flex align-center date-container marleft"
|
|
|
+ style="padding-left: 10rpx; padding-right: 10rpx;" @tap="pickerTimes('temp',2)">
|
|
|
+ <view class="time-box">
|
|
|
+ {{tempDetail.start3}}
|
|
|
+ </view>
|
|
|
+ <view class="lab to">至</view>
|
|
|
+ <view class="time-box">{{tempDetail.end3}}</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view style="height: 20rpx;"></view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 灯光设置 -->
|
|
|
+ <view class="popup-content temp" v-if="title=='灯光设置'">
|
|
|
+ <!-- <view class="flex" style="margin-top: 0;">
|
|
|
+ <view class="lab" style="margin-top: -10rpx;">是否打开:</view>
|
|
|
+ <u-switch v-model="lightDetail.open"></u-switch>
|
|
|
+ </view> -->
|
|
|
+
|
|
|
+ <view class="info">时段设置为X点至Y点,结束时间需大于起始时间</view>
|
|
|
+ <view class="flex align-center">
|
|
|
+ <view class="lab">时段1:</view>
|
|
|
+ <view class="flex align-center date-container marleft"
|
|
|
+ style="padding-left: 10rpx; padding-right: 10rpx;" @tap="pickerTimes('light',0)">
|
|
|
+ <view class="time-box">
|
|
|
+ {{lightDetail.start1}}
|
|
|
+ </view>
|
|
|
+ <view class="lab to">至</view>
|
|
|
+ <view class="time-box">{{lightDetail.end1}}</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="flex align-center">
|
|
|
+ <view class="lab">时段2:</view>
|
|
|
+ <view class="flex align-center date-container marleft"
|
|
|
+ style="padding-left: 10rpx; padding-right: 10rpx;" @tap="pickerTimes('light',1)">
|
|
|
+ <view class="time-box">
|
|
|
+ {{lightDetail.start2}}
|
|
|
+ </view>
|
|
|
+ <view class="lab to">至</view>
|
|
|
+ <view class="time-box">{{lightDetail.end2}}</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="flex align-center">
|
|
|
+ <view class="lab">时段3:</view>
|
|
|
+ <view class="flex align-center date-container marleft"
|
|
|
+ style="padding-left: 10rpx; padding-right: 10rpx;" @tap="pickerTimes('light',2)">
|
|
|
+ <view class="time-box">
|
|
|
+ {{lightDetail.start3}}
|
|
|
+ </view>
|
|
|
+ <view class="lab to">至</view>
|
|
|
+ <view class="time-box">{{lightDetail.end3}}</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view style="height: 20rpx;"></view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 清除故障 -->
|
|
|
+ <view class="popup-content restart" v-if="title=='清除故障'">
|
|
|
+ 是否确定清除故障?
|
|
|
+ </view>
|
|
|
+ </xpopup>
|
|
|
+
|
|
|
+
|
|
|
+ <!-- 区域选择弹框 -->
|
|
|
+ <xpopup :show="areaShow" @close="areaClose" :showBtn="false" title="选择区域">
|
|
|
+ <!-- 类目选择 -->
|
|
|
+ <scroll-view style="height: 600rpx;" scroll-y scroll-with-animation>
|
|
|
+ <view class="popup-content">
|
|
|
+ <tki-tree style="width:100%;" :range="areaList" :foldAll="false" rangeKey="name" idKey="name"
|
|
|
+ buttonName="选中" @btnClick="areaSubmit">
|
|
|
+ </tki-tree>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </xpopup>
|
|
|
+
|
|
|
+ <!-- 线路/点位 -->
|
|
|
+ <u-picker :show="pickerShow" @confirm="pickerConfirm" :closeOnClickOverlay="true" :columns="columns"
|
|
|
+ keyName="label" @close="pickerClose" @cancel="pickerClose"></u-picker>
|
|
|
+ <!-- 温度时间选择 -->
|
|
|
+ <u-picker :show="showTimeSelPicker" ref="uPicker" :columns="times" @confirm="pickerTimeConfirm"
|
|
|
+ @change="pickerTimeChangeHandler"></u-picker>
|
|
|
+
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import {getCurrentInstance, onMounted, reactive, ref} from "vue";
|
|
|
+const { proxy } = getCurrentInstance();
|
|
|
+const instance = getCurrentInstance();
|
|
|
+const {
|
|
|
+ device_type,device_online_status,device_busy_status,device_active_status
|
|
|
+} = proxy.$useDict("device_type","device_online_status",'device_busy_status','device_active_status');
|
|
|
+const dicts = reactive({
|
|
|
+ device_type:[],
|
|
|
+ online_status:[],
|
|
|
+ busy_status:[],
|
|
|
+ active_status:[]
|
|
|
+})
|
|
|
+const data = reactive({
|
|
|
+ activityState:'',
|
|
|
+ opts: {
|
|
|
+ padding: [15, 10, 0, 15],
|
|
|
+ dataLabel: false,
|
|
|
+ color: ['#2D54EC', '#F49B37'],
|
|
|
+ // 开启图表可拖拽滚动
|
|
|
+ // enableScroll: true,
|
|
|
+ dataPointShape: false, //是否显示折线上的点
|
|
|
+ xAxis: {
|
|
|
+ // 开启图表可拖拽滚动后 必配置(显示多少个)
|
|
|
+ // itemCount: 8,
|
|
|
+ rotateLabel: true,
|
|
|
+ labelCount: 10,
|
|
|
+ marginTop: 10,
|
|
|
+ },
|
|
|
+ yAxis: {
|
|
|
+ splitNumber: 5,
|
|
|
+ gridType: "dash",
|
|
|
+ dashLength: 8,
|
|
|
+ gridColor: "rgba(0, 0, 0, 0.15)",
|
|
|
+ data: [{
|
|
|
+ axisLine: false, //坐标轴轴线是否显示
|
|
|
+ }]
|
|
|
+ },
|
|
|
+ extra: {
|
|
|
+ column: {
|
|
|
+ width: 15,
|
|
|
+ seriesGap: 2,
|
|
|
+ barBorderRadius: [10, 10, 10, 10],
|
|
|
+ },
|
|
|
+ line: {
|
|
|
+ type: "curve",
|
|
|
+ width: 2,
|
|
|
+ activeType: "hollow",
|
|
|
+ linearType: "custom",
|
|
|
+ onShadow: true,
|
|
|
+ animation: "horizontal"
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ current: '经营数据',
|
|
|
+ chartTab: [{
|
|
|
+ name: '经营数据'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '经营图表'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '温度图表'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '信号图表'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ chartData: {
|
|
|
+ series: [],
|
|
|
+ categories: []
|
|
|
+ },
|
|
|
+ errorMessage: '无数据',
|
|
|
+ tempStatus:[
|
|
|
+ {value:2,label:'温控仪检测失败'},
|
|
|
+ {value:3,label:'温控仪故障'},
|
|
|
+ {value:120,label:'温控仪检测失败'},
|
|
|
+ {value:170,label:'未读取到温度'},
|
|
|
+ {value:161,label:'温控仪通讯故障'},
|
|
|
+ {value:162,label:'温控仪故障'},
|
|
|
+ {value:255,label:'无温控仪'},
|
|
|
+ ],
|
|
|
+ tempDetail: {
|
|
|
+ targetTemp: 4,
|
|
|
+ selTempWorkModel: 2,
|
|
|
+ start1: 0,
|
|
|
+ end1: 0,
|
|
|
+ start2: 0,
|
|
|
+ end2: 0,
|
|
|
+ start3: 0,
|
|
|
+ end3: 0,
|
|
|
+ curTimes: 0
|
|
|
+ },
|
|
|
+
|
|
|
+ tempWorkModels: [{
|
|
|
+ name: '制热',
|
|
|
+ id: 1
|
|
|
+ }, {
|
|
|
+ name: '制冷',
|
|
|
+ id: 2
|
|
|
+ }, {
|
|
|
+ name: '恒温',
|
|
|
+ id: 3
|
|
|
+ }, {
|
|
|
+ name: '关闭',
|
|
|
+ id: 4
|
|
|
+ }],
|
|
|
+ showTimeSelPicker: false,
|
|
|
+ timeSelPickerType: undefined,
|
|
|
+ times: [
|
|
|
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
|
|
|
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
|
|
|
+ ],
|
|
|
+ lightDetail: {
|
|
|
+ open: true,
|
|
|
+ start1: 0,
|
|
|
+ end1: 0,
|
|
|
+ start2: 0,
|
|
|
+ end2: 0,
|
|
|
+ start3: 0,
|
|
|
+ end3: 0,
|
|
|
+ curTimes: 0
|
|
|
+ },
|
|
|
+ totalTab: ['今日', '本月'],
|
|
|
+ time: 0,
|
|
|
+ show: false,
|
|
|
+ popupTitle: '编辑商品',
|
|
|
+
|
|
|
+ editForm: {
|
|
|
+ name: null,
|
|
|
+ areaName: null,
|
|
|
+ areaId: null,
|
|
|
+ lineId: null,
|
|
|
+ placeId: null,
|
|
|
+ lineName: null,
|
|
|
+ placeName: null,
|
|
|
+ lon: null,
|
|
|
+ lat: null,
|
|
|
+ pos: null
|
|
|
+ },
|
|
|
+ editRules: {
|
|
|
+ 'code': {
|
|
|
+ type: 'string',
|
|
|
+ required: true,
|
|
|
+ message: '必填项',
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ title: '', //弹框标题
|
|
|
+ voice: 4, //声音设置
|
|
|
+ light: 50, //灯光设置
|
|
|
+ id: null, //设备id
|
|
|
+ detail: {}, //设备详情
|
|
|
+
|
|
|
+ allCountData: {}, //经营统计数据显示
|
|
|
+
|
|
|
+ scrollTop: 0, //滚动距离顶部
|
|
|
+
|
|
|
+ operaRecordsFlag: false, //操作记录
|
|
|
+ netRecordsFlag: false, //在线情况
|
|
|
+ errRecordCameraFlag: false, //摄像头故障情况
|
|
|
+ errRecordLockFlag: false, //锁故障数据情况
|
|
|
+ tempRecordsFlag: false, //温度数据情况
|
|
|
+
|
|
|
+ operaRecords: [], //设备操作记录
|
|
|
+ netRecords: [], //在线情况记录
|
|
|
+ errRecordLock: [], //锁故障数据
|
|
|
+ errRecordCamera: [], //摄像头故障数据
|
|
|
+ deviceTempRecords: [], //温度记录
|
|
|
+
|
|
|
+ isMore: true,
|
|
|
+
|
|
|
+ // 编辑弹框
|
|
|
+ areaShow: false,
|
|
|
+ pickerShow: false,
|
|
|
+
|
|
|
+ areaList: [], //区域数据
|
|
|
+
|
|
|
+ columns: [], //picker数据
|
|
|
+
|
|
|
+ pickerType: 1, //1线路2点位
|
|
|
+
|
|
|
+ goodsManageData: {
|
|
|
+ categoryNum: 0,
|
|
|
+ stock: 0,
|
|
|
+ afterFillStock: 0
|
|
|
+ },
|
|
|
+
|
|
|
+ countData: {
|
|
|
+ salesMoney: 0,
|
|
|
+ salesCount: 0,
|
|
|
+ refundMoney: 0
|
|
|
+ },
|
|
|
+
|
|
|
+ pointColumns: [],
|
|
|
+ lineColumns: [],
|
|
|
+
|
|
|
+ qrcodeShow: false,
|
|
|
+ qrCodeImg: null,
|
|
|
+ btnState:null,
|
|
|
+ devicePos:null,
|
|
|
+})
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ .container {
|
|
|
+ .content {
|
|
|
+ padding: 24rpx;
|
|
|
+
|
|
|
+ .xy-card {
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .top {
|
|
|
+
|
|
|
+ >view:nth-child(1) {
|
|
|
+ display: flex;
|
|
|
+ flex-flow: row nowrap;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ .t-left {
|
|
|
+ width: 380rpx;
|
|
|
+
|
|
|
+ >view:nth-child(1) {
|
|
|
+ font-size: 36rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ >view:nth-child(2) {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #2C6FF3;
|
|
|
+ border: 1rpx solid #2C6FF3;
|
|
|
+ border-radius: 6rpx;
|
|
|
+ padding: 0 8rpx;
|
|
|
+ background-color: rgb(243, 249, 525);
|
|
|
+ margin-left: 12rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .t-right {
|
|
|
+ font-size: 30rpx;
|
|
|
+ color: #f56c6c;
|
|
|
+ position: relative;
|
|
|
+ margin-left: 24rpx;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ display: inline-block;
|
|
|
+ background-color: green;
|
|
|
+ width: 16rpx;
|
|
|
+ height: 16rpx;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ margin-right: 12rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.off {
|
|
|
+ color: #666;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ background-color: #666;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ >view:nth-child(2) {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-top: 12rpx;
|
|
|
+
|
|
|
+ >.cu-btn {
|
|
|
+ height: 40rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .down-qr {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #2C6FF3;
|
|
|
+ border: 1rpx solid #2C6FF3;
|
|
|
+ border-radius: 6rpx;
|
|
|
+ padding: 4rpx 8rpx;
|
|
|
+ background-color: rgb(243, 249, 525);
|
|
|
+ }
|
|
|
+
|
|
|
+ .edit {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #fff;
|
|
|
+ border: 1rpx solid #2C6FF3;
|
|
|
+ border-radius: 6rpx;
|
|
|
+ padding: 4rpx 8rpx;
|
|
|
+ background-color: rgb(243, 249, 525);
|
|
|
+ margin-left: 12rpx;
|
|
|
+ background-color: #2C6FF3;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .center {
|
|
|
+ border-radius: 8rpx;
|
|
|
+ background-color: rgb(245, 248, 251);
|
|
|
+ padding: 24rpx 12rpx 42rpx;
|
|
|
+ font-size: 30rpx;
|
|
|
+ margin-top: 24rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ position: relative;
|
|
|
+ height: 560rpx;
|
|
|
+ transition: all 0.5s ease 0s;
|
|
|
+
|
|
|
+ .unfold {
|
|
|
+ position: absolute;
|
|
|
+ bottom: 8rpx;
|
|
|
+ right: 24rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.center-more {
|
|
|
+ height: 170rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .d-line {
|
|
|
+ display: flex;
|
|
|
+ flex-flow: row nowrap;
|
|
|
+ justify-content: flex-start;
|
|
|
+
|
|
|
+ >view:nth-child(1) {
|
|
|
+ width: 50%;
|
|
|
+ }
|
|
|
+
|
|
|
+ >view:nth-child(2) {
|
|
|
+ width: 50%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-item {
|
|
|
+ display: flex;
|
|
|
+ flex-flow: row nowrap;
|
|
|
+ justify-content: flex-start;
|
|
|
+ font-size: 28rpx;
|
|
|
+ margin-bottom: 18rpx;
|
|
|
+ align-items: flex-end;
|
|
|
+
|
|
|
+ .name {
|
|
|
+ min-width: 100rpx;
|
|
|
+ color: #999;
|
|
|
+ }
|
|
|
+
|
|
|
+ .val {
|
|
|
+ color: #333;
|
|
|
+ padding-left: 6rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
+
|
|
|
+ text {
|
|
|
+ margin-left: 12rpx;
|
|
|
+ text-decoration: underline;
|
|
|
+ color: #2C6FF3;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.net {
|
|
|
+ text {
|
|
|
+ text-decoration: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .bot {
|
|
|
+ display: flex;
|
|
|
+ flex-flow: row nowrap;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-top: 24rpx;
|
|
|
+
|
|
|
+ .cu-btn {
|
|
|
+ padding: 0 12rpx;
|
|
|
+ font-size: 26rpx;
|
|
|
+ height: 60rpx;
|
|
|
+ line-height: 50rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .cu-btn1 {
|
|
|
+ background-color: red;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .cu-btn2 {
|
|
|
+ background-color: #fff;
|
|
|
+ color: #2C6FF3;
|
|
|
+ border: 1rpx solid #2C6FF3;
|
|
|
+ }
|
|
|
+
|
|
|
+ .cu-btn3 {
|
|
|
+ background-color: #2C6FF3;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .qrcode-content {
|
|
|
+ padding: 24rpx;
|
|
|
+
|
|
|
+ .save-qrcode {
|
|
|
+ margin-top: 24rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .chart-content {
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ .total {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .more {
|
|
|
+ background-color: #2C6FF3;
|
|
|
+ padding: 0 24rpx;
|
|
|
+ font-size: 26rpx;
|
|
|
+ height: 50rpx;
|
|
|
+ line-height: 50rpx;
|
|
|
+ margin-top: 24rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .t-content {
|
|
|
+ display: flex;
|
|
|
+ flex-flow: row nowrap;
|
|
|
+ width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ .t-item {
|
|
|
+ width: 50%;
|
|
|
+ margin-top: 24rpx;
|
|
|
+
|
|
|
+ .t-name {
|
|
|
+ font-size: 28rpx;
|
|
|
+ line-height: 40rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .t-num {
|
|
|
+ font-size: 28rpx;
|
|
|
+ line-height: 46rpx;
|
|
|
+ padding: 12rpx 0;
|
|
|
+
|
|
|
+ text {
|
|
|
+ font-size: 40rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .title {
|
|
|
+ font-size: 34rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
+ line-height: 54rpx;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .bot1 {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ }
|
|
|
+
|
|
|
+ .l-content {
|
|
|
+ padding-top: 24rpx;
|
|
|
+
|
|
|
+ .l-item {
|
|
|
+ font-size: 28rpx;
|
|
|
+ line-height: 50rpx;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+
|
|
|
+ .l-status {
|
|
|
+ margin-left: 24rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .popup-content {
|
|
|
+ padding: 0 24rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .restart {
|
|
|
+ padding: 40rpx 0;
|
|
|
+ font-size: 34rpx;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .temp {
|
|
|
+ .info {
|
|
|
+ color: red;
|
|
|
+ height: 60rpx;
|
|
|
+ line-height: 60rpx;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flex {
|
|
|
+ margin-top: 20rpx;
|
|
|
+ height: 60rpx;
|
|
|
+
|
|
|
+ .lab {
|
|
|
+ line-height: 60rpx;
|
|
|
+ height: 60rpx;
|
|
|
+ text-align: center;
|
|
|
+ font-weight: 600;
|
|
|
+ margin-top: 20rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .to {
|
|
|
+ width: 60rpx;
|
|
|
+ margin-left: 20rpx;
|
|
|
+ margin-top: 0;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .time-box {
|
|
|
+ height: 50rpx;
|
|
|
+ width: 200rpx;
|
|
|
+ line-height: 50rpx;
|
|
|
+ margin-left: 20rpx;
|
|
|
+ text-align: center;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ border-style: solid;
|
|
|
+ border-width: 1px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|