初次提交

This commit is contained in:
2025-06-30 10:21:25 +08:00
commit 150b39dfea
396 changed files with 80277 additions and 0 deletions

View File

@ -0,0 +1,346 @@
@font-face {
font-family: "iconfont"; /* Project id 2009600 */
src: url('https://at.alicdn.com/t/font_2009600_gpzp7pxtnw.woff2?t=1620633089023') format('woff2'),
url('https://at.alicdn.com/t/font_2009600_gpzp7pxtnw.woff?t=1620633089023') format('woff'),
url('https://at.alicdn.com/t/font_2009600_gpzp7pxtnw.ttf?t=1620633089023') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* 清除图标 */
.icon-clear:before{
content: '\e606';
}
.icon-banxuanzhongshousuo1-shi:before {
content: "\e682";
}
.icon-xuanzhong3:before {
content: "\e6bb";
}
.icon-weixuanzhong2:before {
content: "\e62e";
}
.icon-danxuanxuanzhong:before {
content: "\e631";
}
.icon-xuanzhong4:before {
content: "\e63e";
}
.icon-xuanzhong1:before {
content: "\e62d";
}
.icon-xuanzhong2:before {
content: "\e656";
}
.icon-selected:before {
content: "\e615";
}
.icon-weixuanzhong1:before {
content: "\e614";
}
.icon-xingzhuang6kaobei3-copy-copy:before {
content: "\e613";
}
.icon-radio-checked:before {
content: "\e63f";
}
.icon-huifu:before {
content: "\e619";
}
.icon-dizhi:before {
content: "\e64a";
}
.icon-kuaijiecaidan:before {
content: "\e60a";
}
.icon-z043:before {
content: "\e62f";
}
.icon-guanbi:before {
content: "\e607";
}
.icon-xuanze:before {
content: "\e623";
}
.icon-caidanzhaolinggan:before {
content: "\e616";
}
.icon-xitongshezhi:before {
content: "\e60c";
}
.icon-xitongshezhi1:before {
content: "\e633";
}
.icon-lunbo:before {
content: "\e692";
}
.icon-shuping:before {
content: "\e659";
}
.icon-tongzhi:before {
content: "\e641";
}
.icon-pinglunguanlishezhi:before {
content: "\e6ac";
}
.icon-icon:before {
content: "\e600";
}
.icon-liuyanguanli:before {
content: "\e61d";
}
.icon-xuanzhong:before {
content: "\e669";
}
.icon--:before {
content: "\e622";
}
.icon-tushu:before {
content: "\e604";
}
.icon-huishouzhan:before {
content: "\e61c";
}
.icon-yonghutouxiang:before {
content: "\e617";
}
.icon-liebiao:before {
content: "\e630";
}
.icon-fenlei:before {
content: "\e621";
}
.icon-tushu1:before {
content: "\e605";
}
.icon-tubiao-:before {
content: "\e620";
}
.icon-weixuanze:before {
content: "\e624";
}
.icon-tushujieyue:before {
content: "\e690";
}
.icon-lunbo1:before {
content: "\e6c5";
}
.icon-shanchu:before {
content: "\e67b";
}
.icon-lunbo2:before {
content: "\e61e";
}
.icon-huaban:before {
content: "\e663";
}
.icon-kehuan:before {
content: "\e608";
}
.icon-icon02:before {
content: "\e601";
}
.icon-huishouzhan1:before {
content: "\e612";
}
.icon-huishouzhan2:before {
content: "\e63d";
}
.icon-sousuo:before {
content: "\e62c";
}
.icon-xingzhuang:before {
content: "\e625";
}
.icon-lunbobankuai:before {
content: "\e61f";
}
.icon-shangchuan:before {
content: "\e602";
}
.icon-yonghu:before {
content: "\e761";
}
.icon-tongzhi1:before {
content: "\e603";
}
.icon-jingsong:before {
content: "\e65c";
}
.icon-fenlei1:before {
content: "\e6c6";
}
.icon-xieshupingicon:before {
content: "\e72d";
}
.icon-liuyan:before {
content: "\e626";
}
.icon-weixuanzhong:before {
content: "\e627";
}
.icon-youxiang:before {
content: "\e646";
}
.icon-lunboguanggao:before {
content: "\e6b3";
}
.icon-xuanze1:before {
content: "\e60d";
}
.icon-chushaixuanxiang:before {
content: "\e606";
}
.icon-liuyanguanli1:before {
content: "\e61a";
}
.icon-shanchu1:before {
content: "\e609";
}
.icon-huishouzhan3:before {
content: "\e642";
}
.icon-shangchuan1:before {
content: "\e823";
}
.icon-huishouzhan4:before {
content: "\e61b";
}
.icon-chuangzuo:before {
content: "\e8ad";
}
.icon-dianzan:before {
content: "\e8ae";
}
.icon-paihangbang:before {
content: "\e8b3";
}
.icon-shouye:before {
content: "\e8b9";
}
.icon-shoucang:before {
content: "\e8c6";
}
.icon-addApp:before {
content: "\e60b";
}
.icon-huishouzhan5:before {
content: "\e63a";
}
.icon-add1:before {
content: "\e60e";
}
.icon-shoucang1:before {
content: "\e60f";
}
.icon-canshutongji:before {
content: "\e618";
}
.icon-rizhiguanli:before {
content: "\e628";
}
.icon-shanchu2:before {
content: "\e629";
}
.icon-xinzeng:before {
content: "\e62a";
}
.icon-zhankailiebiao:before {
content: "\e62b";
}
.icon-xiala-copy:before {
content: "\e610";
}
.icon-shangla:before {
content: "\e64e";
}
.icon-xianxingshezhi:before {
content: "\e611";
}

View File

@ -0,0 +1,76 @@
.container-list-item {
background-color: #fff;
border-bottom: 1rpx solid #f4f4f4;
border-radius: 20rpx;
margin:0 30rpx 20rpx 30rpx;
.content
{
display: flex;
align-items: center;
// min-height: 60rpx;
width: 100%;
padding:30rpx 15rpx ;
position: relative;
font-size: 32rpx;
// 默认文本显示内容默认的slot
.slot {
// position:absolute;
right: 64rpx;
font-size: 32rpx;
color: #5b5757;
.word {
width:100%;
word-break: break-all;
}
}
// 默认箭头显示样式
.right {
position: absolute;
text-align: center;
width: 80rpx;
right: 30rpx;
color: #babdc3;
font-size: 32rpx;
}
}
}
// 复选框
.checkbox {
position: relative;
height: 36rpx;
margin-left: 10rpx;
margin-right: 0px;
width: 36rpx;
.txt {
font-size: 35rpx;
line-height: 36rpx;
width: 100%;
height: 100%;
display: flex;
}
}
.checkBorder {
border: 1px solid #ecdee4;
}
.text-cut{
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.value_box{
display: flex;
height: 100%;
.index{
color: #009C77;
width: 70rpx;
text-align: center;
border-right: 1rpx solid #eeeeee;
}
.value{
padding-left: 20rpx;
}
}

View File

@ -0,0 +1,312 @@
<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>