4 changed files with 585 additions and 2 deletions
			
			
		@ -0,0 +1,462 @@ | 
				
			|||||
 | 
					<template> | 
				
			||||
 | 
					  <div class='content' :style="{height: menu.isRecentOpen ? 'calc(75vh - 70px)' : 'calc(80vh - 75px)',width: '400px'}"> | 
				
			||||
 | 
					      <div class="left"> | 
				
			||||
 | 
					        <!-- <WgtTitle :title="'设备列表'"></WgtTitle> --> | 
				
			||||
 | 
					        <el-form :model="form" class="formSearch " size="mini"  @submit.native.prevent> | 
				
			||||
 | 
					          <el-form-item> | 
				
			||||
 | 
					            <el-col :span="11"> | 
				
			||||
 | 
					              <el-select | 
				
			||||
 | 
					                v-model="form.deviceType" | 
				
			||||
 | 
					                placeholder="请选择设备类型" | 
				
			||||
 | 
					              > | 
				
			||||
 | 
					                <el-option | 
				
			||||
 | 
					                  v-for="item in [{label:'激光疲劳唤醒',value:10},{label:'智能设备箱',value:13},{label:'离网光伏供电',value:15},{label:'远端机',value:16},{label:'气象检测器',value:3},{label:'一体机柜',value:17}]" | 
				
			||||
 | 
					                  :key="item.value" | 
				
			||||
 | 
					                  :label="item.label" | 
				
			||||
 | 
					                  :value="item.value" | 
				
			||||
 | 
					                ></el-option> | 
				
			||||
 | 
					              </el-select> | 
				
			||||
 | 
					            </el-col> | 
				
			||||
 | 
					            <el-col :span="12" :offset="1"> | 
				
			||||
 | 
					              <el-checkbox-group v-model="form.deviceState" style="height:26px"> | 
				
			||||
 | 
					                <el-checkbox :label="1">在线</el-checkbox> | 
				
			||||
 | 
					                <el-checkbox :label="0">异常</el-checkbox> | 
				
			||||
 | 
					              </el-checkbox-group> | 
				
			||||
 | 
					            </el-col> | 
				
			||||
 | 
					          </el-form-item> | 
				
			||||
 | 
					          <el-form-item style="display: flex; justify-content: center;"> | 
				
			||||
 | 
					            <el-button class="btnInfoBoard" type="add" @click.native="onSearch()">搜索</el-button> | 
				
			||||
 | 
					            <el-button type="publish" @click.native="onResetSearch()">重置</el-button> | 
				
			||||
 | 
					          </el-form-item> | 
				
			||||
 | 
					        </el-form> | 
				
			||||
 | 
					        <div class="body"> | 
				
			||||
 | 
					          <vuescroll :ops="scrollOptions"> | 
				
			||||
 | 
					            <div :class="'device  '" v-for="(item, index) of list" @click="devClick(item)"> | 
				
			||||
 | 
					              <div>{{ item.deviceName }}</div> | 
				
			||||
 | 
					              <el-tooltip :content="(item.deviceState == 0 || item.deviceState == null) ? '异常' : '在线'" placement="top"> | 
				
			||||
 | 
					                <img src="@/assets/jihe/images/offline.svg" class="state" | 
				
			||||
 | 
					                  v-if="item.deviceState == '0' || item.deviceState == null"> | 
				
			||||
 | 
					                <img src="@/assets/jihe/images/online.svg" class="state" v-else> | 
				
			||||
 | 
					              </el-tooltip> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					            <div v-if="list.length === 0" style="color: #fff; text-align: center; line-height: 60px"> | 
				
			||||
 | 
					              暂无数据 | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					          </vuescroll> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					        <div class="footer"> | 
				
			||||
 | 
					          <Pagination @current-change="bindList" @size-change="onSizeChange" width="'100%'" | 
				
			||||
 | 
					            :page-sizes="[10, 20, 30, 40, 50]" :page-size="page.pageSize" :current-page.sync="page.pageNum" | 
				
			||||
 | 
					            layout="total, prev, pager, next" :total="total" class="Pagination"> | 
				
			||||
 | 
					          </Pagination> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					        <FatigueWakesUp :visible="this.isFatigueWakesUpVisible"  class="fatigue-wakes-up"  :dialogData="dialogData"  @update:value="this.isFatigueWakesUpVisible = false" /> | 
				
			||||
 | 
					        <GuardrailCollision v-if="isGuardrailCollision"  class="fatigue-wakes-up" /> | 
				
			||||
 | 
					        <IntegratedCabinet v-if="isIntegratedCabinet"  class="fatigue-wakes-up" /> | 
				
			||||
 | 
					      </div> | 
				
			||||
 | 
					    </div> | 
				
			||||
 | 
					  </template> | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  <script> | 
				
			||||
 | 
					  import request from "@/utils/request"; | 
				
			||||
 | 
					  import vuescroll from "vuescroll"; | 
				
			||||
 | 
					  import scrollOptions from "@/common/scrollbar.js"; | 
				
			||||
 | 
					  import { Message } from "element-ui"; | 
				
			||||
 | 
					  import Button from "@screen/components/Buttons/Button.vue"; | 
				
			||||
 | 
					  import { setLoading } from "@screen/utils/index.js"; | 
				
			||||
 | 
					  import Pagination from '@screen/components/Pagination.vue'; | 
				
			||||
 | 
					  import {  mapState } from "vuex"; | 
				
			||||
 | 
					  import FatigueWakesUp from "./../Dialogs/FatigueWakesUp/index.vue"; | 
				
			||||
 | 
					  import GuardrailCollision from "./../Dialogs/GuardrailCollision/index.vue"; | 
				
			||||
 | 
					  import IntegratedCabinet from "./../Dialogs/IntegratedCabinet/index.vue"; | 
				
			||||
 | 
					  export default { | 
				
			||||
 | 
					    name: 'smartAnalysis', | 
				
			||||
 | 
					    components: { | 
				
			||||
 | 
					      vuescroll, | 
				
			||||
 | 
					      FatigueWakesUp, | 
				
			||||
 | 
					      GuardrailCollision, | 
				
			||||
 | 
					      IntegratedCabinet, | 
				
			||||
 | 
					      Button, | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					      Pagination | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    computed: { | 
				
			||||
 | 
					      ...mapState(["menu"]), | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    data() { | 
				
			||||
 | 
					      return { | 
				
			||||
 | 
					        isFatigueWakesUpVisible:false, | 
				
			||||
 | 
					        isGuardrailCollision:false, | 
				
			||||
 | 
					        isIntegratedCabinet:false, | 
				
			||||
 | 
					        dialogData: {}, | 
				
			||||
 | 
					        devItem:{}, | 
				
			||||
 | 
					        clearable: false, | 
				
			||||
 | 
					        listIndex: -1, | 
				
			||||
 | 
					        form: { | 
				
			||||
 | 
					          deviceName: '', | 
				
			||||
 | 
					          deviceState: [1, 0] | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        page: { | 
				
			||||
 | 
					          pageNum: 0, | 
				
			||||
 | 
					          pageSize: 20 | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        searchData: { | 
				
			||||
 | 
					          pageNum: 0, | 
				
			||||
 | 
					          pageSize: 10 | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        total: 0, | 
				
			||||
 | 
					        totalRecord:0, | 
				
			||||
 | 
					        list: [], | 
				
			||||
 | 
					        scrollOptions, | 
				
			||||
 | 
					        date:'', | 
				
			||||
 | 
					        tableSource: [], | 
				
			||||
 | 
					        tableData:[], | 
				
			||||
 | 
					        tableCols: [], | 
				
			||||
 | 
					        init: true, | 
				
			||||
 | 
					        aryChartList:[] | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    created() { | 
				
			||||
 | 
					   | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    mounted() { | 
				
			||||
 | 
					      this.date = moment().format('YYYY-MM-DD') | 
				
			||||
 | 
					      this.bindList(); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    methods: { | 
				
			||||
 | 
					     | 
				
			||||
 | 
					      bindData(){ | 
				
			||||
 | 
					        const item = this.devItem; | 
				
			||||
 | 
					        const closeLoading = setLoading(); | 
				
			||||
 | 
					        request({ | 
				
			||||
 | 
					          url: 'business/device/properties/deviceAnalysis', | 
				
			||||
 | 
					          method: 'post', | 
				
			||||
 | 
					          data:{ | 
				
			||||
 | 
					            dateTime: this.date, | 
				
			||||
 | 
					            deviceType: item.deviceType, | 
				
			||||
 | 
					            deviceId: item.deviceId | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }).then(result => { | 
				
			||||
 | 
					          if (result.code != 200) return Message.error(result?.msg); | 
				
			||||
 | 
					          this.aryChartList = []; | 
				
			||||
 | 
					          let cols = []; | 
				
			||||
 | 
					          let rows = []; | 
				
			||||
 | 
					          result.data.forEach(e => { | 
				
			||||
 | 
					            cols.push({ | 
				
			||||
 | 
					              label: e.name, | 
				
			||||
 | 
					              value: e.name | 
				
			||||
 | 
					            }) | 
				
			||||
 | 
					   | 
				
			||||
 | 
					            if(rows.length === 0){ | 
				
			||||
 | 
					              e.results.forEach(el => { | 
				
			||||
 | 
					                rows.push({ | 
				
			||||
 | 
					                  name:item.deviceName, | 
				
			||||
 | 
					                  timestamp: el.timestamp.substr(11) | 
				
			||||
 | 
					                }) | 
				
			||||
 | 
					              }); | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					            let xname = e.results.map(x=>x.timestamp.substr(11)) | 
				
			||||
 | 
					            let value = []; | 
				
			||||
 | 
					              let unit = '' | 
				
			||||
 | 
					            e.results.forEach((c,idx)=>{ | 
				
			||||
 | 
					              rows[idx][e.name] = c.result | 
				
			||||
 | 
					              const n = c.result?.match(/\d+\.*\d*/g); | 
				
			||||
 | 
					                if(n && n.length > 0){ | 
				
			||||
 | 
					                  if(unit === ''){ | 
				
			||||
 | 
					                    unit = c.result.substr(n[0].length) | 
				
			||||
 | 
					                  } | 
				
			||||
 | 
					                  value.push(parseFloat(n[0])) | 
				
			||||
 | 
					                } else { | 
				
			||||
 | 
					                  value.push(0) | 
				
			||||
 | 
					                } | 
				
			||||
 | 
					            }) | 
				
			||||
 | 
					   | 
				
			||||
 | 
					   | 
				
			||||
 | 
					            const chartOptions = _.cloneDeep(chart1); | 
				
			||||
 | 
					            chartOptions.title.text = e.name +' / ' + this.date + ' / ' + item.deviceName; | 
				
			||||
 | 
					            chartOptions.xAxis.data = xname; | 
				
			||||
 | 
					            chartOptions.yAxis[0].name = unit; | 
				
			||||
 | 
					            chartOptions.series[0].name = e.name; | 
				
			||||
 | 
					            chartOptions.series[0].data = value; | 
				
			||||
 | 
					            chartOptions.tooltip['valueFormatter'] = function (value) { | 
				
			||||
 | 
					              return value + " "+unit; | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					            this.aryChartList.push({ | 
				
			||||
 | 
					              ...item, | 
				
			||||
 | 
					              pname: e.name, | 
				
			||||
 | 
					              options: chartOptions | 
				
			||||
 | 
					            }) | 
				
			||||
 | 
					          }) | 
				
			||||
 | 
					          this.tableCols = cols; | 
				
			||||
 | 
					          this.tableSource = rows; | 
				
			||||
 | 
					          this.totalRecord = rows.length; | 
				
			||||
 | 
					          this.searchData= { | 
				
			||||
 | 
					            pageSize: 10, | 
				
			||||
 | 
					            pageNum: 1, | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          this.loadTable() | 
				
			||||
 | 
					        }).finally(()=>{ | 
				
			||||
 | 
					          closeLoading() | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      onSizeTableChange(pageSize) { | 
				
			||||
 | 
					        this.tableData = []; | 
				
			||||
 | 
					        this.searchData.pageSize = pageSize; | 
				
			||||
 | 
					        this.searchData.pageNum = 1; | 
				
			||||
 | 
					        this.loadTable(); | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      loadTable(e){ | 
				
			||||
 | 
					        if(e){ | 
				
			||||
 | 
					          this.searchData.pageNum = e; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        const nums = (this.searchData.pageNum-1)*(this.searchData.pageSize); | 
				
			||||
 | 
					        const nume = nums + this.searchData.pageSize | 
				
			||||
 | 
					        this.tableData = this.tableSource.slice(nums,nume) | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					    | 
				
			||||
 | 
					      devClick(item){ | 
				
			||||
 | 
					        console.log("item-->",item) | 
				
			||||
 | 
					        // console.log(item.deviceType+"111") | 
				
			||||
 | 
					        // console.log(this.isFatigueWakesUpVisible+"2") | 
				
			||||
 | 
					        // console.log(this.isFatigueWakesUpVisible+"5") | 
				
			||||
 | 
					        this.isIntegratedCabinet=false; | 
				
			||||
 | 
					        this.isGuardrailCollision=false; | 
				
			||||
 | 
					        this.dialogData=item; | 
				
			||||
 | 
					         | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if(item.deviceType=='10'){ | 
				
			||||
 | 
					          console.log("this.isFatigueWakesUpVisible--->",this.isFatigueWakesUpVisible) | 
				
			||||
 | 
					          this.isFatigueWakesUpVisible =true; | 
				
			||||
 | 
					          // console.log(this.isFatigueWakesUpVisible+"3") | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        // console.log(this.isFatigueWakesUpVisible+"4") | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      onSizeChange(pageSize) { | 
				
			||||
 | 
					        this.page.pageSize = pageSize; | 
				
			||||
 | 
					        this.bindList(); | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      bindList() { | 
				
			||||
 | 
					        const params = { | 
				
			||||
 | 
					          ...this.form, ...this.page, | 
				
			||||
 | 
					        }; | 
				
			||||
 | 
					        if (params.deviceState.length === 2) { | 
				
			||||
 | 
					          delete params.deviceState; | 
				
			||||
 | 
					        } else { | 
				
			||||
 | 
					          params.deviceState = params.deviceState.join('') | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        if (params.deviceName === '') { | 
				
			||||
 | 
					          delete params.deviceName | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					        request({ | 
				
			||||
 | 
					          url: 'business/device/list', | 
				
			||||
 | 
					          method: 'get', | 
				
			||||
 | 
					          params | 
				
			||||
 | 
					        }).then(result => { | 
				
			||||
 | 
					          if (result.code != 200) return Message.error(result?.msg); | 
				
			||||
 | 
					          this.list = result.rows; | 
				
			||||
 | 
					          this.total = result.total; | 
				
			||||
 | 
					          if(this.init){ | 
				
			||||
 | 
					            this.init = false; | 
				
			||||
 | 
					            setTimeout(() => { | 
				
			||||
 | 
					   | 
				
			||||
 | 
					              // this.devClick( this.list[0],0) | 
				
			||||
 | 
					            }, 400); | 
				
			||||
 | 
					   | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					        }) | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      onResetSearch() { | 
				
			||||
 | 
					        this.form = { | 
				
			||||
 | 
					          deviceName: '', | 
				
			||||
 | 
					          deviceState: [1, 0] | 
				
			||||
 | 
					        }; | 
				
			||||
 | 
					        this.pageNum = 0; | 
				
			||||
 | 
					        this.bindList(); | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      onSearch() { | 
				
			||||
 | 
					        this.pageNum = 0; | 
				
			||||
 | 
					        this.bindList(); | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  </script> | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  <style lang='scss' scoped> | 
				
			||||
 | 
					  .fatigue-wakes-up { | 
				
			||||
 | 
					  position: absolute; /* 或 fixed,取决于你的需求 */ | 
				
			||||
 | 
					  z-index: 3000; /* 确保这个值足够高 */ | 
				
			||||
 | 
					  /* 其他样式 */ | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  .content { | 
				
			||||
 | 
					    width: 100%; | 
				
			||||
 | 
					    height: 100%; | 
				
			||||
 | 
					    display: flex; | 
				
			||||
 | 
					    flex-direction: row; | 
				
			||||
 | 
					    background-color: #101d23; | 
				
			||||
 | 
					    padding: 20px; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					    .left { | 
				
			||||
 | 
					      width: 18vw; | 
				
			||||
 | 
					      // background-color: #112533; | 
				
			||||
 | 
					      height: 100%; | 
				
			||||
 | 
					      display: flex; | 
				
			||||
 | 
					      flex-direction: column; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      .body { | 
				
			||||
 | 
					        flex: 1; | 
				
			||||
 | 
					        height: 0; | 
				
			||||
 | 
					        padding: 0 10px 10px; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      .footer { | 
				
			||||
 | 
					        display: flex; | 
				
			||||
 | 
					        justify-content: center; | 
				
			||||
 | 
					        align-items: center; | 
				
			||||
 | 
					        margin: 10px; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  ::v-deep .formSearch { | 
				
			||||
 | 
					    padding: 20px 5px; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					    .el-form-item__label { | 
				
			||||
 | 
					      color: #fff; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  .direction { | 
				
			||||
 | 
					    ::v-deep .el-input { | 
				
			||||
 | 
					      .el-input__inner { | 
				
			||||
 | 
					        font-size: 14px !important; | 
				
			||||
 | 
					        padding: 8px 5px; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  .device { | 
				
			||||
 | 
					    padding: 7.5px 15px; | 
				
			||||
 | 
					    cursor: pointer; | 
				
			||||
 | 
					    display: flex; | 
				
			||||
 | 
					    justify-content: space-between; | 
				
			||||
 | 
					    align-items: center; | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  .deviceSel{ | 
				
			||||
 | 
					    // background-color:#1798a9; | 
				
			||||
 | 
					    background: linear-gradient(45deg, #1798a9, #1798a900); | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  .device:hover { | 
				
			||||
 | 
					    background-color: #1d647f; | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  .state { | 
				
			||||
 | 
					    width: 18px; | 
				
			||||
 | 
					    height: 18px; | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  </style> | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  <style lang="scss" scoped> | 
				
			||||
 | 
					  .Pagination { | 
				
			||||
 | 
					   | 
				
			||||
 | 
					    ::v-deep { | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      >button, | 
				
			||||
 | 
					      >ul li { | 
				
			||||
 | 
					        background: #064258; | 
				
			||||
 | 
					        border-radius: 2px 2px 2px 2px; | 
				
			||||
 | 
					        opacity: 1; | 
				
			||||
 | 
					        color: #fff; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      >button { | 
				
			||||
 | 
					        padding: 0 3px; | 
				
			||||
 | 
					        border: 1px solid #00b3cc; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      >ul li { | 
				
			||||
 | 
					        background: linear-gradient(180deg, #004960 0%, #004b62 100%); | 
				
			||||
 | 
					        margin: 0 1.5px; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					        &.active { | 
				
			||||
 | 
					          background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      .el-pagination__total { | 
				
			||||
 | 
					        color: #fff; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      .el-pagination__sizes { | 
				
			||||
 | 
					        .el-select { | 
				
			||||
 | 
					          .el-input { | 
				
			||||
 | 
					            width: 81px; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					            .el-input__inner { | 
				
			||||
 | 
					              font-size: 12px; | 
				
			||||
 | 
					              height: 23px; | 
				
			||||
 | 
					              background-color: #064258 !important; | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					          .el-input__suffix { | 
				
			||||
 | 
					            .el-input__icon { | 
				
			||||
 | 
					              line-height: 23px; | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      .el-pagination__jump { | 
				
			||||
 | 
					        margin-left: 10px; | 
				
			||||
 | 
					        color: #fff; | 
				
			||||
 | 
					        font-size: 12px; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					        .el-input { | 
				
			||||
 | 
					          width: 27px; | 
				
			||||
 | 
					          margin: 0 3px; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					          .el-input__inner { | 
				
			||||
 | 
					            font-size: 12px; | 
				
			||||
 | 
					            background-color: #064258 !important; | 
				
			||||
 | 
					            border-radius: 2px 2px 2px 2px; | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      .btn-next { | 
				
			||||
 | 
					        margin-left: 6px; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					   | 
				
			||||
 | 
					    ::v-deep .el-pagination__total { | 
				
			||||
 | 
					      margin-left: 10px; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  .devparam{ | 
				
			||||
 | 
					    width: 200px; | 
				
			||||
 | 
					    margin-left: 20px; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  .selectDate { | 
				
			||||
 | 
					      width: 89px; | 
				
			||||
 | 
					      border: 1px solid #00b3cc; | 
				
			||||
 | 
					   | 
				
			||||
 | 
					      ::v-deep { | 
				
			||||
 | 
					        .el-input__prefix{ | 
				
			||||
 | 
					          top:-4px; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        .el-input__inner { | 
				
			||||
 | 
					   | 
				
			||||
 | 
					          background-color: #064258 !important; | 
				
			||||
 | 
					          border-width: 0px !important; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  </style> | 
				
			||||
 | 
					   | 
				
			||||
@ -0,0 +1,112 @@ | 
				
			|||||
 | 
					<template> | 
				
			||||
 | 
					  <div class="HomeDevice"> | 
				
			||||
 | 
					    <ElPopover trigger="manual" :value="activeIcon === 'Frame'" :visibleArrow="false" placement="left" | 
				
			||||
 | 
					      popper-class="global-input-search-popoverIcon global-input-search-popoverIcon2"> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					      <div slot="reference"> | 
				
			||||
 | 
					        <el-tooltip effect="light" content="筛选设备" placement="left"> | 
				
			||||
 | 
					          <Button :class="['btn', { 'btn-active': activeIcon }]" @click.native="handleClick('Frame')"> | 
				
			||||
 | 
					            <img src="@screen/images/home-Frame/Frame.svg" /> | 
				
			||||
 | 
					          </Button> | 
				
			||||
 | 
					        </el-tooltip> | 
				
			||||
 | 
					      </div>  | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					      <div class="body4"> | 
				
			||||
 | 
					        <div class="title">筛选设备</div> | 
				
			||||
 | 
					        <span class="close" @click="() => { this.activeIcon = null; }"> | 
				
			||||
 | 
					          <i class="el-icon-close" /> | 
				
			||||
 | 
					        </span> | 
				
			||||
 | 
					        <HomeDeviceFilter class="item" /> | 
				
			||||
 | 
					      </div> | 
				
			||||
 | 
					    </ElPopover> | 
				
			||||
 | 
					  </div> | 
				
			||||
 | 
					</template> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
					import Button from "@screen/components/Buttons/Button.vue"; | 
				
			||||
 | 
					import Form from "@screen/components/FormConfig"; | 
				
			||||
 | 
					import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js"; | 
				
			||||
 | 
					import { merge, cloneDeep } from "lodash"; | 
				
			||||
 | 
					import HomeDeviceFilter from "./device.vue"; | 
				
			||||
 | 
					export default { | 
				
			||||
 | 
					  name: "HomeDevice", | 
				
			||||
 | 
					  components: { | 
				
			||||
 | 
					    Button, | 
				
			||||
 | 
					    Form, | 
				
			||||
 | 
					    HomeDeviceFilter, | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  data() { | 
				
			||||
 | 
					    return { | 
				
			||||
 | 
					      activeIcon: null, | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  methods: { | 
				
			||||
 | 
					    handleClick(type) { | 
				
			||||
 | 
					      this.activeIcon = this.activeIcon === type ? null : type; | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    filterEnd(data) { | 
				
			||||
 | 
					      this.activeIcon = null; | 
				
			||||
 | 
					      // this.filterData = data; | 
				
			||||
 | 
					      this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<style lang="scss"> | 
				
			||||
 | 
					.global-input-search-popoverIcon2{ | 
				
			||||
 | 
					  top: 35px !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					div.el-popper.global-input-search-popoverIcon { | 
				
			||||
 | 
					  background: rgba(6, 66, 88, 0.8); | 
				
			||||
 | 
					  border: 1px solid rgba(42, 217, 253, 0.6); | 
				
			||||
 | 
					  position: relative; | 
				
			||||
 | 
					  padding-top: 36px; | 
				
			||||
 | 
					  transform: translateY(24px); | 
				
			||||
 | 
					  // margin-top: 6vh; | 
				
			||||
 | 
					  .body4 { | 
				
			||||
 | 
					    width: 400px; | 
				
			||||
 | 
					    .title { | 
				
			||||
 | 
					      background: linear-gradient(90deg, | 
				
			||||
 | 
					          #237e9b 0%, | 
				
			||||
 | 
					          rgba(23, 145, 184, 0) 100%); | 
				
			||||
 | 
					      padding: 3px 9px; | 
				
			||||
 | 
					      position: absolute; | 
				
			||||
 | 
					      top: 0; | 
				
			||||
 | 
					      left: 0; | 
				
			||||
 | 
					      width: 100%; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    .close { | 
				
			||||
 | 
					      padding: 3px 9px; | 
				
			||||
 | 
					      cursor: pointer; | 
				
			||||
 | 
					      position: absolute; | 
				
			||||
 | 
					      top: 0; | 
				
			||||
 | 
					      right: 0; | 
				
			||||
 | 
					      width: 50px; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					</style> | 
				
			||||
 | 
					<style lang="scss" scoped> | 
				
			||||
 | 
					.image { | 
				
			||||
 | 
					  width: 1000px; | 
				
			||||
 | 
					  height: 555px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.HomeDevice { | 
				
			||||
 | 
					  .btn { | 
				
			||||
 | 
					    padding: 9px; | 
				
			||||
 | 
					    background: linear-gradient(180deg, #152e3c 0%, #163a45 100%); | 
				
			||||
 | 
					    border-radius: 4px; | 
				
			||||
 | 
					    overflow: hidden; | 
				
			||||
 | 
					    height: unset; | 
				
			||||
 | 
					    border: 1px solid rgba(40, 144, 167, 1); | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  .btn-active { | 
				
			||||
 | 
					    background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					</style> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue