Browse Source

Merge branch 'release-sy-v1.0.0' of ssh://gitlab.datameta.com:2224/project/water/shuili-vue into release-sy-v1.0.0

sy-water-data-board-ui
panyuyi 1 month ago
parent
commit
255f0b1b7d
  1. 4
      src/api/mapCommon/index.js
  2. BIN
      src/assets/image/videoNull.png
  3. 1
      src/utils/mapUtils/index.js
  4. 2
      src/views/aiSupervision/waterSetting/runScene/layerTree/index.js
  5. 9
      src/views/reservoir/safeOperation/components/ProjectDetail.vue
  6. 106
      src/views/reservoir/safeOperation/components/VideoAnalysis.vue
  7. 41
      src/views/reservoir/safeOperation/index.vue
  8. 3
      src/views/sluice/runManage/enginerring/overviewStatistics/index.vue
  9. 16
      vue.config.js

4
src/api/mapCommon/index.js

@ -1,4 +1,5 @@
import request from '@/utils/request'
import axios from 'axios';
// 获取场景列表
export const getSceneListData = async (data) => {
@ -28,3 +29,6 @@ export const getLayerData = async (sceneId) => {
});
};
export const getLayerLegend = async (url) => {
return axios.get(url);
};

BIN
src/assets/image/videoNull.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

1
src/utils/mapUtils/index.js

