gy-app-shop/pages/home/wisdomElectricity/realTime/parameterSetup.vue

455 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="parameterSetup">
<view class="device-info">
<view class="title-box">
基本信息
</view>
<view class="parameterSetup-content" v-if="deviceDataInfo">
<view class="parameterSetup-row" v-for="(value,key,index) in deviceTopData" @click="onClickRowFn(key,value)" :key="key">
<view class="parameterSetup-row-name">{{parameterField[key]}}</view>
<view class="parameterSetup-row-value">
<text class="pr10" :style="{color:key=='deviceName'?'#999':'#000'}">{{value}}</text>
<u-icon name="arrow-right" color="#bfbfbf"></u-icon>
</view>
</view>
<view class="parameterSetup-row" v-for="(item,i) in deviceBottomData" :key="i">
<view class="parameterSetup-row-name">{{item.paramName}}</view>
<view class="parameterSetup-row-value">
<text class="pr10" style="color: #999;">{{item.paramVal||'-'}}</text>
<!-- <u-icon name="arrow-right" color="#bfbfbf"></u-icon> -->
</view>
</view>
</view>
</view>
<view class="device-alarm-box" v-if="deviceDataInfo.deviceType == 'MINIATURE_BREAKER'">
<view class="title-box">
告警配置
</view>
<u-tabs class="tab-box" :list="groupList" bar-width="375" bg-color="#f5f5f5" :is-scroll="false" :current="tabCurrent" @change="tabChange"></u-tabs>
<view class="alarm-loading-box" v-if="alarmLoading">
<u-loading mode="circle" size="30" :show="alarmLoading"></u-loading>
<text>刷新中</text>
</view>
<u-collapse ref="collapseRef" style="padding-bottom: 100rpx;">
<u-collapse-item :title="item.funcName" ref="collapseItem" v-for="(item, index) in list" :key="item.funcKey" @change="handleOpenChange(item, index)">
<template v-slot:title >
<text style="padding-left: 10rpx;">{{item.funcName}}</text>
<text :style="{color:item.isAck?'green':'red'}">{{item.isAck?'已同步设备':'未同步设备'}}</text>
</template>
<u-form ref="uForm" label-width="200" label-align="left">
<u-form-item :label="val.name" v-for="val in item.confJsonObj" :key="val.key">
<u-switch v-if="getAttrType(val) === 'switch'" :disabled="item.disabled" v-model="val.value"></u-switch>
<uni-data-select
v-else-if="getAttrType(val) === 'select'"
v-model="val.value"
placement="top"
:disabled="item.disabled"
:localdata="getSelectList(val)"
></uni-data-select>
<u-input v-else :disabled="item.disabled" v-model="val.value" />
</u-form-item>
</u-form>
<view >
<u-button v-if="item.disabled" @click="toggleState(index)">修改</u-button>
<u-button v-else type="primary" @click="sendAttr(item,index)">下发</u-button>
</view>
</u-collapse-item>
</u-collapse>
<u-empty v-if="!list" text="告警列表为空" mode="list"></u-empty>
<view class="btn-list" @click="getAlarmList">
<view class="btn-box">
刷新告警配置
</view>
</view>
</view>
<!-- <view class="parameterSetup-content">
<view class="parameterSetup-row" v-if="deviceDataInfo.deviceType == 'MINIATURE_BREAKER'" @click="goAlarmConfig">
<view class="parameterSetup-row-name">告警配置</view>
<view class="parameterSetup-row-value">
<text class="pr10">去配置</text>
<u-icon name="arrow-right" color="#bfbfbf"></u-icon>
</view>
</view>
</view> -->
<!-- 接线设置 -->
<!-- <u-picker mode="selector" v-model="wiringSetupFlag" title="请选择要接入的线路" :range="wiringSetupSelector" :default-selector="[0]"></u-picker> -->
<!-- 线路 -->
<!-- <u-picker mode="selector" v-model="lineRoadFlag" :range="lineRoadSelector" :default-selector="[0]"></u-picker> -->
<!-- 设备别名 -->
<!-- <u-popup v-model="deviceNameFlag" mode="center" :closeable="true">
<view class="popup-setup">
<view class="popup-setup-title">修改设备别名</view>
<u-input v-model="deviceNameValue" type="text" :border="true" />
<view class="popup-setup-btn">
<u-button type="error" size="medium" @click="deviceNameFlag = false">取消</u-button>
<u-button type="success" size="medium">保存</u-button>
</view>
</view>
</u-popup> -->
<!-- 重命名 -->
<u-popup v-model="topEditFlag" mode="center" :closeable="true">
<view class="popup-setup">
<view class="popup-setup-title">{{currentTopPickRow==="lineRoad"?"线路别名":"重命名"}}</view>
<u-input type="text" :border="true" v-model="topEditDataInputValue"/>
<view class="popup-setup-btn">
<u-button type="error" size="medium" @click="topEditFlag = false;topEditDataInputValue = '';">取消</u-button>
<u-button type="success" size="medium" @click="onSaveTopEditFn">保存</u-button>
</view>
</view>
</u-popup>
<!-- 修改弹出框 -->
<u-popup v-model="editDataFlag" mode="center" :closeable="true">
<view class="popup-setup">
<view class="popup-setup-title">{{bottomCurrentPickObj.paramName}}</view>
<u-input type="text" :border="true" v-model="bottomEditDataInputValue" />
<view class="popup-setup-btn">
<u-button type="error" size="medium" @click="editDataFlag = false;bottomEditDataInputValue='';">取消</u-button>
<u-button type="success" size="medium" @click="bottomSaveEditFn">保存</u-button>
</view>
</view>
</u-popup>
<u-toast ref="uToast" />
</view>
</template>
<script>
import parameterField from "@/pages/home/wisdomElectricity/realTime/parameterField.js"
import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
export default{
data(){
return {
tabCurrent: 0,
deviceKey:'',
groupList:[],
list:[],
topEditFlag:false,
editDataFlag:false,
bottomEditDataInputValue:"", // 底部参数修改的值
bottomCurrentPickObj:null, // 当前选择的底部参数
deviceNameValue:"",
parameterField:parameterField,
deviceTopData:{
},
deviceDataObj:null,
deviceDataInfo:null,
deviceBottomData:null,
currentBottomPickData:null,
currentTopPickRow:"",
topEditDataInputValue:"",
alarmLoading:false
}
},
mixins:[MescrollMixin],
onLoad(e) {
console.log(e,"eesss");
this.deviceId = e.deviceId;
this.deviceKey = e.deviceKey;
this.getDeviceInfoDataFn();
this.getAlarmList();
},
methods:{
goAlarmConfig(){
uni.navigateTo({
url:'./alarmConfig?deviceKey=' + this.deviceDataInfo.deviceKey
})
},
getDeviceInfoDataFn(){
// this.$get("/app/device/info",{deviceId:this.deviceId}).then((res)=>{
this.$get("/app/device/" + this.deviceId).then((res)=>{
if(res.code !=200) return;
this.deviceDataInfo = res.data;
if(this.deviceDataInfo.paramList){
if(res.data.deviceType == 'MINIATURE_BREAKER'){
this.deviceBottomData = this.deviceDataInfo.paramList.filter((item) => {
return item.paramKey != 'leakage_current' && item.paramKey != 'temperature';
})
}else{
this.deviceBottomData = this.deviceDataInfo.paramList;
}
}
this.deviceTopData = {
deviceName:this.deviceDataInfo.parentName,
lineRoad:this.deviceDataInfo.deviceName,
// rename:this.deviceDataInfo.deviceName
};
})
},
bottomSaveEditFn(){
this.$put("/app/device/edit-param",{
paramId: this.bottomCurrentPickObj.paramId,
paramVal: this.bottomEditDataInputValue
}).then((res)=>{
if(res.code === 200){
this.$tui.toast(res.msg,3000);
this.getDeviceInfoDataFn();
}
}).finally(()=>{
this.editDataFlag = false;
this.bottomEditDataInputValue='';
})
},
onClickBottomRowFn(item){
console.log(item,"item");
this.editDataFlag = true;
this.bottomCurrentPickObj = item;
},
onClickRowFn(key,value){
console.log(key,"ee",value);
if(key == "deviceName") return;
this.currentTopPickRow = key;
this.topEditDataInputValue=value;
this.topEditFlag = true;
},
onSaveTopEditFn(){
this.$put("/app/device/edit-image",{
deviceId: this.deviceDataInfo.deviceId,
deviceName: this.topEditDataInputValue
}).then((res)=>{
if(res.code === 200){
this.$tui.toast(res.msg,3000);
this.getDeviceInfoDataFn();
}
}).finally(()=>{
this.topEditFlag = false;
this.topEditDataInputValue='';
})
},
handleOpenChange(item, index) {
setTimeout(() => {
this.$refs.collapseRef.childrens[index].init();
}, 20);
},
tabChange(e){
console.log("tab",e)
this.tabCurrent = e;
this.list = this.groupList[e].list || [];
setTimeout(() => {
this.$refs.collapseRef.init();
}, 20);
},
getSelectList(data){
console.log("data",data);
let list = [];
list = data.options.map(item=>{
return {
text: item.label,
value: item.value
}
})
return list;
},
//切换状态
toggleState(i){
this.$nextTick(()=>{
this.list[i].disabled = !this.list[i].disabled;
})
},
sendAttr(data,i){
console.log("下发值为",data)
uni.showModal({
title: '提示',
content:'确认要下发配置吗?',
confirmText:'确认',
cancelText:'取消',
success: (res) => {
if (res.confirm) {
let confJsonObj = data.confJsonObj.map(item=>{
if(item.key.endsWith('_state')){
return {
...item,
value:item.value?1:0
}
}else{
return item;
}
})
let parmas = {
...data,
confJsonObj
}
this.$put("/iot/func",parmas).then((res)=>{
console.log("res",res)
if(res.code == 200){
this.$refs.uToast.show({
title: res.msg,
type: 'success',
})
this.list[i].disabled = !this.list[i].disabled;
}else{
this.$refs.uToast.show({
title: res.msg,
type: 'error',
})
}
}).catch((err)=>{
console.log("err",err)
this.$refs.uToast.show({
title: err.msg,
type: 'error',
})
})
}else if (res.cancel) {
}
}
});
},
getAlarmList() {
this.alarmLoading = true;
this.$get("/iot/func/" + this.deviceKey,{}).then((res)=>{
console.log("res",res)
let groupList = [];
if(res?.data.length>0){
res.data.forEach((item,index)=>{
let flag = true;
groupList.forEach((val,i)=>{
if(val.funcType === item.funcType){
groupList[i].list.push({
...item,
disabled: true,
});
flag = false;
}
})
if(flag && item.funcType!= 'c'){
groupList.push({
funcType: item.funcType,
name: item.funcTypeName,
list: [{
...item,
disabled: true,
}]
})
}
});
this.groupList = groupList;
this.list = groupList[this.tabCurrent].list;
this.$nextTick(()=>{
this.$refs.collapseRef.init();
})
}else{
this.groupList = [];
this.list = [];
}
this.alarmLoading = false;
}).catch((err)=>{
console.log("err",err)
this.alarmLoading = false;
})
},
//判断告警数据类型
getAttrType(obj){
if(obj.key.endsWith('_state')){
return 'switch';
}else if(obj.key.endsWith('_select')){
return 'select';
}else{
return 'input';
}
},
}
}
</script>
<style lang="scss" scoped>
.parameterSetup{
width: 100%;
padding-bottom: 150rpx;
&-content{
padding: $paddingTB $paddingLR;
}
&-row{
display: flex;
justify-content: space-between;
padding: 20rpx 16rpx;
border-bottom: 1px solid #ddd;
&-value{
font-weight: bold;
}
}
.popup-setup{
width: 600rpx;
padding: 50rpx 30rpx;
&-title{
font-weight: bold;
font-size: 28rpx;
padding-bottom: 20rpx;
}
&-btn{
display: flex;
padding-top: 30rpx;
justify-content: space-around;
}
&-voltageLimit{
&-up,&-down{
display: flex;
align-items: center;
justify-content: center;
}
}
}
.title-box{
padding: 16rpx 20rpx;
font-weight: bold;
font-size: 32rpx;
position: relative;
// margin: 6rpx 0;
&:before{
content: '';
width: 6rpx;
height: 50rpx;
position: absolute;
top: 12rpx;
left: 8rpx;
background: #0066cc;
border-radius: 2rpx;
}
}
}
.alarm-loading-box{
display: flex;
justify-content: center;
align-items: center;
padding: 10rpx 0;
>text{
margin-left: 10rpx;
font-size: 30rpx;
}
}
::v-deep .u-collapse-head{
border-bottom: 1px solid #f5f5f5;
}
::v-deep .u-collapse-body{
// height: auto !important;
padding: 0 20rpx;
}
.btn-list{
position: fixed;
left: 0;
right: 0;
bottom: 0;
height: 140rpx;
padding: 20rpx 20rpx;
background: #fff;
z-index: 99;
border-top: 1px solid #f5f5f5;
.btn-box{
background: #0066cc;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 36rpx;
height: 100rpx;
border-radius: 50rpx;
}
}
</style>