| | |
| | | <span class="item">故障</span> |
| | | <span class="item">离线</span> |
| | | </div> |
| | | <template v-for="(item, i) in dataList1" :key="i"> |
| | | <div class="line"> |
| | | <span class="item name">{{ item.deviceTypeName }}</span> |
| | | <span class="item">{{ item.statusTotal }}</span> |
| | | <span class="item">{{ item.alarmNum }}</span> |
| | | <span class="item">{{ item.shieldNum }}</span> |
| | | <span class="item">{{ item.errNum }}</span> |
| | | <span class="item">{{ item.offlineNum }}</span> |
| | | <div class="one-swiper list_content"> |
| | | <div class="swiper-wrapper"> |
| | | <div class="line_wrap one-swiper-slide swiper-slide" v-for="(item, i) in dataList1"> |
| | | <div class="line"> |
| | | <span class="item name">{{ item.typeName }}</span> |
| | | <span class="item">{{ item.totalDeviceNum || 0 }}</span> |
| | | <span class="item">{{ item.alarmDeviceNum || 0 }}</span> |
| | | <span class="item">{{ item.shieldDeviceNum || 0 }}</span> |
| | | <span class="item">{{ item.errDeviceNum || 0 }}</span> |
| | | <span class="item">{{ item.offlineDeviceNum || 0 }}</span> |
| | | </div> |
| | | <div class="separate"></div> |
| | | </div> |
| | | </div> |
| | | <div class="separate"></div> |
| | | </template> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <img src="@/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png" alt=""> |
| | | <div class="content"> |
| | | <div class="name">屏蔽</div> |
| | | <div class="num num5">{{ dataList4.shieldDeviceNum }}</div> |
| | | <div class="num num5">{{ dataList4.shieldDeviceNum || 0 }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="separate"></div> |
| | | <div class="item"> |
| | | <div>维保率</div> |
| | | <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="num active">{{ ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div> |
| | | <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="num active">{{ |
| | | ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div> |
| | | </div> |
| | | </div> |
| | | <div class="footer"> |
| | |
| | | <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt=""> |
| | | <div class="content"> |
| | | <div class="name">提报隐患数</div> |
| | | <div class="num"><span>{{ dataList4.todayDangerNum }}</span>个</div> |
| | | <div class="num"><span>{{ dataList4.dangerTotalNum }}</span>个</div> |
| | | </div> |
| | | </div> |
| | | <div class="item"> |
| | | <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt=""> |
| | | <div class="content"> |
| | | <div class="name">处理隐患数</div> |
| | | <div class="num"><span class="today">{{ dataList4.dealDangerNum }}</span>个</div> |
| | | <div class="num"><span class="today">{{ dataList4.dangerDealedNum }}</span>个</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <img class="icon" src="@/assets/images/FireFighting/ic_title_green@2x.png" alt=""> |
| | | <div class="name">告警信息</div> |
| | | </div> |
| | | <div class="list"> |
| | | <div class="item" v-for="i in 5"> |
| | | <div class="icon"> |
| | | <div class="circle"></div> |
| | | <div class="line"></div> |
| | | <div class="list two-swiper"> |
| | | <div class="swiper-wrapper"> |
| | | <div class="item two-swiper-slide swiper-slide" v-for="item, i in dataList7" :key="i"> |
| | | <div class="icon"> |
| | | <div class="circle"></div> |
| | | <div class="line"></div> |
| | | </div> |
| | | <div class="content"> |
| | | <div class="header"> |
| | | <div class="time"> |
| | | <span>{{ item.alarmTime }}</span> |
| | | <span class="status" v-if="item.handleStatus == 1">已核实</span> |
| | | <span class="status" v-else-if="item.handleStatus == 2">未核实</span> |
| | | <span class="status" v-else-if="item.handleStatus == 3">核实中</span> |
| | | <span v-else class="status">未核实</span> |
| | | </div> |
| | | <div class="have_time">已经发生{{ item.haveTime }}</div> |
| | | </div> |
| | | <div class="wrap"> |
| | | <div class="title"> |
| | | <img class="xf" src="@/assets/images/FireFighting/ic_gaojing_red@2x.png" alt=""> |
| | | <span>{{ item.alarmTypeName }}</span> |
| | | </div> |
| | | <div class="title"> |
| | | <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt=""> |
| | | <span>{{ item.regionName }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="content"> |
| | | <div class="header"> |
| | | <div class="time"> |
| | | <span>123</span> |
| | | <span class="status">处理中</span> |
| | | </div> |
| | | <div class="have_time">已经发生<span>1</span>分钟</div> |
| | | </div> |
| | | <div class="wrap"> |
| | | <div class="title"> |
| | | <img class="xf" src="@/assets/images/FireFighting/ic_gaojing_red@2x.png" alt=""> |
| | | <span>消防警告</span> |
| | | </div> |
| | | <div class="title"> |
| | | <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt=""> |
| | | <span>A厂房3车间门口</span> |
| | | </div> |
| | | </div> |
| | | <div v-if="dataList7.length == 0" style="margin-top: 100px;" class="empty_wrap"> |
| | | <img src="@/assets/images/default_empty.png" alt=""> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | import VScaleScreen from 'v-scale-screen' |
| | | import FirePercent from '@/components/FirePercent.vue' |
| | | import dayjs from 'dayjs' |
| | | import duration from 'dayjs/plugin/duration' |
| | | dayjs.extend(duration) |
| | | import * as echarts from 'echarts' |
| | | import 'swiper/css/swiper.min.css' |
| | | import Swiper from 'swiper' |
| | | import { |
| | | getFightingalarmData, |
| | | getFightingHandle, |
| | | getFightingcenterData, |
| | | getFightingDeAlarm, |
| | | getFightingDeviceY, |
| | | getFighalarmDataList |
| | | } from '@/api' |
| | | |
| | | const colors = ['#FEAF01', '#01ABFE', '#51F9E4'] |
| | |
| | | |
| | | const initWatergage = () => { |
| | | const myChart = echarts.init(document.getElementById('watergage')) |
| | | var data_value = 2 |
| | | var data_value = 1 |
| | | const option = { |
| | | barMaxWidth: 3, |
| | | polar: { |
| | |
| | | } |
| | | |
| | | const dataList1 = ref([]) |
| | | const getData1 = () => { |
| | | getFightingDeAlarm().then(res => { |
| | | dataList1.value = res.data |
| | | }) |
| | | } |
| | | const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4'] |
| | | const dataList2 = ref([]) |
| | | const getData2 = () => { |
| | | // let temp = [] |
| | | // temp.push({ name: '真实报警数', num: 10, rate: 20 }) |
| | | // temp.push({ name: '误报警数', num: 30, rate: 60 }) |
| | | // temp.push({ name: '已解除', num: 20, rate: 40 }) |
| | | // temp.push({ name: '处理中', num: 8, rate: 16 }) |
| | | // dataList2.value = temp |
| | | // return |
| | | getFightingalarmData().then(res => { |
| | | const result = res.data || {} |
| | | let temp = [] |
| | |
| | | var myChart = echarts.init(document.querySelector('.echart2')) |
| | | // 生成数据和日期 |
| | | // 示例数据 |
| | | const data1 = dataList3.value.map(i => i.alarmNum) |
| | | const data1 = dataList3.value.map(i => i.realNum) |
| | | const data2 = dataList3.value.map(i => i.processingNum) |
| | | const data3 = dataList3.value.map(i => i.liftNum) |
| | | const data4 = dataList3.value.map(i => i.errNum) |
| | | const months = dataList3.value.map(i => { |
| | | return i.startDate.substring(5, 7) + '月' |
| | | } |
| | | ) |
| | | const option = { |
| | | legend: { |
| | | x: "center", |
| | |
| | | borderColor: "rgba(219, 230, 255, 0.8)", |
| | | }, |
| | | xAxis: { |
| | | data: dataList3.value.map(i => i.monthStr), |
| | | data: months, |
| | | axisLabel: { |
| | | color: "#FFFFFF", // X 轴文字设为白色 |
| | | fontSize: 14, |
| | | fontSize: 13, |
| | | }, |
| | | axisLine: { |
| | | lineStyle: { |
| | |
| | | const getData4 = () => { |
| | | getFightingcenterData().then(res => { |
| | | dataList4.value = res.data || {} |
| | | dataList1.value = res.data.deviceTypeList |
| | | }) |
| | | } |
| | | const dataList5 = ref({}) // 维保 |
| | |
| | | } |
| | | const dataList6 = ref([]) |
| | | const getData6 = () => { |
| | | getFightingHandle({type: 1}).then(res => { |
| | | getFightingHandle({ type: 1 }).then(res => { |
| | | dataList6.value = res.data |
| | | }) |
| | | } |
| | | const dataList7 = ref([]) |
| | | const getData7 = () => { |
| | | getFighalarmDataList().then(res => { |
| | | dataList7.value = res.data || [] |
| | | dataList7.value = dataList7.value.map(item => { |
| | | item.haveTime = dayjs.duration(new Date().getTime() - new Date(item.alarmTime).getTime()).format('H小时m分钟') |
| | | return item |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | const autoplayFlag = (list = [], leng = 4, time = 2000) => { |
| | | if (list.length > leng) { |
| | | return { delay: time, disableOnInteraction: false } |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | const loopFn1 = () => { |
| | | var newSwiper1 = new Swiper('.one-swiper', { |
| | | initialSlide: 0, |
| | | direction: 'vertical', //竖直方向 |
| | | slidesPerView: 5, |
| | | autoplay: autoplayFlag(dataList1.value, 5, 4000), |
| | | observer: true, //修改swiper自己或子元素时,自动初始化swiper |
| | | }) |
| | | } |
| | | const loopFn2 = () => { |
| | | var newSwiper1 = new Swiper('.two-swiper', { |
| | | initialSlide: 0, |
| | | direction: 'vertical', //竖直方向 |
| | | slidesPerView: 4, |
| | | autoplay: autoplayFlag(dataList7.value, 4, 4000), |
| | | observer: true, //修改swiper自己或子元素时,自动初始化swiper |
| | | }) |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getData1() |
| | | // getData1() |
| | | getData2() |
| | | getData3() |
| | | getData4() |
| | | getData5() |
| | | getData6() |
| | | // getData6() |
| | | getData7() |
| | | setInterval(() => { |
| | | getData2() |
| | | getData3() |
| | | getData4() |
| | | // getData6() |
| | | getData7() |
| | | }, 60 * 1000) |
| | | setInterval(() => { |
| | | |
| | | getData5() |
| | | |
| | | }, 60 * 60 * 1000) |
| | | |
| | | initWatergage() |
| | | initLiquidlevel() |
| | | |
| | | setTimeout(() => { |
| | | loopFn1() |
| | | loopFn2() |
| | | }, 12000) |
| | | |
| | | }) |
| | | |
| | | |
| | |
| | | |
| | | .list_wrap { |
| | | padding: 10px 0; |
| | | height: 227px; |
| | | overflow: auto; |
| | | |
| | | .list_content { |
| | | height: 170px; |
| | | overflow: hidden; |
| | | |
| | | .line_wrap { |
| | | height: 34px !important; |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | .line { |
| | |
| | | margin-right: 7px; |
| | | } |
| | | } |
| | | |
| | | |
| | | .static_wrap { |
| | | display: flex; |
| | | justify-content: space-evenly; |
| | |
| | | } |
| | | |
| | | .list { |
| | | height: 330px; |
| | | overflow: auto; |
| | | height: 320px; |
| | | overflow: hidden; |
| | | margin-top: 15px; |
| | | scrollbar-width: none; |
| | | |
| | |
| | | display: flex; |
| | | font-size: 13px; |
| | | color: #D2E0FF; |
| | | height: 80px !important; |
| | | |
| | | .icon { |
| | | width: 40px; |
| | |
| | | } |
| | | |
| | | .wrap { |
| | | height: 40px; |
| | | height: 34px; |
| | | background: linear-gradient(270deg, rgba(254, 85, 1, 0) 0%, rgba(254, 85, 1, 0.19) 100%); |
| | | border-radius: 2px 0px 0px 2px; |
| | | display: flex; |