@ -211,6 +211,7 @@ export const getSelectedLayersLegend = (selectedLayersList) => {
} else {
result = await getLayerLegend(`${layer.url}/legend.json?bbox=${bbox}`);
}
console.log(result)
if (result.status === 200 && result.data) {
let currentLayer = [];
// if (mapName) {

2
src/views/aiSupervision/waterSetting/runScene/layerTree/index.js

@ -219,7 +219,9 @@ export async function addLayer(layerData) {
return;
}
if (!layerType || !(action = layerActions[layerType])) return;
console.log(action)
const layer = await action(layerData);
console.log(layer)
layer && window.viewer.addLayer(layer);
if (["013000"].includes(layerType)) {
// 3d tiles

9
src/views/reservoir/safeOperation/components/ProjectDetail.vue

@ -29,6 +29,12 @@
:resCode="resCode"
></MonitorWarning>
</el-tab-pane>
<el-tab-pane label="视频分析" name="6" lazy>
<VideoAnalysis
ref="videoAnalysis"
:resCode="resCode"
></VideoAnalysis>
</el-tab-pane>
</el-tabs>
</div>
</template>
@ -38,6 +44,7 @@ import WaterRain from "./WaterRain.vue";
import EnvirQuality from "./EnvirQuality.vue";
import EngineSafe from "./EngineSafe.vue";
import MonitorWarning from "./MonitorWarning.vue";
import VideoAnalysis from "./VideoAnalysis.vue";
import DataStatistics from "./DataStatistics.vue";
export default {
components: {
@ -45,7 +52,7 @@ export default {
WaterRain,
EnvirQuality,
EngineSafe,
MonitorWarning,
VideoAnalysis,
DataStatistics,
},
props: {

106
src/views/reservoir/safeOperation/components/VideoAnalysis.vue

@ -0,0 +1,106 @@
<template>
<div class="video-analysis">
<div class="videoSelect">
<el-select placeholder="请选择视频" v-model="activeVideo" size="mini" style="width: 240px">
<el-option
v-for="item in videoList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
<el-tabs v-model="activeName" >
<el-tab-pane label="实时视频" name="realTime">
<div class="videoBox">
<video :src="videoUrl" v-if="videoUrl"></video>
<div v-else class="videoNull">
<div class="videoContent">
<img src="@/assets/image/videoNull.png">
<span>暂无内容</span>
</div>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
props: {
resCode: {
type: String,
default: "",
},
},
data() {
return {
activeName: 'realTime',
videoUrl: '',
activeVideo: '0',
videoList: [
{
label: 'SP0012',
value: '0',
},
{
value: 'Option2',
label: 'Option2',
},
{
value: 'Option3',
label: 'Option3',
},
{
value: 'Option4',
label: 'Option4',
},
{
value: 'Option5',
label: 'Option5',
},
]
};
},
created() {
},
methods: {
},
};
</script>
<style scoped lang="scss">
.video-analysis {
.videoBox {
height: 558px;
video {
width: 100%;
height: 100%;
}
.videoNull{
width: 100%;
height: 100%;
background: #383838;
display: flex;
justify-content: center;
align-items: center;
.videoContent {
img {
width: 44px;
height: 35px;
margin-bottom: 8px;
}
display: flex;
flex-direction: column;
align-items: center;
color: rgba(255, 255, 255, 0.55);
}
}
}
.videoSelect {
position: absolute;
right: 0;
top: 5px;
}
}
</style>

41
src/views/reservoir/safeOperation/index.vue

@ -58,21 +58,29 @@
</div>
</Transition>
<div class="legend-icon">
<div class="row">
<img class="icon" src="@/assets/image/reservoir_big.png" alt="" />
<span>大型</span>
</div>
<div class="row">
<img class="icon" src="@/assets/image/reservoir_normal.png" alt="" />
<span>中型</span>
</div>
<div class="row">
<img class="icon" src="@/assets/image/reservoir_small.png" alt="" />
<span>小型</span>
</div>
<div class="legend-icon" v-if="legendList.length > 0">
<!-- <div class="row">-->
<!-- <img class="icon" src="@/assets/image/reservoir_big.png" alt="" />-->
<!-- <span>大型</span>-->
<!-- </div>-->
<!-- <div class="row">-->
<!-- <img class="icon" src="@/assets/image/reservoir_normal.png" alt="" />-->
<!-- <span>中型</span>-->
<!-- </div>-->
<!-- <div class="row">-->
<!-- <img class="icon" src="@/assets/image/reservoir_small.png" alt="" />-->
<!-- <span>小型</span>-->
<!-- </div>-->
<div class="legend-content">
<div v-for="(item, index) in legendList" :key="item.layerName + index" class="legend-item-box">
<div class="legend-title">{{ item.layerName }}</div>
<div v-for="legend in item.legends" class="legend-item">
<img class="legend-img" :src="`data:${legend.contentType};base64,${legend.imageData}`" alt="" />
<div class="legend-text">{{ legend.label || legend.name || legend.text }}</div>
</div>
</div>
</div>
</div>
<!-- 弹窗 -->
<el-dialog
:title="`${
@ -134,6 +142,7 @@ export default {
children: "layers",
label: "nameCn",
},
legendList: [],
layerList: [],
checkList: [],
treeData: [],
@ -298,10 +307,14 @@ export default {
},
handleCheckTree(data, checked) {
console.log("data, checked >>>>> ", data, checked);
console.log("getCheckedNodes >>>>> ", this.$refs.tree.getCheckedNodes());
if (data.pid === "root" || data.layers) return;
if (checked) {
this.checkList = [...this.checkList, data.id];
const list = this.$refs.tree.getCheckedNodes()
console.log("checkList >>>>> ", this.checkList);
addLayer(data);
this.legendList = getSelectedLayersLegend(list)
this.layerList.push(data);
} else {
this.checkList = this.checkList.filter((v) => v != data.id);

3
src/views/sluice/runManage/enginerring/overviewStatistics/index.vue

@ -77,7 +77,6 @@ import {
postDfStatisticsSituation,
postDfStatisticsHiddenDanger,
} from "@/api/sluice";
import {postYhStatisticsHiddenDanger} from "@/api/dike";
export default {
data () {
return {
@ -122,7 +121,7 @@ export default {
methods: {
gethiddenDanger() {
const node = this.$refs.cascader.getCheckedNodes()
postYhStatisticsHiddenDanger({
postDfStatisticsHiddenDanger({
adcd: this.paramsData.adcd,
districtLevelFlag: node[0] && node[0].level === 3 ? 1 : 0,
patrolStart: this.paramsData.hiddenDangerArr && this.paramsData.hiddenDangerArr.length > 1 ? this.paramsData.hiddenDangerArr[0] : '',

16
vue.config.js

@ -67,6 +67,14 @@ module.exports = {
// ['^' + process.env.VUE_APP_BASE_API]: '/tianhui-admin-web'
// }
// },
'/iserver': {
target: 'http://172.16.34.41:8090',
// target: 'http://172.16.32.63:52111',
changeOrigin: true
// pathRewrite: {
// '^/iserver': ''
// }
},
["profile"]: {
target: "http://shuili.product.dev.com:30115",
changeOrigin: true,
@ -81,14 +89,6 @@ module.exports = {
["^" + process.env.VUE_APP_BASE_API]: "/tianhui-admin-web",
},
},
'/iserver': {
target: 'http://172.16.34.41:8090',
// target: 'http://172.16.32.63:52111',
changeOrigin: true
// pathRewrite: {
// '^/iserver': ''
// }
},
"/mapserver": {
target: "http://172.16.32.63/tiles",
changeOrigin: true,

Loading…
Cancel
Save