src/pages/layout/components/scomponents/layersControl.vue
@@ -2,7 +2,7 @@ * @Author: shuishen 1109946754@qq.com * @Date: 2024-10-31 10:47:29 * @LastEditors: shuishen 1109946754@qq.com * @LastEditTime: 2024-11-18 17:07:09 * @LastEditTime: 2024-11-19 15:53:37 * @FilePath: \bigScreen\src\pages\layout\components\scomponents\layersControl.vue * @Description: * @@ -274,17 +274,40 @@ { id: '4', label: '风险源', children: [ { id: '4-1', label: '一般', type: 'layer', subType: 'labelPoint', method: getRiskList, params: { riskLevel: 1, size: 1000 }, showParams: 'category', className: 'fxy-box', className: 'fxy-ordinary', backgroundIcon: VITE_APP_BASE + 'img/mapicon/fxy.png', showPanel: false, layerName: 'fxy' layerName: 'fxyOrdinary', }, { id: '4-2', label: '较大', type: 'layer', subType: 'labelPoint', method: getRiskList, params: { riskLevel: 2, size: 1000 }, showParams: 'category', className: 'fxy-larger', backgroundIcon: VITE_APP_BASE + 'img/mapicon/fxy.png', showPanel: false, layerName: 'fxyLarger', } ] }, { src/styles/base/dc-base.scss
@@ -72,7 +72,22 @@ } } .fxy-box { .fxy-ordinary { &::after { background: linear-gradient(to bottom, rgba(255, 201, 0, 0.8), rgba(255, 201, 0, 0.2)); } .map-name { color: rgba(255, 201, 0, 1); } .map-icon { background: radial-gradient(circle at center, rgba(255, 255, 255, 0.3) 20%, rgba(255, 201, 0, 0.9) 100%); box-shadow: 0px 0px 10px rgb(255, 201, 0); } } .fxy-larger { &::after { background: linear-gradient(to bottom, rgba(255, 0, 0, 0.8), rgba(255, 0, 0, 0.2)); } src/views/rs/components/box/dataContent.vue
@@ -2,138 +2,213 @@ * @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 * @LastEditTime: 2024-11-19 16:16:28 * @FilePath: \bigScreen\src\views\rs\components\box\dataContent.vue * @Description: * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. --> <script setup> import publicContent from "./publicContent.vue"; import { getList } from "@/api/riskSource/riskSource"; import { reactive } from "vue"; import EventBus from 'utils/bus' import { getList } from "@/api/riskSource/riskSource" import { nextTick, onUnmounted, reactive } from "vue" const SeachBarCondition = ref(null) const loading = ref(false) const TableContent = ref(null) const curTableHeight = ref(0) const curSelectTabType = ref('') const loading = ref(false); // 搜索项配置 const options = reactive({ searchBtnGroup: true, searchBtn: true, resetBtn: true, exportBtn: false, columns: [ { label: "名称", type: 'input', props: 'name', placeholder: '请输入名称', changeSearch: true, flex: 1, } ] }) const tableData = ref([]); const tableData = ref([]) const pages = { page: 1, pageSize: 10, total: 0, }; } let data = reactive({ companyInfo: {} }) function positionColor () { return (row) => { if ( (row.X && row.X != 0) || (row.lng && row.lng != 0) || (row.longitude && row.longitude != 0) || (row.x && row.x != 0) ) { return "#1AFA29" } else { return "#ccc" } } } function positionDisabled () { return (row) => { if ( (row.X && row.X != 0) || (row.lng && row.lng != 0) || (row.longitude && row.longitude != 0) || (row.x && row.x != 0) ) { return false } else { return true } } } onMounted(() => { data.companyInfo = JSON.parse(localStorage.getItem('companyInfo')) getLists(); }); // 表格样式 const tableCellStyle = ({ row, column }) => { return { background: "#152851", color: "#fff" }; }; // 表格表头样式 const headerCellStyle = ({ }) => { return { background: "#152851", color: "#fff", }; }; // 搜索条件 const riskSource = reactive({ name: "", ownership: '' }); curTableHeight.value = TableContent.value.offsetHeight }) // 提交查询 const onSubmit = () => { pages.page = 1 pages.pageSize = 13 pages.total = 0 console.log("submit!"); getLists(riskSource); }; // 分页树改变 const handleSizeChange = (val) => { pages.pageSize = val; getLists(riskSource); } // 分页改变 const handleCurrentChange = (val) => { pages.page = val; getLists(riskSource); } // 重置条件 const clearBtn = () => { riskSource.name = '' riskSource.ownership = '' pages.page = 1 pages.pageSize = 13 pages.total = 0 getLists(riskSource); pages.page = val getLists(SeachBarCondition.value.getSeachCondition()) } // 查询分页数据 function getLists(param = {}) { param.current = pages.page; param.size = pages.pageSize; loading.value = true; getList(param) const getLists = (param = {}) => { param.current = pages.page param.size = pages.pageSize loading.value = true getList({ ...param, riskLevel: curSelectTabType.riskLevel }) .then((res) => { const data = res.data.data; // data.records.forEach((element) => { // if (element.ownership == 1) { // element.ownership = "园区"; // } else { // element.ownership = "企业"; // } // }); tableData.value = data.records; pages.total = data.total; loading.value = false; const data = res.data.data tableData.value = data.records pages.total = data.total loading.value = false }) .catch((err) => { loading.value = false; console.log(err); }); loading.value = false console.log(err) }) } let state = reactive({ layer: {} }) // 行点击 function rowClick (row) { // if (state.layer) { // window.$viewer.removeLayer(state.layer) // } // let layer = new DC.HtmlLayer(`${row.id}`) // state.layer = layer // window.$viewer.addLayer(layer) // let iconEl = `<div class="marsBlueGradientPnl"> // <div>${row.name}</div> // </div>` // let divIcon = new DC.DivIcon( // new DC.Position(row.lng, row.lat, 0), // `<div class="public-map-popup"> // ${iconEl} // </div>` // ) // let incident = () => { } // divIcon.on(DC.MouseEventType.CLICK, incident) // layer.addOverlay(divIcon) window.$viewer.flyToPosition(new DC.Position(row.lng, row.lat, 600, 0, -90, 0)) } // 查看详情 function goDetail (row) { } const searchBtn = (params) => { resetPage() getLists(params) } const resetBtn = (params) => { resetPage() getLists(params) } // 重置分页数据 const resetPage = () => { pages.page = 1 pages.pageSize = 10 pages.total = 0 } // 分页树改变 const handleSizeChange = (val) => { pages.pageSize = val getLists(SeachBarCondition.value.getSeachCondition()) } const spaceTabChange = (type) => { curSelectTabType.riskLevel = type nextTick(() => { searchBtn(SeachBarCondition.value.getSeachCondition()) }) } EventBus.on('rsTabChange', spaceTabChange) onUnmounted(() => { EventBus.off('rsTabChange', spaceTabChange) }) </script> <template> <public-content> <template #content> <div class="search-box"> <el-form :inline="true" :model="riskSource" class="demo-form-inline"> <el-form-item label="" class="form-item-input"> <el-input v-model="riskSource.name" placeholder="请输入风险源" clearable style="width: 120px" /> </el-form-item> <el-form-item class="transparent-select" label=""> <el-select v-model="riskSource.riskLevel" placeholder="请选择等级" clearable style="width: 120px"> <el-option label="一般" value="1" /> <el-option label="较大" value="2" /> </el-select> </el-form-item> <el-form-item class="search-btn"> <el-button type="primary" @click="onSubmit">查询</el-button> <el-button type="primary" @click="clearBtn">重置</el-button> </el-form-item> </el-form> <el-table :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle" :cell-style="tableCellStyle" v-loading="loading" element-loading-background="rgba(122, 122, 122, 0.1)"> <el-table-column prop="firmName" label="单位名称" /> <el-table-column prop="riskLevelName" label="等级" width="100" /> <el-table-column show-overflow-tooltip fixed prop="name" label="风险源" /> <div class="w100 h0 flex-1 flex f-d-c"> <global-search :options="options" @searchBtn="searchBtn" @resetBtn="resetBtn" ref="SeachBarCondition"></global-search> <div class="h0 flex-1 table-content" ref="TableContent" v-loading="loading" element-loading-background="rgba(46, 81, 136, 0.9)"> <el-table border :data="tableData" :height="curTableHeight" style="width: 100%"> <el-table-column align="center" label="序号" width="62" prop="rank"> <template #default="{ $index, row }"> {{ (pages.page - 1) * pages.pageSize + $index + 1 }} </template> </el-table-column> <el-table-column align="center" show-overflow-tooltip prop="name" label="名称" /> <el-table-column align="center" show-overflow-tooltip prop="category" label="类别" width="96" /> <el-table-column align="center" show-overflow-tooltip prop="mainProduct" label="主要产品" width="112" /> <el-table-column align="center" width="62" label="操作"> <template #default="scope"> <el-button link type="primary" size="small" :disabled="scope.row.lng == ''" @click="rowClick(scope.row)"> 定位 </el-button> <!-- <el-button link type="primary" size="small" @click="goDetail"> <i class="el-icon-document" style="color: #66b1ff"></i>详情 </el-button> --> </template> </el-table-column> </el-table> </div> <div class="el-page"> <el-pagination background layout="prev, pager, next" :page-size="pages.pageSize" :total="pages.total" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> @size-change="handleSizeChange" @current-change="handleCurrentChange" size="small" /> </div> </template> </public-content> </div> </template> <style lang="scss" scoped> @@ -141,59 +216,17 @@ color: #fff !important; } .search-box { ::v-deep .el-table__body-wrapper { background-color: #152851; } } /* 当表格没有数据时,修改表格的背景颜色 */ .el-table--empty .el-table__body { background-color: rgba(135, 158, 199, 0.3) !important; /* 你想要的背景颜色 */ .table-content { flex-basis: auto; height: calc(100% - 40px); } .el-page { margin-top: 10px; width: 100%; display: flex; align-items: center; justify-content: center; z-index: 999; } .form-item-input { width: 160px; ::v-deep(.el-input) { width: 0; flex: 1; .el-input__wrapper { font-size: 16px; font-weight: 400; border-radius: 0; background: rgba(135, 158, 199, 0.3); box-shadow: inset 0px 3px 7px 0px rgba(42, 138, 236, 0.95); .el-input__inner { color: #BFD3E5; } } } } .search-btn { ::v-deep .el-button--primary { background-color: transparent; border-color: none; border: none; cursor: pointer; color: #edffff; background: rgba(135, 158, 199, 0.3); box-shadow: inset 0px 3px 7px 0px rgba(42, 138, 236, 0.95); } width: 100%; height: 40px; line-height: 40px; } </style> src/views/rs/components/box/fireContent.vue
File was deleted src/views/rs/components/box/fireSource.vue
File was deleted src/views/rs/components/box/fireTrend.vue
File was deleted src/views/rs/components/box/occurStatistics.vue
File was deleted src/views/rs/components/box/publicContent.vue
File was deleted src/views/rs/components/box/unitContent.vue
File was deleted src/views/rs/components/leftContainer.vue
@@ -2,58 +2,101 @@ * @Author: shuishen 1109946754@qq.com * @Date: 2023-03-10 15:27:59 * @LastEditors: shuishen 1109946754@qq.com * @LastEditTime: 2024-10-25 18:43:23 * @FilePath: \bigScreen\src\views\statistics\components\leftContainer.vue * @LastEditTime: 2024-11-19 17:25:37 * @FilePath: \bigScreen\src\views\rs\components\leftContainer.vue * @Description: * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. --> <script setup> import dataContent from './box/dataContent.vue' import unitContent from './box/unitContent.vue' import fireContent from './box/fireContent.vue' import EventBus from 'utils/bus' import { getDictionary } from "@/api/dict/dict" import { nextTick, onUnmounted, reactive } from 'vue' const resData = reactive({ data: [ { label: '一般', value: 1 }, { label: '较大', value: 2 } ] }) const curSelect = ref('') const tabClick = (item) => { console.log(item, 12312) if (curSelect.value) EventBus.emit('restHandleDelChange', `4-${curSelect.value}`) curSelect.value = item.value EventBus.emit('restHandleCheckChange', `4-${item.value}`) EventBus.emit('rsTabChange', item.value) } nextTick(() => { tabClick(resData.data[0]) }) const showOn = computed(() => (item) => { if (curSelect.value == item.value) { return true } return false }) onUnmounted(() => { if (curSelect.value) EventBus.emit('restHandleDelChange', `4-${curSelect.value}`) }) </script> <template> <div class="left-container"> <div class="data box"> <title-box> <template #titleName> 风险源列表 </template> </title-box> <div class="content-box"> <data-content></data-content> <div class="left-container cur-container"> <div class="tablist h100"> <div class="cursor-p" :class="{ on: showOn(item) }" v-for="item, index in resData.data" :key="index" @click="tabClick(item)"> <div class="label-box"> {{ item.label }} </div> </div> <!-- <div class="unit box"> <title-box> <template #titleName> 入住单位统计 </template> </title-box> <div class="content-box"> <unit-content></unit-content> </div> </div> --> <!-- <div class="fire box"> <title-box> <template #titleName> 实时火警事件 </template> </title-box> <div class="content-box"> <fire-content></fire-content> </div> </div> --> </div> </template> <style lang="scss" scoped> .content-box { margin-top: 20px; position: absolute; .cur-container { background: transparent; pointer-events: none; .tablist { pointer-events: all; &>div { display: flex; align-items: center; justify-content: center; margin-top: 16px; padding: 10px; width: 64px; height: 64px; border-radius: 50%; box-shadow: inset 0 0 40px #409eff; color: #fff; box-sizing: content-box; &.on { position: relative; color: #75b1ff; } .label-box { line-height: 24px; text-align: center; } } } } </style> src/views/rs/components/rightContainer.vue
@@ -2,91 +2,29 @@ * @Author: shuishen 1109946754@qq.com * @Date: 2023-03-10 15:27:59 * @LastEditors: shuishen 1109946754@qq.com * @LastEditTime: 2024-10-26 14:49:05 * @FilePath: \bigScreen\src\views\survey\components\rightContainer.vue * @LastEditTime: 2024-11-19 16:01:24 * @FilePath: \bigScreen\src\views\rs\components\rightContainer.vue * @Description: * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. --> <script setup> import fireSource from './box/fireSource.vue' import fireTrend from './box/fireTrend.vue' import occurStatistics from './box/occurStatistics.vue' import publicContent from './box/publicContent.vue' import dataContent from './box/dataContent.vue' </script> <template> <div class="right-container"> <div class="fire-source box"> <div class="data box h0 flex-1"> <title-box> <template #titleName> 火警事件来源 风险源信息 </template> </title-box> <div class="content-box"> <fire-source></fire-source> </div> </div> <div class="occur-statistics box"> <title-box> <template #titleName> 易发区统计 </template> </title-box> <div class="content-box"> <fire-trend></fire-trend> </div> </div> <div class="fire-trend box"> <title-box> <template #titleName> 火警上报趋势 </template> </title-box> <div class="content-box"> <occur-statistics></occur-statistics> <data-content></data-content> </div> </div> </div> </template> <style lang="scss" scoped> .right-container { display: flex; flex-direction: column; padding: 20px; position: absolute; top: 0; right: 0; width: 440px; height: 100%; pointer-events: auto; .box { margin-top: 20px; .header { height: 32px; background: url(/img/bg/sub-title.png) no-repeat; } } .fire-source { flex: 3; } .occur-statistics { flex: 3; } .fire-trend { flex: 4; } .box:first-child { margin-top: 0; } } </style> <style lang="scss" scoped></style> src/views/rs/index.vue
@@ -2,29 +2,21 @@ * @Author: shuishen 1109946754@qq.com * @Date: 2023-03-10 15:27:59 * @LastEditors: shuishen 1109946754@qq.com * @LastEditTime: 2024-11-11 18:26:24 * @LastEditTime: 2024-11-19 15:57:09 * @FilePath: \bigScreen\src\views\rs\index.vue * @Description: 综合设计 * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. --> <script setup> import { onMounted, onUnmounted } from 'vue' import leftContainer from './components/leftContainer.vue' import rightContainer from './components/rightContainer.vue' import EventBus from 'utils/bus' onMounted(() => { EventBus.emit('restHandleCheckChange', '4'); }) onUnmounted(() => { EventBus.emit('restHandleDelChange', '4'); }) </script> <template> <div class="container page-container"> <left-container></left-container> <right-container></right-container> </div> </template> src/views/survey/components/box/dataContent.vue
@@ -2,7 +2,7 @@ * @Author: shuishen 1109946754@qq.com * @Date: 2024-11-04 16:32:04 * @LastEditors: shuishen 1109946754@qq.com * @LastEditTime: 2024-11-05 17:12:37 * @LastEditTime: 2024-11-19 15:29:44 * @FilePath: \bigScreen\src\views\survey\components\box\dataContent.vue * @Description: * @@ -10,23 +10,23 @@ --> <script setup> // import { ref, reactive, onMounted, nextTick, inject } from 'vue' import { useEchartsResize } from "hooks/useEchartsResize"; import { getRescueTeamStatistic } from "@/api/indParkInfo"; import { nextTick } from "vue"; import { useEchartsResize } from "hooks/useEchartsResize" import { getRescueTeamStatistic } from "@/api/indParkInfo" import { nextTick } from "vue" let $echarts = inject("echarts"); const curEcharts = ref(null); let $echarts = inject("echarts") const curEcharts = ref(null) let myEcharts = reactive(null); let myEcharts = reactive(null) function getStatistic() { getRescueTeamStatistic().then((res) => { let xaxis_data = []; let yaxis_data = []; let xaxis_data = [] let yaxis_data = [] res.data.data.forEach((element) => { xaxis_data.push(element.type); yaxis_data.push(element.num); }); xaxis_data.push(element.type) yaxis_data.push(element.num) }) myEcharts.setOption({ tooltip: { @@ -85,6 +85,7 @@ color: "#fff", }, axisLine: { show: true, lineStyle: { color: "#fff", }, @@ -97,6 +98,9 @@ axisLabel: { color: "#fff", }, splitLine: { show: false, } }, ], series: [ @@ -110,20 +114,20 @@ }, }, ], }); }); }) }) } nextTick(() => { myEcharts = $echarts.init(curEcharts.value); getStatistic(); }); myEcharts = $echarts.init(curEcharts.value) getStatistic() }) const echartsResize = () => { myEcharts && myEcharts.resize(); }; myEcharts && myEcharts.resize() } useEchartsResize(echartsResize); useEchartsResize(echartsResize) </script> <template> src/views/survey/components/box/fireContent.vue
@@ -2,7 +2,7 @@ * @Author: shuishen 1109946754@qq.com * @Date: 2024-11-04 16:32:04 * @LastEditors: shuishen 1109946754@qq.com * @LastEditTime: 2024-11-05 17:42:44 * @LastEditTime: 2024-11-19 15:33:32 * @FilePath: \bigScreen\src\views\survey\components\box\fireContent.vue * @Description: * @@ -49,14 +49,14 @@ getRiskSourceStatistic().then(res => { let data = res.data.data let dataRsult = [] var total = 0; var total = 0 data.forEach(item => { dataRsult.push({ name: item.riskLevel, value: item.num, itemStyle: typeLevel.find(i => i.name == item.riskLevel).itemStyle }) total = total + item.num; total = total + item.num }) myEcharts.setOption({ @@ -80,7 +80,7 @@ legend: { orient: "vertical", top: "5%", top: "40%", left: "5%", textStyle: { color: "#fff", src/views/survey/components/box/unitContent.vue
@@ -2,35 +2,35 @@ * @Author: shuishen 1109946754@qq.com * @Date: 2023-03-13 14:54:26 * @LastEditors: shuishen 1109946754@qq.com * @LastEditTime: 2024-11-05 17:15:55 * @LastEditTime: 2024-11-19 15:33:01 * @FilePath: \bigScreen\src\views\survey\components\box\unitContent.vue * @Description: * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. --> <script setup> import { useEchartsResize } from "hooks/useEchartsResize"; import { useEchartsResize } from "hooks/useEchartsResize" import { getEmergencySpaceStatistic } from "../../../../api/indParkInfo"; import { getEmergencySpaceStatistic } from "../../../../api/indParkInfo" let $echarts = inject("echarts"); const curEcharts = ref(null); let $echarts = inject("echarts") const curEcharts = ref(null) let myEcharts = reactive(null); let myEcharts = reactive(null) function getEmergencySpace() { getEmergencySpaceStatistic().then((res) => { // console.log(res) let data = res.data.data; let dataRsult = []; var total = 0; let data = res.data.data let dataRsult = [] var total = 0 data.forEach((item) => { dataRsult.push({ name: item.type, value: item.num, }); total = total + item.num; }); }) total = total + item.num }) myEcharts.setOption({ title: { @@ -51,7 +51,7 @@ }, legend: { orient: "vertical", top: "5%", top: "20%", left: "5%", textStyle: { color: "#fff", @@ -106,20 +106,20 @@ data: dataRsult, }, ], }); }); }) }) } nextTick(() => { myEcharts = $echarts.init(curEcharts.value); getEmergencySpace(); }); myEcharts = $echarts.init(curEcharts.value) getEmergencySpace() }) const echartsResize = () => { myEcharts && myEcharts.resize(); }; myEcharts && myEcharts.resize() } useEchartsResize(echartsResize); useEchartsResize(echartsResize) </script> <template>