浇花器
This commit is contained in:
parent
1ba208ef93
commit
d7704349bb
|
|
@ -1,7 +1,7 @@
|
|||
const install = (Vue, vm) => {
|
||||
Vue.prototype.$u.http.setConfig({
|
||||
// baseUrl: 'https://yxd.ccttiot.com/prod-api',
|
||||
baseUrl: 'http://192.168.1.3:8081',
|
||||
baseUrl: 'https://yxd.ccttiot.com/prod-api',
|
||||
// baseUrl: 'http://192.168.1.4:8081',
|
||||
loadingText: '努力加载中~',
|
||||
loadingTime: 800,
|
||||
// 设置自定义头部content-type
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
网关MAC号:{{obj.mac == undefined ? '--' : obj.mac}} <text v-if="onlineStatus == '离线'" style="color: red;margin-left: 50rpx;">离线</text> <text v-if="onlineStatus == '在线'" style="color: green;margin-left: 50rpx;">在线</text>
|
||||
</view> -->
|
||||
<!-- 网关信息卡片 -->
|
||||
<view class="device-info-card" v-if="obj.dataPoints">
|
||||
<view class="device-info-card" v-if="obj.iotData">
|
||||
<!-- 设备头部信息 -->
|
||||
<view class="device-header">
|
||||
<view class="device-header-info" style="display: flex;justify-content: space-between;align-items: center;">
|
||||
|
|
@ -39,12 +39,12 @@
|
|||
<view class="info-grid">
|
||||
<view class="info-item">
|
||||
<text class="info-label">VER</text>
|
||||
<text class="info-value">{{obj.dataPoints && obj.dataPoints.VER ? obj.dataPoints.VER.value : '--'}}</text>
|
||||
<text class="info-value">{{obj.iotData && obj.iotData.VER ? obj.iotData.VER.value : '--'}}</text>
|
||||
</view>
|
||||
<view class="info-item" style="position: relative;">
|
||||
<text class="info-label">CSQ</text>
|
||||
<view style="display: flex;align-items: center;gap: 10rpx;">
|
||||
<text class="info-value" style="flex: 1;">{{obj.dataPoints && obj.dataPoints.CSQ ? obj.dataPoints.CSQ.value : '--'}}</text>
|
||||
<text class="info-value" style="flex: 1;">{{obj.iotData && obj.iotData.CSQ ? obj.iotData.CSQ.value : '--'}}</text>
|
||||
<view class="update-btn" @click="updateCSQ">
|
||||
<text class="update-icon">↻</text>
|
||||
<text class="update-text">更新</text>
|
||||
|
|
@ -74,13 +74,13 @@
|
|||
<view class="status-badge" :class="{'status-online': macobj.onlineStatus == '1', 'status-offline': macobj.onlineStatus == '0'}">
|
||||
{{macobj.onlineStatus == '1' ? '在线' : '离线'}}
|
||||
</view>
|
||||
<text class="device-version" v-if="macobj.version">版本: {{macobj.dataPoints.ver.value == null ? '--' : macobj.dataPoints.ver.value}}</text>
|
||||
<text class="device-version" v-if="macobj.dataPoints.RSSI">信号:{{macobj.dataPoints.RSSI.value == null ? '--' : macobj.dataPoints.RSSI.value}}</text>
|
||||
<text class="device-version" v-if="macobj.version">版本: {{macobj.iotData.ver.value == null ? '--' : macobj.iotData.ver.value}}</text>
|
||||
<text class="device-version" v-if="macobj.iotData.RSSI">信号:{{macobj.iotData.RSSI.value == null ? '--' : macobj.iotData.RSSI.value}}</text>
|
||||
<view class="signal-strength" v-if="macobj.bluetoothDbm !== null && macobj.bluetoothDbm !== undefined">
|
||||
<view class="signal-bars">
|
||||
<view class="signal-bar" :class="{'active': getSignalLevel(macobj.bluetoothDbm) >= 1}"></view>
|
||||
<view class="signal-bar" :class="{'active': getSignalLevel(macobj.bluetoothDbm) >= 2}"></view>
|
||||
<view class="signal-bar" :class="{'active': getSignalLevel(macobj.bluetoothDbm) >= 3}"></view>
|
||||
<view class="signal-bar" :class="{'active': getSignalLevel(macobj.bluetoothDbm) >= 3}"></view>
|
||||
<view class="signal-bar" :class="{'active': getSignalLevel(macobj.bluetoothDbm) >= 4}"></view>
|
||||
</view>
|
||||
<text class="signal-value">{{macobj.bluetoothDbm}}dBm</text>
|
||||
|
|
@ -88,7 +88,7 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<text class="device-version" style="margin-bottom: 20rpx;display: block;" v-if="macobj.dataPoints.RSSI">更新时间: {{macobj.dataPoints.RSSI.at == null ? '--' : macobj.dataPoints.RSSI.at}}</text>
|
||||
<text class="device-version" style="margin-bottom: 20rpx;display: block;" v-if="macobj.iotData.RSSI">更新时间: {{macobj.iotData.RSSI.at == null ? '--' : macobj.iotData.RSSI.at}}</text>
|
||||
<!-- 状态信息 -->
|
||||
<view class="info-section" style="border-top: 1rpx solid #f0f0f0;padding-top: 20rpx;">
|
||||
<view class="section-title">状态信息</view>
|
||||
|
|
@ -147,7 +147,8 @@
|
|||
xshu:'1',
|
||||
x:'',
|
||||
macsb:'',
|
||||
macobj:{}
|
||||
macobj:{},
|
||||
btnflag:true
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
|
|
@ -198,17 +199,17 @@
|
|||
}
|
||||
},
|
||||
getver() {
|
||||
if (!this.macobj || !this.macobj.dataPoints) {
|
||||
if (!this.macobj || !this.macobj.iotData) {
|
||||
return '--';
|
||||
}
|
||||
return this.macobj.dataPoints.ver
|
||||
return this.macobj.iotData.ver
|
||||
},
|
||||
// 获取设备状态(根据dataPoints.d判断)
|
||||
// 获取设备状态(根据iotData.d判断)
|
||||
getDeviceStatus() {
|
||||
if (!this.macobj || !this.macobj.dataPoints) {
|
||||
if (!this.macobj || !this.macobj.iotData) {
|
||||
return '--';
|
||||
}
|
||||
const d = this.macobj.dataPoints.water_sw.value;
|
||||
const d = this.macobj.iotData.water_sw.value;
|
||||
if (d === 0 || d === '0') {
|
||||
return '关闭';
|
||||
} else if (d === 1 || d === '1') {
|
||||
|
|
@ -281,7 +282,7 @@
|
|||
},
|
||||
// 根据设备sn获取设备详情
|
||||
getsn() {
|
||||
this.$u.get(`/device/device/getDetail?sn=${this.storeId}`).then(res => {
|
||||
this.$u.get(`/device/device/getDetail/specGateway?sn=${this.storeId}`).then(res => {
|
||||
if (res.code == 200) {
|
||||
if(res.data == null){
|
||||
this.clearInterval()
|
||||
|
|
@ -360,7 +361,7 @@
|
|||
this.$u.get(`/system/config/configKey/device.gateway.test.mac`).then(res =>{
|
||||
if(res.code == 200){
|
||||
this.macsb = res.data
|
||||
this.$u.get(`/device/device/getDetail?mac=${this.macsb}&gatewayMacList=${this.obj.mac}`).then(resp =>{
|
||||
this.$u.get(`/device/device/getDetail/specGateway?mac=${this.macsb}&gatewayMacList=${this.obj.mac}`).then(resp =>{
|
||||
if(resp.code == 200){
|
||||
this.getsn()
|
||||
this.id = resp.data.deviceId
|
||||
|
|
@ -396,7 +397,7 @@
|
|||
this.$u.get(`/system/config/configKey/device.gateway.test.mac`).then(res =>{
|
||||
if(res.code == 200){
|
||||
this.macsb = res.data
|
||||
this.$u.get(`/device/device/getDetail?mac=${this.macsb}&gatewayMacList=${this.obj.mac}`).then(resp =>{
|
||||
this.$u.get(`/device/device/getDetail/specGateway?mac=${this.macsb}&gatewayMacList=${this.obj.mac}`).then(resp =>{
|
||||
if(resp.code == 200){
|
||||
this.id = resp.data.deviceId
|
||||
this.macobj = resp.data
|
||||
|
|
@ -420,6 +421,11 @@
|
|||
|
||||
// 关闭
|
||||
btngb() {
|
||||
if(this.btnflag == false){
|
||||
|
||||
return
|
||||
}
|
||||
this.btnflag = false
|
||||
uni.showLoading({
|
||||
title: '关闭中...',
|
||||
mask: true,
|
||||
|
|
@ -439,6 +445,9 @@
|
|||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
setTimeout(()=>{
|
||||
this.btnflag = true
|
||||
},3000)
|
||||
} else {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
|
|
@ -446,11 +455,18 @@
|
|||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
setTimeout(()=>{
|
||||
this.btnflag = true
|
||||
},1000)
|
||||
}
|
||||
})
|
||||
},
|
||||
// 开启
|
||||
btngbkq() {
|
||||
if(this.btnflag == false){
|
||||
return
|
||||
}
|
||||
this.btnflag = false
|
||||
uni.showLoading({
|
||||
title: '开启中...',
|
||||
mask: true,
|
||||
|
|
@ -471,6 +487,9 @@
|
|||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
setTimeout(()=>{
|
||||
this.btnflag = true
|
||||
},1000)
|
||||
} else {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
|
|
@ -478,12 +497,15 @@
|
|||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
setTimeout(()=>{
|
||||
this.btnflag = true
|
||||
},3000)
|
||||
}
|
||||
})
|
||||
},
|
||||
// 刷新
|
||||
btnsx() {
|
||||
this.$u.get(`/device/device/getDetail?mac=${this.macsb}&gatewayMacList=${this.obj.mac}`).then(resp =>{
|
||||
this.$u.get(`/device/device/getDetail/specGateway?mac=${this.macsb}&gatewayMacList=${this.obj.mac}`).then(resp =>{
|
||||
if(resp.code == 200){
|
||||
this.id = resp.data.deviceId
|
||||
this.macobj = resp.data
|
||||
|
|
|
|||
|
|
@ -26,13 +26,13 @@
|
|||
<view class="wifi" style="margin-top: 24rpx;display: block;" @click="gjconfirm" >
|
||||
<view class="" style="display: flex;justify-content: space-between;align-items: center;">
|
||||
<view class="">固件更新</view>
|
||||
<view class="flex" style="color: red;font-size: 26rpx;" v-if=" ver != null && ver != version">
|
||||
<view class="flex" style="color: red;font-size: 26rpx;" v-if=" ver != null && ver.slice(0,4) != version">
|
||||
<text style="display: inline-block;width: 10rpx;height: 10rpx;border-radius: 50%;background-color: red;margin-right: 10rpx;"></text>点击更新
|
||||
</view>
|
||||
</view>
|
||||
<view class="" style="font-size: 24rpx;display: flex;justify-content: space-between;">
|
||||
<view class="">
|
||||
当前版本:{{ver == null ? '请连接蓝牙获取当前版本' : ver}}
|
||||
当前版本:{{ ver == null ? '请连接蓝牙获取当前版本' : (ver.length > 4 ? ver.slice(0,4) : ver) }}
|
||||
</view>
|
||||
<view class="">
|
||||
最新版本:{{version == null ? '' : version}}
|
||||
|
|
@ -277,6 +277,9 @@
|
|||
if (res.code == 200) {
|
||||
this.pre = res.data.pre
|
||||
this.version = res.data.version
|
||||
if(this.ver.length > 4){
|
||||
this.ver = this.ver.slice(0,4)
|
||||
}
|
||||
console.log(this.ver,'当前蓝牙版本号',this.version,'最新蓝牙版本号');
|
||||
this.file = res.data.asDeviceVersion.file
|
||||
console.log(this.file)
|
||||
|
|
@ -405,6 +408,9 @@
|
|||
duration: 2000
|
||||
})
|
||||
this.ver = this.version
|
||||
if(this.ver.length > 4){
|
||||
this.ver = this.ver.slice(0,4)
|
||||
}
|
||||
setTimeout(()=>{
|
||||
this.shengjiflag = false
|
||||
uni.reLaunch({
|
||||
|
|
@ -486,10 +492,10 @@
|
|||
console.log(showObject,'showObjectshowObject');
|
||||
// 从 this.ver 中提取数字
|
||||
const verNumber = parseInt(this.ver.replace(/\D/g, '')) || 0;
|
||||
if(verNumber >= 290){
|
||||
this.xinpin = showObject.showArray[showObject.showArray.length - 1]
|
||||
}else{
|
||||
if(showObject.showArray.length > 9){
|
||||
this.xinpin = showObject.showArray[showObject.showArray.length - 2]
|
||||
}else{
|
||||
this.xinpin = showObject.showArray[showObject.showArray.length - 1]
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -2,12 +2,30 @@
|
|||
<view class="page">
|
||||
<u-navbar title="详情" :border-bottom="false" :background="bgc" title-color='#262B37' title-size='38'
|
||||
height='40'></u-navbar>
|
||||
<!-- 左上角信号和版本信息 -->
|
||||
<view class="top-info">
|
||||
<view class="info-item" style="display: flex;align-items: center;font-size: 26rpx;color: #737070;margin-top: 20rpx;margin-left: 20rpx;">
|
||||
<view class="info-icon-wrapper signal-icon">
|
||||
<text class="iconfont icon-xinhao">信号:</text>
|
||||
</view>
|
||||
<text class="info-value" v-if="wgxq.iotData.CSQ">{{ wgxq.iotData.CSQ.value }}</text>
|
||||
<text class="info-value" v-else>--</text>
|
||||
</view>
|
||||
<view class="info-item" style="display: flex;align-items: center;font-size: 26rpx;color: #737070;margin-top: 10rpx;margin-left: 20rpx;">
|
||||
<view class="info-icon-wrapper version-icon">
|
||||
<text class="iconfont icon-banben">版本:</text>
|
||||
</view>
|
||||
<text class="info-value">{{ getVersion() || '--' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="wangguan">
|
||||
<!-- 网关设备信息 -->
|
||||
<view class="wgshebei">
|
||||
|
||||
<image :src="wgxq.picture || wgxq.modelPicture || ''" mode="aspectFill"></image>
|
||||
<view class="wgname">
|
||||
<text>{{ wgxq.deviceName || '未命名设备' }}</text>
|
||||
<text>{{ gatewayName || '网关' }}</text>
|
||||
<image class="edit-icon" src="https://api.ccttiot.com/smartmeter/img/static/uL6FHnMGWFrdptmDokDI" mode="aspectFit" @click="showEditNameDialog"></image>
|
||||
<view class="status-badge" :class="wgxq.onlineStatus == 1 ? 'status-online' : 'status-offline'">
|
||||
{{ wgxq.onlineStatus == 1 ? '在线' : '离线' }}
|
||||
</view>
|
||||
|
|
@ -57,7 +75,16 @@
|
|||
<text>{{ item.deviceName || '未命名设备' }}</text>
|
||||
<text style="color: #808080;font-size: 24rpx;">{{ item.modelName || '--' }}</text>
|
||||
</view>
|
||||
<view class="item-status" :class="item.onlineStatus == 1 ? 'status-online-dot' : 'status-offline-dot'"></view>
|
||||
<view class="signal-container">
|
||||
<!-- 在线显示信号强度格数 -->
|
||||
<view v-if="item.onlineStatus == 1" class="signal-bars">
|
||||
<view class="signal-bar" v-for="(bar, barIndex) in 4" :key="barIndex"
|
||||
:class="barIndex < getSignalLevel(item) ? 'bar-active' : 'bar-inactive'">
|
||||
</view>
|
||||
</view>
|
||||
<!-- 离线显示灰色圆点 -->
|
||||
<view v-else class="item-status status-offline-dot"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="empty-device" v-if="wglist.length === 0">
|
||||
<text>暂无设备</text>
|
||||
|
|
@ -67,6 +94,19 @@
|
|||
<view class="saoma" @click="btnjb">
|
||||
解绑
|
||||
</view>
|
||||
|
||||
<!-- 修改网关名称弹窗 -->
|
||||
<view class="edit-name-modal" v-if="showEditName" @click.stop>
|
||||
<view class="modal-mask" @click="closeEditNameDialog"></view>
|
||||
<view class="modal-content">
|
||||
<view class="modal-title">修改网关名称</view>
|
||||
<input class="modal-input" v-model="editNameValue" placeholder="请输入网关名称" maxlength="20" />
|
||||
<view class="modal-buttons">
|
||||
<view class="modal-btn cancel-btn" @click="closeEditNameDialog">取消</view>
|
||||
<view class="modal-btn confirm-btn" @click="confirmEditName">确定</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
|
@ -80,6 +120,9 @@
|
|||
id:'',
|
||||
wgxq:{},
|
||||
wglist:[],
|
||||
gatewayName: '网关',
|
||||
showEditName: false,
|
||||
editNameValue: '',
|
||||
}
|
||||
},
|
||||
onLoad(e) {
|
||||
|
|
@ -125,18 +168,117 @@
|
|||
this.$u.get(`/app/device/getDetail?deviceId=${this.id}`).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.wgxq = res.data
|
||||
// 设置网关名称,如果设备名称为空或未命名,使用默认值"网关"
|
||||
this.gatewayName = res.data.deviceName && res.data.deviceName !== '未命名设备' ? res.data.deviceName : '网关'
|
||||
console.log(11);
|
||||
this.getlist()
|
||||
}
|
||||
})
|
||||
},
|
||||
// 获取RSSI信号值
|
||||
getRSSIValue() {
|
||||
if (this.wgxq.iotData && this.wgxq.iotData.RSSI && this.wgxq.iotData.RSSI.value !== undefined) {
|
||||
return this.wgxq.iotData.RSSI.value
|
||||
}
|
||||
return null
|
||||
},
|
||||
// 获取版本信息
|
||||
getVersion() {
|
||||
if (this.wgxq.version) {
|
||||
return this.wgxq.version
|
||||
}
|
||||
if (this.wgxq.iotData && this.wgxq.iotData.version) {
|
||||
return this.wgxq.iotData.version
|
||||
}
|
||||
return null
|
||||
},
|
||||
// 计算信号强度格数(基于RSSI)
|
||||
getSignalLevel(item) {
|
||||
// 获取设备的信号强度(RSSI)
|
||||
let rssiValue = null
|
||||
if (item.rssi) {
|
||||
rssiValue = parseFloat(item.rssi)
|
||||
} else if (item.rssi !== undefined) {
|
||||
rssiValue = parseFloat(item.rssi)
|
||||
}
|
||||
|
||||
if (rssiValue === null || isNaN(rssiValue)) {
|
||||
return 0
|
||||
}
|
||||
|
||||
// 根据RSSI信号强度返回格数
|
||||
// -60到0为4格
|
||||
if (rssiValue >= -60 && rssiValue <= 0) {
|
||||
return 4
|
||||
}
|
||||
// -60到-80为3格(不包括-60,不包括-80)
|
||||
if (rssiValue > -80 && rssiValue < -60) {
|
||||
return 3
|
||||
}
|
||||
// -80到-100为2格(包括-80,包括-100)
|
||||
if (rssiValue >= -100 && rssiValue <= -80) {
|
||||
return 2
|
||||
}
|
||||
// -100以下为1格
|
||||
if (rssiValue < -100) {
|
||||
return 1
|
||||
}
|
||||
|
||||
return 0
|
||||
},
|
||||
// 显示修改名称弹窗
|
||||
showEditNameDialog() {
|
||||
this.editNameValue = this.gatewayName
|
||||
this.showEditName = true
|
||||
},
|
||||
// 关闭修改名称弹窗
|
||||
closeEditNameDialog() {
|
||||
this.showEditName = false
|
||||
this.editNameValue = ''
|
||||
},
|
||||
// 确认修改名称
|
||||
confirmEditName() {
|
||||
if (!this.editNameValue.trim()) {
|
||||
uni.showToast({
|
||||
title: '请输入网关名称',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
this.$u.put(`/app/editDeviceName?deviceId=${this.id}&deviceName=${this.editNameValue.trim()}`).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.gatewayName = this.editNameValue.trim()
|
||||
this.wgxq.deviceName = this.editNameValue.trim()
|
||||
this.closeEditNameDialog()
|
||||
uni.showToast({
|
||||
title: '修改成功',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.msg || '修改失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: '修改失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
})
|
||||
},
|
||||
// 查询网关下的设备
|
||||
getlist(){
|
||||
console.log(111);
|
||||
let data = {
|
||||
gatewayMacList: [this.wgxq.mac]
|
||||
}
|
||||
this.$u.post(`/app/device/gateway/list`, data).then((res) => {
|
||||
// let data = {
|
||||
// mac:
|
||||
// }
|
||||
this.$u.get(`/app/device/gateway/gateWaySubDeviceList?gatewayMac=${this.wgxq.mac}&pageNum=1&pageSize=99`).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.wglist = res.rows
|
||||
}
|
||||
|
|
@ -147,37 +289,154 @@
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
// 修改名称弹窗
|
||||
.edit-name-modal{
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 1000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.modal-mask{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
backdrop-filter: blur(4rpx);
|
||||
}
|
||||
|
||||
.modal-content{
|
||||
position: relative;
|
||||
width: 640rpx;
|
||||
background: #FFFFFF;
|
||||
border-radius: 32rpx;
|
||||
padding: 50rpx 40rpx 40rpx;
|
||||
box-sizing: border-box;
|
||||
box-shadow: 0 10rpx 40rpx rgba(0, 0, 0, 0.15);
|
||||
animation: slideUp 0.3s ease;
|
||||
|
||||
@keyframes slideUp {
|
||||
from {
|
||||
transform: translateY(50rpx);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-title{
|
||||
font-size: 36rpx;
|
||||
font-weight: 600;
|
||||
color: #262B37;
|
||||
margin-bottom: 40rpx;
|
||||
text-align: center;
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
.modal-input{
|
||||
width: 100%;
|
||||
height: 88rpx;
|
||||
border: 2rpx solid #E8E8E8;
|
||||
border-radius: 16rpx;
|
||||
padding: 0 24rpx;
|
||||
box-sizing: border-box;
|
||||
font-size: 30rpx;
|
||||
color: #262B37;
|
||||
margin-bottom: 40rpx;
|
||||
background: #F8F8F8;
|
||||
transition: all 0.3s;
|
||||
|
||||
&:focus{
|
||||
border-color: #48893B;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-buttons{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 20rpx;
|
||||
|
||||
.modal-btn{
|
||||
flex: 1;
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
text-align: center;
|
||||
border-radius: 16rpx;
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s;
|
||||
|
||||
&.cancel-btn{
|
||||
background: #F5F5F5;
|
||||
color: #666666;
|
||||
|
||||
&:active{
|
||||
background: #E8E8E8;
|
||||
transform: scale(0.98);
|
||||
}
|
||||
}
|
||||
|
||||
&.confirm-btn{
|
||||
background: linear-gradient(135deg, #48893B 0%, #5BA849 100%);
|
||||
color: #FFFFFF;
|
||||
box-shadow: 0 4rpx 12rpx rgba(72, 137, 59, 0.3);
|
||||
|
||||
&:active{
|
||||
transform: scale(0.98);
|
||||
box-shadow: 0 2rpx 8rpx rgba(72, 137, 59, 0.3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.saoma{
|
||||
width: 680rpx;
|
||||
height: 90rpx;
|
||||
background-color: #48893B;
|
||||
height: 96rpx;
|
||||
background: linear-gradient(135deg, #48893B 0%, #5BA849 100%);
|
||||
color: #FFFFFF;
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
line-height: 90rpx;
|
||||
border-radius: 30rpx;
|
||||
line-height: 96rpx;
|
||||
border-radius: 48rpx;
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: 30rpx;
|
||||
bottom: 40rpx;
|
||||
box-shadow: 0 8rpx 24rpx rgba(72, 137, 59, 0.35);
|
||||
transition: all 0.3s;
|
||||
|
||||
&:active{
|
||||
transform: translateX(-50%) scale(0.98);
|
||||
box-shadow: 0 4rpx 16rpx rgba(72, 137, 59, 0.3);
|
||||
}
|
||||
}
|
||||
.wangguan{
|
||||
padding: 0 30rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.wglist{
|
||||
width: 100%;
|
||||
min-height: 200rpx;
|
||||
max-height: 740rpx;
|
||||
.wglist{
|
||||
width: 100%;
|
||||
min-height: 200rpx;
|
||||
max-height: 670rpx;
|
||||
overflow: scroll;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 0rpx 38rpx 0rpx rgba(128,128,128,0.15);
|
||||
margin: auto;
|
||||
margin-top: 20rpx;
|
||||
border-radius: 24rpx;
|
||||
padding: 32rpx 40rpx;
|
||||
box-sizing: border-box;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.08);
|
||||
margin: auto;
|
||||
margin-top: 20rpx;
|
||||
border-radius: 24rpx;
|
||||
padding: 32rpx 40rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.wgtit{
|
||||
font-size: 32rpx;
|
||||
|
|
@ -186,60 +445,84 @@
|
|||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.wgitem{
|
||||
margin-top: 30rpx;
|
||||
.wgitem{
|
||||
margin-top: 30rpx;
|
||||
max-height: 730rpx;
|
||||
overflow: scroll;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-bottom: 30rpx;
|
||||
border-bottom: 1rpx solid #F0F0F0;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 24rpx;
|
||||
padding-bottom: 30rpx;
|
||||
border-bottom: 1rpx solid #F0F0F0;
|
||||
border-radius: 16rpx;
|
||||
transition: all 0.3s;
|
||||
|
||||
&:hover{
|
||||
background: #FAFAFA;
|
||||
}
|
||||
|
||||
&:last-child{
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
image{
|
||||
width: 88rpx;
|
||||
height: 88rpx;
|
||||
border-radius: 16rpx;
|
||||
background: #F5F5F5;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
.cen{
|
||||
flex: 1;
|
||||
margin-left: 24rpx;
|
||||
|
||||
text{
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
font-size: 30rpx;
|
||||
color: #262B37;
|
||||
line-height: 1.4;
|
||||
|
||||
&:last-child{
|
||||
margin-top: 10rpx;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #808080;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child{
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
image{
|
||||
width: 78rpx;
|
||||
height: 84rpx;
|
||||
border-radius: 12rpx;
|
||||
background: #F5F5F5;
|
||||
}
|
||||
|
||||
.cen{
|
||||
flex: 1;
|
||||
margin-left: 24rpx;
|
||||
|
||||
text{
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
font-size: 28rpx;
|
||||
color: #3D3D3D;
|
||||
|
||||
&:last-child{
|
||||
margin-top: 8rpx;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #808080;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-status{
|
||||
width: 16rpx;
|
||||
height: 16rpx;
|
||||
border-radius: 50%;
|
||||
|
||||
&.status-online-dot{
|
||||
background: #15C55D;
|
||||
box-shadow: 0 0 8rpx rgba(21, 197, 93, 0.4);
|
||||
}
|
||||
|
||||
&.status-offline-dot{
|
||||
background: #999999;
|
||||
}
|
||||
}
|
||||
.item-status{
|
||||
width: 16rpx;
|
||||
height: 16rpx;
|
||||
border-radius: 50%;
|
||||
|
||||
&.status-online-dot{
|
||||
background: #15C55D;
|
||||
box-shadow: 0 0 8rpx rgba(21, 197, 93, 0.4);
|
||||
}
|
||||
|
||||
&.status-offline-dot{
|
||||
background: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
.signal-container{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
min-width: 60rpx;
|
||||
|
||||
.item-status{
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
border-radius: 50%;
|
||||
background: #CCCCCC;
|
||||
box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.empty-device{
|
||||
|
|
@ -250,34 +533,36 @@
|
|||
}
|
||||
}
|
||||
|
||||
.wgtime{
|
||||
width: 100%;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 0rpx 38rpx 0rpx rgba(128,128,128,0.15);
|
||||
margin-top: 20rpx;
|
||||
border-radius: 24rpx;
|
||||
padding: 30rpx 40rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.time-item{
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
&:last-child{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.time-label{
|
||||
font-size: 28rpx;
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
.time-value{
|
||||
font-size: 28rpx;
|
||||
color: #3D3D3D;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.wgtime{
|
||||
width: 100%;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.08);
|
||||
margin-top: 20rpx;
|
||||
border-radius: 24rpx;
|
||||
padding: 32rpx 40rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.time-item{
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
&:last-child{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.time-label{
|
||||
font-size: 28rpx;
|
||||
color: #808080;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.time-value{
|
||||
font-size: 28rpx;
|
||||
color: #262B37;
|
||||
margin-left: 10rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.wgcaozuo{
|
||||
width: 100%;
|
||||
|
|
@ -343,31 +628,31 @@
|
|||
}
|
||||
}
|
||||
|
||||
.wgsnmac{
|
||||
width: 100%;
|
||||
height: 92rpx;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 0rpx 38rpx 0rpx rgba(128,128,128,0.15);
|
||||
border-radius: 24rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
// padding: 0 30rpx;
|
||||
box-sizing: border-box;
|
||||
padding-top: 16rpx;
|
||||
|
||||
.ltsn{
|
||||
border-right: 1px solid #D8D8D8;
|
||||
}
|
||||
|
||||
view{
|
||||
height: 60rpx;
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
line-height: 60rpx;
|
||||
font-size: 28rpx;
|
||||
color: #808080;
|
||||
}
|
||||
}
|
||||
.wgsnmac{
|
||||
width: 100%;
|
||||
height: 100rpx;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 4rpx 24rpx 0rpx rgba(0, 0, 0, 0.08);
|
||||
border-radius: 24rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
padding: 20rpx 0;
|
||||
|
||||
.ltsn{
|
||||
border-right: 1px solid #E8E8E8;
|
||||
}
|
||||
|
||||
view{
|
||||
height: 60rpx;
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
line-height: 60rpx;
|
||||
font-size: 28rpx;
|
||||
color: #666666;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.wgshebei{
|
||||
width: 100%;
|
||||
|
|
@ -382,37 +667,152 @@
|
|||
background: #F5F5F5;
|
||||
}
|
||||
|
||||
.wgname{
|
||||
font-weight: 600;
|
||||
font-size: 36rpx;
|
||||
color: #3D3D3D;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-top: 30rpx;
|
||||
flex-wrap: wrap;
|
||||
|
||||
text{
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
|
||||
.status-badge{
|
||||
display: inline-block;
|
||||
padding: 6rpx 20rpx;
|
||||
border-radius: 20rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
|
||||
&.status-online{
|
||||
background: rgba(21, 197, 93, 0.1);
|
||||
color: #15C55D;
|
||||
}
|
||||
|
||||
&.status-offline{
|
||||
background: rgba(153, 153, 153, 0.1);
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
.wgname{
|
||||
font-weight: 600;
|
||||
font-size: 36rpx;
|
||||
color: #3D3D3D;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-top: 30rpx;
|
||||
flex-wrap: wrap;
|
||||
gap: 12rpx;
|
||||
|
||||
text{
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.edit-icon{
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
padding: 8rpx;
|
||||
border-radius: 8rpx;
|
||||
transition: all 0.3s;
|
||||
|
||||
&:active{
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
transform: scale(0.95);
|
||||
}
|
||||
}
|
||||
|
||||
.status-badge{
|
||||
display: inline-block;
|
||||
padding: 8rpx 24rpx;
|
||||
border-radius: 24rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
|
||||
|
||||
&.status-online{
|
||||
background: linear-gradient(135deg, rgba(21, 197, 93, 0.15) 0%, rgba(21, 197, 93, 0.1) 100%);
|
||||
color: #15C55D;
|
||||
border: 1rpx solid rgba(21, 197, 93, 0.2);
|
||||
}
|
||||
|
||||
&.status-offline{
|
||||
background: rgba(153, 153, 153, 0.1);
|
||||
color: #999999;
|
||||
border: 1rpx solid rgba(153, 153, 153, 0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 左上角信息
|
||||
.top-info{
|
||||
position: fixed;
|
||||
top: 20rpx;
|
||||
left: 30rpx;
|
||||
z-index: 999;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16rpx;
|
||||
padding: 20rpx 24rpx;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
backdrop-filter: blur(10rpx);
|
||||
border-radius: 16rpx;
|
||||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
|
||||
|
||||
.info-item{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12rpx;
|
||||
|
||||
.info-icon-wrapper{
|
||||
width: 44rpx;
|
||||
height: 44rpx;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 28rpx;
|
||||
|
||||
&.signal-icon{
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
box-shadow: 0 2rpx 8rpx rgba(102, 126, 234, 0.3);
|
||||
}
|
||||
|
||||
&.version-icon{
|
||||
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
||||
box-shadow: 0 2rpx 8rpx rgba(245, 87, 108, 0.3);
|
||||
}
|
||||
|
||||
.iconfont{
|
||||
font-size: 28rpx;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.info-value{
|
||||
color: #262B37;
|
||||
font-weight: 600;
|
||||
font-size: 26rpx;
|
||||
letter-spacing: 0.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 信号强度显示
|
||||
.signal-container{
|
||||
.signal-bars{
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
gap: 5rpx;
|
||||
height: 36rpx;
|
||||
padding: 4rpx 0;
|
||||
|
||||
.signal-bar{
|
||||
width: 6rpx;
|
||||
border-radius: 5rpx 5rpx 2rpx 2rpx;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:nth-child(1){
|
||||
height: 10rpx;
|
||||
}
|
||||
|
||||
&:nth-child(2){
|
||||
height: 16rpx;
|
||||
}
|
||||
|
||||
&:nth-child(3){
|
||||
height: 20rpx;
|
||||
}
|
||||
|
||||
&:nth-child(4){
|
||||
height: 24rpx;
|
||||
}
|
||||
|
||||
&.bar-active{
|
||||
background: linear-gradient(180deg, #15C55D 0%, #0FA855 100%);
|
||||
box-shadow: 0 2rpx 6rpx rgba(21, 197, 93, 0.4);
|
||||
}
|
||||
|
||||
&.bar-inactive{
|
||||
background: linear-gradient(180deg, #E8E8E8 0%, #D0D0D0 100%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,15 +69,21 @@
|
|||
<image :src="imgpic" mode="aspectFit"></image>
|
||||
<view class="xinghao">
|
||||
<view class="one">型号:{{user.model == undefined ? '--' : user.model}}</view>
|
||||
<view class="">MAC:{{user.mac == undefined ? '--' : user.mac}}</view>
|
||||
<view class="">MAC:{{user.mac == undefined ? '--' : user.mac}}</view>
|
||||
|
||||
</view>
|
||||
<view class="" style="display: flex;align-items: center;margin-left: 20rpx;">
|
||||
<view class="signal-bars" style="display: flex;align-items: flex-end;">
|
||||
<view class="signal-bar" :class="{'active': signalStrength >= 1}" style="width: 6rpx;height: 10rpx;background-color: #E0E0E0;margin-right: 3rpx;border-radius: 1rpx;"></view>
|
||||
<view class="signal-bar" :class="{'active': signalStrength >= 2}" style="width: 6rpx;height: 14rpx;background-color: #E0E0E0;margin-right: 3rpx;border-radius: 1rpx;"></view>
|
||||
<view class="signal-bar" :class="{'active': signalStrength >= 3}" style="width: 6rpx;height: 18rpx;background-color: #E0E0E0;margin-right: 3rpx;border-radius: 1rpx;"></view>
|
||||
<view class="signal-bar" :class="{'active': signalStrength >= 4}" style="width: 6rpx;height: 22rpx;background-color: #E0E0E0;border-radius: 1rpx;"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="" style="font-weight: 400;font-size: 26rpx;margin-left: 20rpx;display: flex;align-items: center;">
|
||||
<image style="width: 44rpx;height: 44rpx;" src="https://api.ccttiot.com/smartmeter/img/static/u4yJdBWPMHqgqYjZkQKM" mode=""></image>
|
||||
<image style="width: 44rpx;height: 44rpx;transform: rotate(90deg)" src="https://api.ccttiot.com/smartmeter/img/static/u4yJdBWPMHqgqYjZkQKM" mode=""></image>
|
||||
<view class="">
|
||||
<view class="" style="font-size: 28rpx;color: #999999;">
|
||||
剩余电量
|
||||
</view>
|
||||
<view class="" style="font-size: 24rpx;color: #48893B;">
|
||||
{{sydl}}%
|
||||
</view>
|
||||
|
|
@ -394,9 +400,9 @@
|
|||
<image src="https://api.ccttiot.com/smartmeter/img/static/u7NwkNOoQYYsvHVMkDlu" mode=""></image>
|
||||
<view class="yushui">
|
||||
雨水感应
|
||||
<u-switch v-if="yschecked" v-model="one" @change="btnyushui" inactive-color="#eee"
|
||||
<u-switch v-if="yschecked" v-model="one" @change="btnyushui" :disabled="isWateringInProgress" inactive-color="#eee"
|
||||
active-color="#eee" size="40"></u-switch>
|
||||
<u-switch v-else v-model="ones" @change="btnyushuis" active-color="#7FAD76"
|
||||
<u-switch v-else v-model="ones" @change="btnyushuis" :disabled="isWateringInProgress" active-color="#7FAD76"
|
||||
inactive-color="#7FAD76" size="40"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -424,7 +430,7 @@
|
|||
<!-- 手动浇水 -->
|
||||
<view class="dingshi_he">
|
||||
<view class="naoz" style="font-weight: 400;font-size: 26rpx;align-items: center;">
|
||||
<image style="width: 170rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uVYXvo4F6U6fJ5fP27BT" mode="aspectFill"></image>{{ sdminutes ? sdminutes + ':' : '' }}{{ sdseconds ? sdseconds : '' }}
|
||||
<image style="width: 170rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uVYXvo4F6U6fJ5fP27BT" mode="aspectFill"></image>{{ sdminutes ? sdminutes + ':' : '' }}{{ sdseconds ? sdseconds : '' }}<text v-if="showWateringCountdown && wateringCountdownSeconds" style="margin-left: 10rpx;color: #7FAD76;font-size: 24rpx;">{{ wateringCountdownMinutes ? wateringCountdownMinutes + ':' : '' }}{{ wateringCountdownSeconds }}</text>
|
||||
</view>
|
||||
<view class="dstime">
|
||||
手动浇水 <u-switch v-if="kgflag" v-model="jskeds" @change="btngb" inactive-color="#eee" active-color="#eee" size="40"></u-switch>
|
||||
|
|
@ -464,6 +470,9 @@
|
|||
<view class="sbist_val" v-for="(item,index) in devicelist" :key="index" @click="btnactive(item.deviceId,index)">
|
||||
<view class="lt">
|
||||
<view class="">{{item.deviceName}}</view>
|
||||
<view class="" style="font-weight: 400;font-size: 26rpx;color: #989090;margin-top: 10rpx;">
|
||||
{{item.mac}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="rt">
|
||||
<image :src="item.modelPicture" mode="aspectFit"></image>
|
||||
|
|
@ -535,6 +544,13 @@
|
|||
data() {
|
||||
return {
|
||||
timeflag:false,
|
||||
// 手动浇水“确定”按钮请求锁:请求未返回前禁止重复提交
|
||||
isManualWaterRequesting: false,
|
||||
// 手动浇水开关(开启/关闭)防频繁点击:接口模式等请求结束,蓝牙模式至少冷却3秒
|
||||
isManualWaterSwitchRequesting: false,
|
||||
manualWaterBtCooldownUntil: 0,
|
||||
// 浇水倒计时到0后的延迟清理定时器(避免和新倒计时串台)
|
||||
wateringCountdownResetTimer: null,
|
||||
// 最近一次成功上传的时间戳(毫秒)
|
||||
lastUploadTs: 0,
|
||||
// 最近一次获取电量的时间戳(毫秒)
|
||||
|
|
@ -587,12 +603,16 @@
|
|||
xctimesj: '',
|
||||
sdminutes: '',
|
||||
sdseconds: '',
|
||||
wateringCountdownMinutes: '', // 浇水倒计时分钟(从showArray[4]获取)
|
||||
wateringCountdownSeconds: '', // 浇水倒计时秒数(从showArray[4]获取)
|
||||
showWateringCountdown: false, // 是否显示浇水倒计时(第三位和第四位都为1时才显示)
|
||||
datalist: '',
|
||||
devicelist:[],
|
||||
shebid:'',
|
||||
user:{},
|
||||
lastChar:'',
|
||||
timer:'',
|
||||
wateringCountdownTimer: null, // 浇水倒计时定时器
|
||||
bjflag: '',
|
||||
userobj:{},
|
||||
devicesarr:[],
|
||||
|
|
@ -622,6 +642,7 @@
|
|||
errorModalData: {}, // 错误弹窗数据
|
||||
dianya:0,
|
||||
sydl:'--',
|
||||
signalStrength: 0, // 信号强度格数(1-4)
|
||||
zaixianobj:{},
|
||||
modelId:'',
|
||||
jsobj:{},
|
||||
|
|
@ -632,6 +653,14 @@
|
|||
onlineStatus:''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// 是否正在浇水(手动定时器或设备倒计时在跑),用于:浇水开关不可关闭、雨水感应不可点击
|
||||
isWateringInProgress() {
|
||||
const manualRunning = !!(this.sdminutes || this.sdseconds)
|
||||
const deviceCountdownRunning = !!(this.showWateringCountdown && (this.wateringCountdownMinutes || this.wateringCountdownSeconds))
|
||||
return manualRunning || deviceCountdownRunning
|
||||
}
|
||||
},
|
||||
// 分享到好友(会话)
|
||||
onShareAppMessage: function() {
|
||||
return {
|
||||
|
|
@ -702,6 +731,7 @@
|
|||
this.clearDisconnectTimer()
|
||||
this.clearDataTimeoutTimer()
|
||||
this.clearConnectionTimeout()
|
||||
this.clearWateringCountdownTimer()
|
||||
},
|
||||
onUnload() {
|
||||
// 页面卸载时清除定时器
|
||||
|
|
@ -709,9 +739,9 @@
|
|||
this.clearDisconnectTimer()
|
||||
this.clearDataTimeoutTimer()
|
||||
this.clearConnectionTimeout()
|
||||
this.clearWateringCountdownTimer()
|
||||
},
|
||||
methods: {
|
||||
|
||||
// 跳转到网关列表
|
||||
goToGatewayList() {
|
||||
uni.navigateTo({
|
||||
|
|
@ -729,21 +759,33 @@
|
|||
if(this.pre === 'WATER' && this.vardataflag != 3){
|
||||
this.ver_data = this.buildVerDataFromBackend(this.zaixianobj)
|
||||
}
|
||||
if(this.pre === 'pre' && this.vardataflag != 3){
|
||||
if(this.pre === 'SMSJ:' && this.vardataflag != 3){
|
||||
this.ver_data = this.buildVerDataFromBackend(this.zaixianobj)
|
||||
console.log(this.ver_data);
|
||||
// this.ver_data = this.zaixianobj
|
||||
console.log(this.ver_data,'55555555555prprprprprprprpr');
|
||||
}
|
||||
if (res.data && res.data.iotData && res.data.iotData.xinp !== undefined) {
|
||||
this.xinp = res.data.iotData.xinp.value == undefined ? '--' : res.data.iotData.xinp.value
|
||||
}
|
||||
if (res.data && res.data.iotData && res.data.iotData.yudi !== undefined) {
|
||||
this.yschecked = res.data.iotData.yudi.value == 0 ? true : false
|
||||
if (!this.isWateringInProgress) {
|
||||
this.yschecked = res.data.iotData.yudi.value == 0 ? true : false
|
||||
}
|
||||
}
|
||||
if (res.data && res.data.iotData && res.data.iotData.lock !== undefined) {
|
||||
this.etchecked = res.data.iotData.lock.value == 0 ? true : false
|
||||
}
|
||||
this.devicetime = res.data.iotData.time.value
|
||||
|
||||
let originalValue = (res?.data?.iotData?.time?.value ?? "").toString().trim();
|
||||
// 去掉首尾可能多出来的英文双引号 "
|
||||
originalValue = originalValue.replace(/^"|"$/g, '');
|
||||
this.devicetime = originalValue || "--";
|
||||
console.log('devicetime:', this.devicetime);
|
||||
// 获取信号强度
|
||||
if (res.data && res.data.iotData && res.data.iotData.RSSI !== undefined && res.data.iotData.RSSI.value !== undefined) {
|
||||
this.signalStrength = this.calculateSignalStrength(res.data.iotData.RSSI.value)
|
||||
} else {
|
||||
this.signalStrength = 0
|
||||
}
|
||||
// 取值
|
||||
this.onlineTime = res.data.onlineTime
|
||||
this.onlineStatus = res.data.onlineStatus
|
||||
|
|
@ -843,8 +885,19 @@
|
|||
taht.getinfo()
|
||||
uni.setStorageSync('token', res.token)
|
||||
}else if(res.code == 10001){
|
||||
uni.reLaunch({
|
||||
url:'/pages/login/login'
|
||||
that.bjflag = true
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '您还未登录,是否前去登录?',
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
uni.reLaunch({
|
||||
url:'/pages/login/login'
|
||||
})
|
||||
} else if (res.cancel) {
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
@ -864,6 +917,7 @@
|
|||
this.getlist()
|
||||
}else if(res.code == 401){
|
||||
this.isLoading = false // 请求失败时隐藏加载状态
|
||||
this.bjflag = true
|
||||
this.jmlogin()
|
||||
}
|
||||
}).catch(() => {
|
||||
|
|
@ -1160,6 +1214,16 @@
|
|||
// 雨水感应开启
|
||||
btnyushui() {
|
||||
this.handleUserAction()
|
||||
if (this.isWateringInProgress) {
|
||||
this.one = true
|
||||
this.ones = false
|
||||
uni.showToast({
|
||||
title: '请等待浇水完成后再操作雨水感应',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
this.one = false
|
||||
this.ones = true
|
||||
if(this.vardataflag != 3){
|
||||
|
|
@ -1216,11 +1280,9 @@
|
|||
})
|
||||
this.devicetime = this.getCurrentTime();
|
||||
console.log(this.devicetime);
|
||||
|
||||
let data = {
|
||||
deviceId:this.shebid,
|
||||
time:this.devicetime,
|
||||
|
||||
}
|
||||
this.$u.post(`/app/device/syncTime`,data).then(res => {
|
||||
if (res.code == 200) {
|
||||
|
|
@ -1340,6 +1402,16 @@
|
|||
// 雨水感应关闭
|
||||
btnyushuis() {
|
||||
this.handleUserAction()
|
||||
if (this.isWateringInProgress) {
|
||||
this.one = false
|
||||
this.ones = false
|
||||
uni.showToast({
|
||||
title: '请等待浇水完成后再操作雨水感应',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
this.one = false
|
||||
this.ones = true
|
||||
if(this.vardataflag != 3){
|
||||
|
|
@ -1510,7 +1582,20 @@
|
|||
url: '/page_user/lanya'
|
||||
})
|
||||
}else if(res.code == 401){
|
||||
this.jmlogin()
|
||||
// this.jmlogin()
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '您还未登录,是否前去登录?',
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
uni.navigateTo({
|
||||
url:'/pages/login/login'
|
||||
})
|
||||
} else if (res.cancel) {
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
|
@ -1575,20 +1660,33 @@
|
|||
// 确定选择时间
|
||||
btnqd() {
|
||||
this.handleUserAction()
|
||||
if (this.isManualWaterRequesting) {
|
||||
uni.showToast({
|
||||
title: '请等待请求完成后再试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
if (this.minute == '--' || this.second == '--') {
|
||||
uni.showToast({
|
||||
title: '请选择浇水时长',
|
||||
icon: 'none',
|
||||
duration: 3000
|
||||
})
|
||||
} else if(this.vardataflag == 3){
|
||||
return
|
||||
}
|
||||
|
||||
this.isManualWaterRequesting = true
|
||||
|
||||
if(this.vardataflag == 3){
|
||||
this.$u.get(`/app/getModelCommand/${this.modelId}?instructionKey=time`).then(res =>{
|
||||
if(res.code == 200){
|
||||
uni.showLoading({
|
||||
title: '开启中...'
|
||||
})
|
||||
xBlufi.notifySendCustomData({
|
||||
customData: '11' + this.format(res.data, {time: this.jstime})
|
||||
customData: '11' + this.format(res.data, {time: this.jstime}) + '@'
|
||||
})
|
||||
this.getjl()
|
||||
uni.hideLoading()
|
||||
|
|
@ -1602,6 +1700,15 @@
|
|||
duration:2000
|
||||
})
|
||||
}
|
||||
}).catch(() => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '网络异常,请稍后重试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}).finally(() => {
|
||||
this.isManualWaterRequesting = false
|
||||
})
|
||||
}else{
|
||||
|
||||
|
|
@ -1633,6 +1740,15 @@
|
|||
duration:2000
|
||||
})
|
||||
}
|
||||
}).catch(() => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '网络异常,请稍后重试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}).finally(() => {
|
||||
this.isManualWaterRequesting = false
|
||||
})
|
||||
}
|
||||
},
|
||||
|
|
@ -1654,10 +1770,10 @@
|
|||
// 如果剩余秒数为0,则停止定时器
|
||||
if (remainingSeconds <= 0) {
|
||||
clearInterval(this.timer)
|
||||
// this.btnkq()
|
||||
// 定时结束:清空计时并自动关闭浇水开关
|
||||
setTimeout(()=>{
|
||||
this.sdminutes = ''
|
||||
this.sdseconds = ''
|
||||
this.sdseconds = ''
|
||||
this.kgflag = true
|
||||
this.jsked = true
|
||||
this.jskeds = false
|
||||
|
|
@ -1666,10 +1782,161 @@
|
|||
}, 1000)
|
||||
},
|
||||
|
||||
// 启动浇水倒计时定时器
|
||||
startWateringCountdownTimer(totalSeconds) {
|
||||
// 启动新倒计时前,先清理旧的 interval 和延迟清理 timeout,避免出现负数/串台
|
||||
this.clearWateringCountdownTimer()
|
||||
|
||||
let remainingSeconds = Math.max(0, Math.floor(Number(totalSeconds) || 0))
|
||||
if (remainingSeconds <= 0) {
|
||||
this.wateringCountdownMinutes = ''
|
||||
this.wateringCountdownSeconds = ''
|
||||
this.showWateringCountdown = false
|
||||
return
|
||||
}
|
||||
|
||||
const updateDisplay = (secsLeft) => {
|
||||
const safe = Math.max(0, Math.floor(Number(secsLeft) || 0))
|
||||
const minutes = Math.floor(safe / 60).toString()
|
||||
const secs = (safe % 60).toString()
|
||||
this.wateringCountdownSeconds = secs.padStart(2, '0')
|
||||
this.wateringCountdownMinutes = (minutes > 0 ? minutes : '').padStart(2, '0')
|
||||
}
|
||||
|
||||
// 先设置初始值
|
||||
updateDisplay(remainingSeconds)
|
||||
|
||||
this.wateringCountdownTimer = setInterval(() => {
|
||||
// 先减少再渲染,避免“多显示1秒”,并确保永不小于0
|
||||
remainingSeconds = Math.max(0, remainingSeconds - 1)
|
||||
updateDisplay(remainingSeconds)
|
||||
|
||||
// 到0立刻停止,且用受控的 timeout 延迟清理展示(避免负数和旧 timeout 影响新倒计时)
|
||||
if (remainingSeconds === 0) {
|
||||
clearInterval(this.wateringCountdownTimer)
|
||||
this.wateringCountdownTimer = null
|
||||
this.wateringCountdownResetTimer = setTimeout(() => {
|
||||
this.wateringCountdownMinutes = ''
|
||||
this.wateringCountdownSeconds = ''
|
||||
this.showWateringCountdown = false
|
||||
// 不改变浇水开关状态,仅用户点击关闭时才改变
|
||||
this.wateringCountdownResetTimer = null
|
||||
}, 1000)
|
||||
}
|
||||
}, 1000)
|
||||
},
|
||||
|
||||
// 清除浇水倒计时定时器
|
||||
clearWateringCountdownTimer() {
|
||||
if (this.wateringCountdownResetTimer) {
|
||||
clearTimeout(this.wateringCountdownResetTimer)
|
||||
this.wateringCountdownResetTimer = null
|
||||
}
|
||||
if (this.wateringCountdownTimer) {
|
||||
clearInterval(this.wateringCountdownTimer)
|
||||
this.wateringCountdownTimer = null
|
||||
}
|
||||
},
|
||||
|
||||
// 计算信号强度格数(根据RSSI值)
|
||||
calculateSignalStrength(rssi) {
|
||||
if (rssi === undefined || rssi === null) {
|
||||
return 0
|
||||
}
|
||||
// 转换为数字
|
||||
const rssiValue = Number(rssi)
|
||||
// 0 到 -50:4格(最强)
|
||||
if (rssiValue >= -50) {
|
||||
return 4
|
||||
}
|
||||
// -50 到 -70:3格
|
||||
if (rssiValue >= -70) {
|
||||
return 3
|
||||
}
|
||||
// -70 到 -90:2格
|
||||
if (rssiValue >= -90) {
|
||||
return 2
|
||||
}
|
||||
// -90 以下:1格
|
||||
return 1
|
||||
},
|
||||
|
||||
// 关闭手动浇水
|
||||
btnkq() {
|
||||
this.handleUserAction()
|
||||
// 防频繁点击(包含“确定”请求进行中、开关请求进行中)
|
||||
// if (this.isManualWaterRequesting || this.isManualWaterSwitchRequesting) {
|
||||
// // 回滚开关状态(当前是“关闭”动作,阻止时保持开启)
|
||||
// this.jsked = true
|
||||
// uni.showToast({
|
||||
// title: '请不要频繁点击',
|
||||
// icon: 'none',
|
||||
// duration: 2000
|
||||
// })
|
||||
// return
|
||||
// }
|
||||
console.log('关闭')
|
||||
// 蓝牙模式:每次点击后至少冷却3秒
|
||||
if (this.vardataflag == 3) {
|
||||
const now = Date.now()
|
||||
if (now < this.manualWaterBtCooldownUntil) {
|
||||
this.jsked = true
|
||||
uni.showToast({
|
||||
title: '请不要频繁点击',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
this.manualWaterBtCooldownUntil = now + 3000
|
||||
this.isManualWaterSwitchRequesting = true
|
||||
const unlockAt = this.manualWaterBtCooldownUntil
|
||||
|
||||
this.$u.get(`/app/getModelCommand/${this.modelId}?instructionKey=close`).then(res =>{
|
||||
if(res.code == 200){
|
||||
uni.showLoading({
|
||||
title: '关闭中...'
|
||||
})
|
||||
xBlufi.notifySendCustomData({
|
||||
customData: "11" + res.data
|
||||
})
|
||||
clearInterval(this.timer)
|
||||
this.sdminutes = ''
|
||||
this.sdseconds = ''
|
||||
this.kgflag = true
|
||||
this.jsked = true
|
||||
this.jskeds = false
|
||||
uni.hideLoading()
|
||||
}else{
|
||||
// 回滚开关(关闭失败则保持开启)
|
||||
this.jsked = true
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration:2000
|
||||
})
|
||||
}
|
||||
}).catch(() => {
|
||||
// 回滚开关(关闭失败则保持开启)
|
||||
this.jsked = true
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '网络异常,请稍后重试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}).finally(() => {
|
||||
const delay = Math.max(0, unlockAt - Date.now())
|
||||
setTimeout(() => {
|
||||
this.isManualWaterSwitchRequesting = false
|
||||
}, delay)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 接口模式:等待请求结束后才能再次点击
|
||||
this.isManualWaterSwitchRequesting = true
|
||||
if(this.vardataflag != 3){
|
||||
uni.showLoading({
|
||||
title: '关闭中...'
|
||||
|
|
@ -1693,31 +1960,8 @@
|
|||
this.jsked = true
|
||||
this.jskeds = false
|
||||
}else{
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration:2000
|
||||
})
|
||||
}
|
||||
})
|
||||
}else{
|
||||
this.$u.get(`/app/getModelCommand/${this.modelId}?instructionKey=close`).then(res =>{
|
||||
if(res.code == 200){
|
||||
uni.showLoading({
|
||||
title: '关闭中...'
|
||||
})
|
||||
xBlufi.notifySendCustomData({
|
||||
customData: "11" + res.data
|
||||
})
|
||||
clearInterval(this.timer)
|
||||
this.sdminutes = ''
|
||||
this.sdseconds = ''
|
||||
this.kgflag = true
|
||||
// 回滚开关(关闭失败则保持开启)
|
||||
this.jsked = true
|
||||
this.jskeds = false
|
||||
uni.hideLoading()
|
||||
}else{
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
|
|
@ -1725,12 +1969,54 @@
|
|||
duration:2000
|
||||
})
|
||||
}
|
||||
}).catch(() => {
|
||||
// 回滚开关(关闭失败则保持开启)
|
||||
this.jsked = true
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '网络异常,请稍后重试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}).finally(() => {
|
||||
this.isManualWaterSwitchRequesting = false
|
||||
})
|
||||
}
|
||||
},
|
||||
// 开启手动浇水
|
||||
btngb() {
|
||||
this.handleUserAction()
|
||||
// 防频繁点击(包含“确定”请求进行中、开关请求进行中)
|
||||
if (this.isManualWaterRequesting || this.isManualWaterSwitchRequesting) {
|
||||
// 回滚开关状态(当前是“开启”动作,阻止时保持关闭)
|
||||
this.jskeds = false
|
||||
uni.showToast({
|
||||
title: '请不要频繁点击',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
// 蓝牙模式:每次点击后至少冷却3秒
|
||||
if (this.vardataflag == 3) {
|
||||
const now = Date.now()
|
||||
if (now < this.manualWaterBtCooldownUntil) {
|
||||
this.jskeds = false
|
||||
uni.showToast({
|
||||
title: '请不要频繁点击',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
this.manualWaterBtCooldownUntil = now + 3000
|
||||
this.isManualWaterSwitchRequesting = true
|
||||
const unlockAt = this.manualWaterBtCooldownUntil
|
||||
setTimeout(() => {
|
||||
// 到时间自动解锁
|
||||
if (Date.now() >= unlockAt) this.isManualWaterSwitchRequesting = false
|
||||
}, 3000)
|
||||
}
|
||||
console.log('开启')
|
||||
this.sdjsflag = true
|
||||
this.kgflag = false
|
||||
|
|
@ -1878,6 +2164,7 @@
|
|||
const versionNumber = result[0].match(/ver(\d+)/)?.[1];
|
||||
const ver = versionNumber ? parseInt(versionNumber) : 0;
|
||||
this.ver = 'ver' + ver
|
||||
|
||||
console.log(this.ver,'ververver');
|
||||
// 6. 继续您原来的处理逻辑
|
||||
const timeParts = dataPart.split(',');
|
||||
|
|
@ -1959,24 +2246,27 @@
|
|||
const inputString = this.datalist;
|
||||
// console.log('接收到的数据:', inputString);
|
||||
// 检查是否有 @ 分隔符
|
||||
const hasAtSymbol = inputString.includes('@');
|
||||
let processedString;
|
||||
let currentDay = 0;
|
||||
const hasAtSymbol = inputString.includes('@')
|
||||
let processedString
|
||||
let currentDay = 0
|
||||
if (hasAtSymbol) {
|
||||
// 只分割第一个 @,保留后面的所有内容
|
||||
const firstAtIndex = inputString.indexOf('@');
|
||||
this.ver = inputString.substring(0, firstAtIndex) || '';
|
||||
processedString = inputString.substring(firstAtIndex + 1) || '';
|
||||
const firstAtIndex = inputString.indexOf('@')
|
||||
this.ver = inputString.substring(0, firstAtIndex) || ''
|
||||
processedString = inputString.substring(firstAtIndex + 1) || ''
|
||||
// 解析当前天数
|
||||
const showMatch = processedString.match(/show:([^;]+)/);
|
||||
const showMatch = processedString.match(/show:([^;]+)/)
|
||||
if (showMatch) {
|
||||
const showValues = showMatch[1].split(',');
|
||||
currentDay = parseInt(showValues[showValues.length - 2]) || 0;
|
||||
currentDay = parseInt(showValues[showValues.length - 2]) || 0
|
||||
}
|
||||
} else {
|
||||
processedString = inputString;
|
||||
this.ver = '';
|
||||
}
|
||||
if(this.ver.length > 6){
|
||||
this.ver = this.ver.slice(0,6)
|
||||
}
|
||||
console.log(this.ver,'ververver');
|
||||
const version = this.ver;
|
||||
// 使用正则表达式提取数字部分
|
||||
|
|
@ -2023,11 +2313,50 @@
|
|||
this.ver_data = pSetObjects
|
||||
this.jstimeobj = pSetObjects
|
||||
this.showobj = showObject
|
||||
|
||||
console.log(this.showobj.showArray,'this.showobj.showArraythis.showobj.showArraythis.showobj.showArray')
|
||||
// 设置开关状态
|
||||
// 设置开关状态(浇水进行中时不更新雨水感应状态)
|
||||
if(this.showobj.showArray && this.showobj.showArray.length >= 2){
|
||||
this.yschecked = this.showobj.showArray[1] == 0 ? true : false
|
||||
if (!this.isWateringInProgress) {
|
||||
this.yschecked = this.showobj.showArray[1] == 0 ? true : false
|
||||
}
|
||||
this.etchecked = this.showobj.showArray[0] == 0 ? true : false
|
||||
}
|
||||
// 获取浇水倒计时(第五位,索引为4),前提是第三位(索引2)和第四位(索引3)都必须是1
|
||||
if(this.showobj.showArray && this.showobj.showArray.length > 4){
|
||||
// 检查第三位(索引2)和第四位(索引3)是否都为1
|
||||
const thirdValue = this.showobj.showArray[2]
|
||||
const fourthValue = this.showobj.showArray[3]
|
||||
if(thirdValue === 1 && fourthValue === 1){
|
||||
// 第三位和第四位都是1,才取第五位的值
|
||||
const countdown = this.showobj.showArray[4]
|
||||
if(countdown && countdown > 0){
|
||||
// 清除之前的倒计时定时器
|
||||
this.clearWateringCountdownTimer()
|
||||
// 仅更新设备倒计时显示,不改变浇水开关状态(仅用户点击才改变)
|
||||
this.showWateringCountdown = true
|
||||
// 启动倒计时
|
||||
this.startWateringCountdownTimer(countdown)
|
||||
} else {
|
||||
// 倒计时为0,清除定时器与显示,不改变浇水开关状态
|
||||
this.clearWateringCountdownTimer()
|
||||
this.wateringCountdownMinutes = ''
|
||||
this.wateringCountdownSeconds = ''
|
||||
this.showWateringCountdown = false
|
||||
}
|
||||
} else {
|
||||
// 第三位或第四位不是1,清除定时器与显示,不改变浇水开关状态
|
||||
this.clearWateringCountdownTimer()
|
||||
this.wateringCountdownMinutes = ''
|
||||
this.wateringCountdownSeconds = ''
|
||||
this.showWateringCountdown = false
|
||||
}
|
||||
} else {
|
||||
// 数组长度不够,清除定时器与显示,不改变浇水开关状态
|
||||
this.clearWateringCountdownTimer()
|
||||
this.wateringCountdownMinutes = ''
|
||||
this.wateringCountdownSeconds = ''
|
||||
this.showWateringCountdown = false
|
||||
}
|
||||
this.dianya = this.showobj.showArray[this.showobj.showArray.length - 1]
|
||||
console.log('this.yscheckedthis.yschecked',this.yschecked,this.etchecked)
|
||||
|
|
@ -2089,7 +2418,7 @@
|
|||
nextTimeDiff: this.xctime,
|
||||
prevTime: this.sctimejs
|
||||
});
|
||||
if(this.ver == 'ver290' || this.ver == 'ver280'){
|
||||
if(this.showobj.showArray.length > 9){
|
||||
this.xinp = this.showobj.showArray[this.showobj.showArray.length - 2]
|
||||
this.dianya = this.showobj.showArray[this.showobj.showArray.length - 1]
|
||||
}else{
|
||||
|
|
@ -3071,6 +3400,14 @@
|
|||
margin-right: 32rpx;
|
||||
}
|
||||
}
|
||||
.signal-bars {
|
||||
.signal-bar {
|
||||
transition: background-color 0.3s;
|
||||
&.active {
|
||||
background-color: #48893B !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.selectbox {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user