| | |
| | | method: 'get', |
| | | params, |
| | | }); |
| | | }; |
| | | |
| | | |
| | | |
| | | export const getRescueTeamStatistic = (params) => { |
| | | const url = `/yw/rescueTeam/getStatisticData`; |
| | | return request({ |
| | | url, |
| | | method: 'get', |
| | | params, |
| | | }); |
| | | }; |
| | | |
| | | |
| | | |
| | | export const getRiskSourceStatistic = (params) => { |
| | | const url = `/yw/riskSource/getStatisticData`; |
| | | return request({ |
| | | url, |
| | | method: 'get', |
| | | params, |
| | | }); |
| | | }; |
| | | |
| | | export const getEmergencySpaceStatistic = (params) => { |
| | | const url = `/yw/emergencySpace/getStatisticData`; |
| | | return request({ |
| | | url, |
| | | method: 'get', |
| | | params, |
| | | }); |
| | | }; |
| | |
| | | <!-- |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-03-13 14:54:26 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2023-03-13 15:00:55 |
| | | * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. |
| | | --> |
| | | |
| | | <script setup> |
| | | import publicContent from './publicContent.vue' |
| | | |
| | | import { ref, reactive } from 'vue' |
| | | // import { ref, reactive, onMounted, nextTick, inject } from 'vue' |
| | | |
| | | import { getPage } from '../../../../api/indParkInfo' |
| | | import { getRescueTeamStatistic } from '@/api/indParkInfo' |
| | | |
| | | var parkQy = ref([]) |
| | | let $echarts = inject('echarts') |
| | | const curEcharts = ref(null) |
| | | |
| | | var searchQuery = ref('') |
| | | let myEcharts = reactive(null) |
| | | |
| | | onMounted(() => { |
| | | getPages() |
| | | nextTick(() => { |
| | | myEcharts = $echarts.init(curEcharts.value) |
| | | getStatistic() |
| | | |
| | | }) |
| | | }) |
| | | |
| | | |
| | | function getPages() { |
| | | getPage().then(res => { |
| | | parkQy.value = res.data.data.records |
| | | // console.log(res) |
| | | }).catch(err => { |
| | | console.log(err) |
| | | function getStatistic() { |
| | | getRescueTeamStatistic().then(res => { |
| | | let xaxis_data = [] |
| | | res.data.data.forEach(element => { |
| | | xaxis_data.push(element.type) |
| | | }); |
| | | let yaxis_data = [] |
| | | res.data.data.forEach(element => { |
| | | yaxis_data.push(element.num) |
| | | }); |
| | | myEcharts.setOption({ |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | } |
| | | }, |
| | | xAxis: { |
| | | data: xaxis_data |
| | | }, |
| | | yAxis: {}, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | data: yaxis_data, |
| | | barWidth: '30%' |
| | | } |
| | | ] |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | | <!-- <public-content> |
| | | <template #content> --> |
| | | <div class="data-content"> |
| | | <div v-for="item in parkQy" :key="item.id"> |
| | | <div class="data-content-item"> |
| | | <div> {{ item.name }}</div> |
| | | <el-button size="small" type="primary">{{ item.categoryName }}</el-button> |
| | | </div> |
| | | <public-content> |
| | | <template #content> |
| | | <div class="unit-content"> |
| | | <div class="unit-content-echarts" ref="curEcharts"> |
| | | |
| | | </div> |
| | | </div> |
| | | <!-- </template> |
| | | </public-content> --> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </public-content> |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | |
| | | |
| | | } |
| | | |
| | | .data-content-item { |
| | | display: flex; |
| | | margin: 2px 10px; |
| | | padding: 5px 0; |
| | | text-indent: 1em; |
| | | background-color: #747bff; |
| | | justify-content: space-between; |
| | | // 超过高度自动显示滚动条 |
| | | overflow-y: auto; |
| | | border-radius: 5px; |
| | | .unit-content-echarts { |
| | | height: 200px; |
| | | } |
| | | </style> |
| | |
| | | <!-- |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-03-13 14:54:26 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2023-03-13 15:00:55 |
| | | * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. |
| | | --> |
| | | |
| | | <script setup> |
| | | // import publicContent from './publicContent.vue' |
| | | |
| | | |
| | | import { inject, reactive } from 'vue' |
| | | import { getRiskSourceStatistic } from '../../../../api/indParkInfo' |
| | | |
| | | let $echarts = inject('echarts') |
| | | const curEcharts = ref(null) |
| | | |
| | | console.log("111111111111111111", $echarts) |
| | | let myEcharts = reactive(null) |
| | | |
| | | onMounted(() => { |
| | | let myEcharts = $echarts.init(document.getElementById('fire-content-echarts')) |
| | | myEcharts.setOption({ |
| | | xAxis: { |
| | | data: ['A', 'B', 'C', 'D', 'E'] |
| | | }, |
| | | yAxis: {}, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | data: [10, 22, 28, 43, 49], |
| | | barWidth: '60%' |
| | | } |
| | | ] |
| | | }) |
| | | myEcharts = $echarts.init(curEcharts.value) |
| | | getRiskSource() |
| | | |
| | | }) |
| | | |
| | | |
| | | function getRiskSource() { |
| | | getRiskSourceStatistic().then(res => { |
| | | let xaxis_data = [] |
| | | res.data.data.forEach(element => { |
| | | xaxis_data.push(element.riskLevel) |
| | | }); |
| | | let yaxis_data = [] |
| | | res.data.data.forEach(element => { |
| | | yaxis_data.push(element.num) |
| | | }); |
| | | myEcharts.setOption({ |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | } |
| | | }, |
| | | xAxis: { |
| | | data: xaxis_data |
| | | }, |
| | | yAxis: {}, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | data: yaxis_data, |
| | | barWidth: '30%' |
| | | } |
| | | ] |
| | | }) |
| | | }) |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | <div class="fireContent-box"> |
| | | |
| | | <div> |
| | | <div class="fire-content-echarts" id="fire-content-echarts"> |
| | | <div class="fire-content-echarts" ref="curEcharts"> |
| | | |
| | | |
| | | </div> |
| | |
| | | } |
| | | |
| | | .fire-content-echarts { |
| | | height: 4.5rem |
| | | height: 200px; |
| | | } |
| | | </style> |
| | |
| | | <!-- |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-03-13 14:54:26 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2024-11-01 09:54:15 |
| | | * @FilePath: \bigScreen\src\views\survey\components\box\fireSource.vue |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. |
| | | --> |
| | | |
| | | <script setup> |
| | | import { Text } from 'vue'; |
| | | import publicContent from './publicContent.vue' |
| | | const { VITE_APP_BASE } = import.meta.env |
| | | import { getDetail } from '@/api/indParkInfo' |
| | | |
| | | import { ref, reactive } from 'vue' |
| | | |
| | | let state = reactive({ |
| | | parkInfo: {} |
| | | }) |
| | | |
| | | // 企业信息统计数组 |
| | | let parkInfoList = ref([ |
| | | { |
| | | id: 1, |
| | | name: 'plaArea', |
| | | title: '园区面积', |
| | | content: '1000', |
| | | unit: '公顷', |
| | | img: 'images/雨量站@2x.png' |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: 'recNum', |
| | | title: '救援人员数量', |
| | | content: '1000', |
| | | unit: '人', |
| | | img: 'images/雨量站@2x.png' |
| | | |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: 'riskFirmNum', |
| | | title: '风险企业数量', |
| | | content: '1000', |
| | | img: 'images/雨量站@2x.png' |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: 'proTarNum', |
| | | title: '保护目标数量', |
| | | content: '1000', |
| | | img: 'images/雨量站@2x.png' |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: 'spaceNum', |
| | | title: '应急空间数量', |
| | | content: '1000', |
| | | img: 'images/雨量站@2x.png' |
| | | }, |
| | | { |
| | | id: 6, |
| | | name: 'firmNum', |
| | | title: '企业数量', |
| | | content: '1000', |
| | | img: 'images/雨量站@2x.png' |
| | | } |
| | | ] |
| | | ) |
| | | |
| | | |
| | | |
| | | |
| | |
| | | |
| | | }) |
| | | // 获取详情 |
| | | function getData () { |
| | | function getData() { |
| | | getDetail().then(res => { |
| | | state.parkInfo = res.data.data |
| | | // console.log("************************", parkInfo) |
| | | parkInfoList.value.forEach(item => { |
| | | if (item.name == 'plaArea') { |
| | | state.parkInfo[item.name] && (item.content = (state.parkInfo[item.name] * 100).toFixed(2)) |
| | | } else { |
| | | state.parkInfo[item.name] && (item.content = state.parkInfo[item.name]) |
| | | } |
| | | }) |
| | | }).catch(err => { |
| | | console.log(err) |
| | | }) |
| | |
| | | <div> |
| | | <div class="box-content-img"> |
| | | <img :src="state.parkInfo.imageUrls" alt=""> |
| | | </div> |
| | | </div> |
| | | <div class="box-content-text-remark"> |
| | | <div class="box-content-text"> |
| | | {{ state.parkInfo.remark }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="container"> |
| | | <div class="box-content-sj"> |
| | | <img :src="VITE_APP_BASE + 'images/雨量站@2x.png'" alt=""> |
| | | <div class="box-content-sj" v-for="item in parkInfoList" :key="item.id"> |
| | | <img :src="VITE_APP_BASE + item.img" alt=""> |
| | | <div> |
| | | <div class="box-content-ss"> |
| | | <div> |
| | | <div class="box-content-text-title"> |
| | | <span class="box-content-text-title-span">{{ state.parkInfo.plaArea }}</span> |
| | | <span class="box-content-text-title-span">{{ item.content }}</span> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="box-content-text-content"> |
| | | <span class="box-content-text-content-span">园区面积 (公顷)</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-content-sj"> |
| | | <img :src="VITE_APP_BASE + 'images/雨量站@2x.png'" alt=""> |
| | | <div> |
| | | <div class="box-content-ss"> |
| | | <div> |
| | | <div class="box-content-text-title"> |
| | | <span class="box-content-text-title-span">{{ state.parkInfo.recNum }}</span> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="box-content-text-content"> |
| | | <span class="box-content-text-content-span">救援人员数量</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-content-sj"> |
| | | <img src="../../../../../public/images/雨量站@2x.png" alt=""> |
| | | <div> |
| | | <div class="box-content-ss"> |
| | | <div> |
| | | <div class="box-content-text-title"> |
| | | <span class="box-content-text-title-span">{{ state.parkInfo.riskFirmNum }}</span> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="box-content-text-content"> |
| | | <span class="box-content-text-content-span">风险企业数量</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-content-sj"> |
| | | <img src="../../../../../public/images/雨量站@2x.png" alt=""> |
| | | <div> |
| | | <div class="box-content-ss"> |
| | | <div> |
| | | <div class="box-content-text-title"> |
| | | <span class="box-content-text-title-span">{{ state.parkInfo.proTarNum }}</span> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="box-content-text-content"> |
| | | <span class="box-content-text-content-span">保护目标数量</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-content-sj"> |
| | | <img src="../../../../../public/images/雨量站@2x.png" alt=""> |
| | | <div> |
| | | <div class="box-content-ss"> |
| | | <div> |
| | | <div class="box-content-text-title"> |
| | | <span class="box-content-text-title-span">{{ state.parkInfo.spaceNum }}</span> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="box-content-text-content"> |
| | | <span class="box-content-text-content-span">应急空间数量</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-content-sj"> |
| | | <img src="../../../../../public/images/雨量站@2x.png" alt=""> |
| | | <div> |
| | | <div class="box-content-ss"> |
| | | <div> |
| | | <div class="box-content-text-title"> |
| | | <span class="box-content-text-title-span">{{ state.parkInfo.firmNum }}</span> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="box-content-text-content"> |
| | | <span class="box-content-text-content-span">企业数量</span> |
| | | <text class="box-content-text-content-span">{{ item.title }}</text> |
| | | <text v-if="item.unit" class="box-content-text-content-span">({{ item.unit }})</text> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <div class="content-qy-info"> |
| | | <div class="box-content-title"> |
| | | <img src="../../../../../public/images/雨量站@2x.png" alt=""> |
| | | <div class="box-content-title-text"> |
| | | <span class="box-content-title-text-span">企业</span> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-content-title"> |
| | | <img src="../../../../../public/images/雨量站@2x.png" alt=""> |
| | | <div class="box-content-title-text"> |
| | | <span class="box-content-title-text-span">分区</span> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-content-title"> |
| | | <img src="../../../../../public/images/雨量站@2x.png" alt=""> |
| | | <div class="box-content-title-text"> |
| | | <span class="box-content-title-text-span">图层</span> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | |
| | | </div> |
| | | </template> |
| | | </public-content> |
| | |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .box-content-text-remark {} |
| | | |
| | | .content-qy-info { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | text-align: center; |
| | | margin-top: 15px; |
| | | .box-content-img { |
| | | height: 300px; |
| | | overflow: scroll; |
| | | // 隐藏滚动条 |
| | | scrollbar-width: none; |
| | | } |
| | | |
| | | .box-content-img img { |
| | | float: left; |
| | | margin: 5px; |
| | | /* 宽度可以根据实际情况调整 */ |
| | | width: 120px; |
| | | height: 120px; |
| | | } |
| | | |
| | |
| | | |
| | | .box-content-text { |
| | | padding-left: 5px; |
| | | height: 130px; |
| | | height: 300px; |
| | | overflow: scroll; |
| | | // 隐藏滚动条 |
| | | scrollbar-width: none; |
| | |
| | | .box-content-text-title, |
| | | .box-content-text-content { |
| | | margin-top: 5px; |
| | | font-size: 12px; |
| | | font-size: 10px; |
| | | text-align: center; |
| | | } |
| | | |
| | |
| | | <script setup> |
| | | import publicContent from './publicContent.vue' |
| | | |
| | | import { getEmergencySpaceStatistic } from '../../../../api/indParkInfo' |
| | | |
| | | let $echarts = inject('echarts') |
| | | const curEcharts = ref(null) |
| | | |
| | | console.log($echarts) |
| | | let myEcharts = reactive(null) |
| | | |
| | | |
| | | onMounted(() => { |
| | | nextTick(() => { |
| | | let myEcharts = $echarts.init(curEcharts.value) |
| | | myEcharts = $echarts.init(curEcharts.value) |
| | | getEmergencySpace() |
| | | |
| | | }) |
| | | }) |
| | | |
| | | function getEmergencySpace() { |
| | | getEmergencySpaceStatistic().then(res => { |
| | | // console.log(res) |
| | | let data = res.data.data |
| | | let dataRsult = [] |
| | | data.forEach(item => { |
| | | dataRsult.push({ |
| | | name: item.type, |
| | | value: item.num |
| | | }) |
| | | }); |
| | | |
| | | myEcharts.setOption({ |
| | | xAxis: { |
| | | data: ['A', 'B', 'C', 'D', 'E'] |
| | | legend: { |
| | | orient: "vertical", |
| | | left: "left", |
| | | }, |
| | | yAxis: {}, |
| | | tooltip: { |
| | | trigger: 'item' |
| | | }, |
| | | |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | data: [10, 22, 28, 43, 49], |
| | | barWidth: '60%' |
| | | // name: 'Access From', |
| | | type: 'pie', |
| | | radius: ['40%', '70%'], |
| | | // avoidLabelOverlap: false, |
| | | // padAngle: 5, |
| | | // itemStyle: { |
| | | // borderRadius: 10 |
| | | // }, |
| | | // label: { |
| | | // show: false, |
| | | // position: 'left' |
| | | // }, |
| | | // emphasis: { |
| | | // label: { |
| | | // show: true, |
| | | // fontSize: 40, |
| | | // fontWeight: 'bold' |
| | | // } |
| | | // }, |
| | | // labelLine: { |
| | | // normal: { |
| | | // show: true |
| | | // } |
| | | // }, |
| | | data: dataRsult |
| | | } |
| | | ] |
| | | }) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | </script> |
| | | |
| | |
| | | } |
| | | |
| | | .unit-content-echarts { |
| | | height: 5rem; |
| | | height: 200px; |
| | | } |
| | | </style> |
| | |
| | | <div class="data box"> |
| | | <title-box> |
| | | <template #titleName> |
| | | 数据概览1 |
| | | 救援队伍统计 |
| | | </template> |
| | | </title-box> |
| | | <data-content></data-content> |
| | |
| | | <div class="unit box"> |
| | | <title-box> |
| | | <template #titleName> |
| | | 应急物资统计 |
| | | 应急空间统计 |
| | | </template> |
| | | </title-box> |
| | | <unit-content></unit-content> |