312 lines
9.5 KiB
Vue
312 lines
9.5 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="container-list-item" >
|
|||
|
|
<view class="content" @click="clickItem($event, item)">
|
|||
|
|
<!-- 复选框 -->
|
|||
|
|
<view class="checkbox" v-if="isCheckBox" @click.stop="clickBox($event , item)">
|
|||
|
|
<i v-if="curChecked " :style="{'color' :checkActiveColor}"
|
|||
|
|
class="iconfont icon-xuanzhong txt icon-selected" />
|
|||
|
|
<i v-else :style="{'color': checkNoneColor}" class="iconfont icon-weixuanzhong txt" />
|
|||
|
|
</view>
|
|||
|
|
<!-- 复选框 -->
|
|||
|
|
<!-- 单选框 -->
|
|||
|
|
<view class="checkbox" v-else-if="isRadio" @click.stop="clickBox($event, item)">
|
|||
|
|
<i v-if="curChecked" :style="{'color' :checkActiveColor}" class="txt iconfont icon-selected" />
|
|||
|
|
<i v-else :style="{'color': checkNoneColor}" class="txt iconfont icon-weixuanzhong1" />
|
|||
|
|
</view>
|
|||
|
|
<!-- 单选框 -->
|
|||
|
|
<!-- 自定义插槽body -->
|
|||
|
|
<view :style="isCheck ?'left: 56rpx':'left: 16rpx'" class="slot">
|
|||
|
|
<view v-if="item.name" class="value_box" style="height: 50rpx!important;display: flex;align-items: center;">
|
|||
|
|
<view class="index" style="height: 50rpx;">
|
|||
|
|
<image v-if="item.deviceType? item.deviceType.includes('pcs') : ''" :src="pcs" class="device-img"></image>
|
|||
|
|
<image v-else-if="item.deviceType? item.deviceType.includes('bms') : ''" :src="bms" class="device-img"></image>
|
|||
|
|
<image v-else-if="item.deviceType? item.deviceType.includes('stack') : ''" :src="cluster" class="device-img"></image>
|
|||
|
|
<image v-else-if="item.deviceType? item.deviceType.includes('storage_fire') : ''" :src="fire" class="device-img"></image>
|
|||
|
|
<image v-else-if="item.deviceType? item.deviceType.includes('pack') : ''" :src="pack" class="device-img"></image>
|
|||
|
|
<image v-else-if="item.deviceType? item.deviceType.includes('air_condition') : ''" :src="air" class="device-img"></image>
|
|||
|
|
<image v-else-if="item.deviceType? item.deviceType.includes('ele_meter') : ''" :src="unit" class="device-img"></image>
|
|||
|
|
<image v-else-if="item.deviceType? item.deviceType.includes('emu') : ''" :src="emu" class="device-img"></image>
|
|||
|
|
<image v-else :src="other" style="width: 50rpx;height: 50rpx;"></image>
|
|||
|
|
<!-- {{item.deviceType}} -->
|
|||
|
|
</view>
|
|||
|
|
<view class="value">
|
|||
|
|
{{item[sLabel]}}
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<!-- 自定义插槽body -->
|
|||
|
|
<view v-if="hasChildren" class="right" @click.stop="clickItemRight($event,item)"><i class="iconfont icon-z043" ></i></view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import pcs from '@/static/aidex/device/pcs.png'
|
|||
|
|
import bms from '@/static/aidex/device/bms.png'
|
|||
|
|
import cluster from '@/static/aidex/device/cluster.png'
|
|||
|
|
import air from '@/static/aidex/device/air.png'
|
|||
|
|
import fire from '@/static/aidex/device/fire.png'
|
|||
|
|
import emu from '@/static/aidex/device/emu.png'
|
|||
|
|
import pack from '@/static/aidex/device/pack.png'
|
|||
|
|
import unit from '@/static/aidex/device/unit.png'
|
|||
|
|
import other from '@/static/aidex/device/other.png'
|
|||
|
|
/**
|
|||
|
|
* 无限极树的单项 item
|
|||
|
|
* @description无限级数的单项item
|
|||
|
|
* @property {Object} item 单项的值(默认{})
|
|||
|
|
* @property {Boolean} isCheck 判断是否可选 (默认false)
|
|||
|
|
* @property {Boolean} 判断是否是否多选(默认false, isCheck为true时有效)。
|
|||
|
|
* @property {String} checkActiveColor 选中状态下单选框/复选框的颜色 (默认#00AAFF)
|
|||
|
|
* @property {String} checkNoneColor 未选中状态下单选框/复选框的颜色(默认#B8B8B8)
|
|||
|
|
* @property {Object} comparison 属性名称对照表
|
|||
|
|
* @param {String} value 选中值对应列名称(默认value)
|
|||
|
|
* @param {String} label 显示值对应列名称(默认label)
|
|||
|
|
* @param {String} children 子级列对应名称(默认children)
|
|||
|
|
* @return {Function} 点击当前项的执行方法
|
|||
|
|
* @param {Object} item 当前项的值
|
|||
|
|
* @return {Function} change 选中值变化时执行方法(event.detail = {value: 是否选中})
|
|||
|
|
*/
|
|||
|
|
export default {
|
|||
|
|
name: 'luyj-tree-item',
|
|||
|
|
props: {
|
|||
|
|
// 传入的数值
|
|||
|
|
item: {
|
|||
|
|
type: Object,
|
|||
|
|
default: {}
|
|||
|
|
},
|
|||
|
|
index: {
|
|||
|
|
type: Number,
|
|||
|
|
default: 0
|
|||
|
|
},
|
|||
|
|
// 判断是否可选
|
|||
|
|
isCheck: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: false
|
|||
|
|
},
|
|||
|
|
// 是否多选
|
|||
|
|
multiple: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: false
|
|||
|
|
},
|
|||
|
|
// 是否选中状态
|
|||
|
|
checked: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: false
|
|||
|
|
},
|
|||
|
|
// 是否只能选择叶子结点
|
|||
|
|
nodes: {
|
|||
|
|
type: false,
|
|||
|
|
default: false
|
|||
|
|
},
|
|||
|
|
// 选中状态下单选框/复选框的颜色
|
|||
|
|
checkActiveColor: {
|
|||
|
|
type: String,
|
|||
|
|
default: '#00AAFF'
|
|||
|
|
},
|
|||
|
|
// 未选中状态下单选框的颜色
|
|||
|
|
checkNoneColor: {
|
|||
|
|
type: String,
|
|||
|
|
default: '#B8B8B8'
|
|||
|
|
},
|
|||
|
|
// 列名称对照表
|
|||
|
|
comparison: {
|
|||
|
|
type: Object,
|
|||
|
|
default: () => {
|
|||
|
|
return {
|
|||
|
|
value: 'value', // 选中值
|
|||
|
|
label: 'label', // 显示名称
|
|||
|
|
children: 'children', // 子级名称
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
sLabel: this.comparison.label ? this.comparison.label : 'label', // label值名称
|
|||
|
|
sChildren: this.comparison.children ? this.comparison.children : 'children', // children值名称
|
|||
|
|
curChecked: this.checked, //是否选中状态
|
|||
|
|
formModel: undefined,
|
|||
|
|
singleMinVolData: undefined,
|
|||
|
|
singleMaxVolData: undefined,
|
|||
|
|
pcs,
|
|||
|
|
bms,
|
|||
|
|
cluster,
|
|||
|
|
air,
|
|||
|
|
fire,emu,other,pack,unit
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
computed: {
|
|||
|
|
/**
|
|||
|
|
* 是否包含子级
|
|||
|
|
*/
|
|||
|
|
hasChildren: function() {
|
|||
|
|
return Boolean(this.item) ? (Boolean(this.item[this.sChildren]) ? this.item[this.sChildren].length >
|
|||
|
|
0 : false) : false;
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 是否单选
|
|||
|
|
*/
|
|||
|
|
isRadio: function() {
|
|||
|
|
return this.isCheck && !this.multiple && (!this.nodes || !this.hasChildren);
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 是否多选
|
|||
|
|
*/
|
|||
|
|
isCheckBox: function() {
|
|||
|
|
return this.isCheck && this.multiple && (!this.nodes || !this.hasChildren);
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
watch: {
|
|||
|
|
// 监听列名对照表变化
|
|||
|
|
comparison: {
|
|||
|
|
handler: function(val) {
|
|||
|
|
this.sLabel = this.comparison.label ? this.comparison.label : 'label';
|
|||
|
|
this.sChildren = this.comparison.children ? this.comparison.children : 'children';
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
deep: true
|
|||
|
|
},
|
|||
|
|
// 是否选中状态
|
|||
|
|
checked: function(val) {
|
|||
|
|
this.curChecked = val;
|
|||
|
|
},
|
|||
|
|
item: {
|
|||
|
|
handler(val) {
|
|||
|
|
if (val) {
|
|||
|
|
// this.getStatus()
|
|||
|
|
this.$forceUpdate()
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
deep: true,
|
|||
|
|
immediate: true
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
created() {
|
|||
|
|
// this.getStatus()
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
//获取状态
|
|||
|
|
getStatus() {
|
|||
|
|
if (this.item.deviceType) {
|
|||
|
|
let params = {
|
|||
|
|
colList: [],
|
|||
|
|
srcId: this.item.srcId,
|
|||
|
|
stationId: this.item.stationId
|
|||
|
|
}
|
|||
|
|
if (this.item.deviceType.includes('pcs')) { //舱
|
|||
|
|
params.colList = ['runState']
|
|||
|
|
} else if (this.item.deviceType.includes('emu')) {
|
|||
|
|
//emu 总有功功率 总无功功率
|
|||
|
|
params.colList = ['EMUPTotal', 'EMUQTotal']
|
|||
|
|
} else if (this.item.deviceType.includes('stack')) {
|
|||
|
|
// <!-- 簇 -->累计充电量,累计放电量
|
|||
|
|
params.colList = ['cTotalChargePower', 'cTotalDisChargePower']
|
|||
|
|
|
|||
|
|
} else if (this.item.deviceType.includes('bms')) {
|
|||
|
|
// 堆 累计充电量,累计放电量
|
|||
|
|
params.colList = ['totalCharge', 'totalDischarge']
|
|||
|
|
} else if (this.item.deviceType.includes('ele_meter')) {
|
|||
|
|
// 电表 正向有功总电量 反向有功总电量
|
|||
|
|
params.colList = ['totalCharge', 'totalDisCharge']
|
|||
|
|
} else if (this.item.deviceType.includes('air_condition')) {
|
|||
|
|
//空调 空调开关机:
|
|||
|
|
params.colList = ['airconditionSwitchYX']
|
|||
|
|
} else if (this.item.deviceType.includes('storage_fire')) {
|
|||
|
|
//消防
|
|||
|
|
} else if (this.item.deviceType.includes('pack')) { //组
|
|||
|
|
//组 最高电压 最低电压
|
|||
|
|
params.colList = ['singleMaxVolData', 'singleMinVolData']
|
|||
|
|
}
|
|||
|
|
if (params.colList.length > 0) {
|
|||
|
|
if (this.item.deviceType.includes('pack')) {
|
|||
|
|
this.GetPackTemperatureVoltageData(params)
|
|||
|
|
} else {
|
|||
|
|
this.GetNewValue(params)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
GetPackTemperatureVoltageData(params) {
|
|||
|
|
this.$u.api.deviceList.GetPackTemperatureVoltageData(params).then(res => {
|
|||
|
|
this.singleMaxVolData = res.data.packData.csingleMaxVolData
|
|||
|
|
this.singleMinVolData = res.data.packData.csingleMinVolData
|
|||
|
|
this.$forceUpdate()
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
GetNewValue(params) {
|
|||
|
|
this.$u.api.deviceList.GetNewValue(params).then(res => {
|
|||
|
|
this.formModel = res.data
|
|||
|
|
this.$forceUpdate()
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
/** 点击当前项右侧的执行方法
|
|||
|
|
* @param {Object} e
|
|||
|
|
* @param {Object} item
|
|||
|
|
*/
|
|||
|
|
clickItemRight: function(e, item) {
|
|||
|
|
this.$emit("clickItemRight", item, this.hasChildren);
|
|||
|
|
// 不包含下一级,修改check值事件
|
|||
|
|
if (!this.hasChildren && this.isCheck) {
|
|||
|
|
this.clickBox(e);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
/** 点击当前项的执行方法
|
|||
|
|
* @param {Object} e
|
|||
|
|
* @param {Object} item
|
|||
|
|
*/
|
|||
|
|
clickItem: function(e, item) {
|
|||
|
|
this.$emit("clickItem", item);
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 点击单选框或复选框
|
|||
|
|
* @param {Object} e 当前选中值
|
|||
|
|
* @param {Object} item 当前选中的项
|
|||
|
|
*/
|
|||
|
|
clickBox: function(e, item) {
|
|||
|
|
this.curChecked = !this.curChecked;
|
|||
|
|
e.detail.value = this.curChecked;
|
|||
|
|
this.$emit("change", e); // 切换单选框或复选框
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
@import 'luyj-tree-item.scss';
|
|||
|
|
@import "../../lib/css/icon.css";
|
|||
|
|
|
|||
|
|
.device-box {
|
|||
|
|
display: flex;
|
|||
|
|
flex-direction: row;
|
|||
|
|
align-items: center;
|
|||
|
|
margin-top: 20rpx;
|
|||
|
|
|
|||
|
|
.device-img {
|
|||
|
|
width: 100rpx;
|
|||
|
|
height: 100rpx;
|
|||
|
|
background: #f8f8f8;
|
|||
|
|
flex-shrink: 0;
|
|||
|
|
margin-right: 20rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.device-img{
|
|||
|
|
width: 50rpx;
|
|||
|
|
height: 50rpx;
|
|||
|
|
}
|
|||
|
|
.runValue {
|
|||
|
|
flex: 1;
|
|||
|
|
color: #12ec0a;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.stopValue {
|
|||
|
|
flex: 1;
|
|||
|
|
color: #FFB800;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
}
|
|||
|
|
</style>
|