Files
4.0/src/renderer/views/dashboard/index.vue

1463 lines
44 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="dashboard-container" v-loading.fullscreen="fullScreenLoading"
element-loading-background="rgba(0, 0, 0, 0.8)">
<div class="absolute " style="z-index: 99999;">
<!-- <el-button @click="create">点一下</el-button> -->
<!-- <span style="color: red">{{ $t("login.loginTitle") }}</span>-->
<!-- <el-select @change="langChange" v-model="value" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>-->
<!-- <span class="svg-container" @click="handleLogin">
<svg-icon icon-class="point" :class-name="['point','pp']"></svg-icon>
<svg-icon icon-class="personalModel" :class-name="['point','pp']"></svg-icon>
<svg-icon icon-class="measure" :class-name="['point','pp']"></svg-icon>
<svg-icon icon-class="height_measure" :class-name="['point','pp']"></svg-icon>
</span>-->
</div>
<Tree v-if="noSituation" class="absolute zIndex9 tree" ref="tree"></Tree>
<!-- <WangEditor class="absolute zIndex99"></WangEditor>-->
<myHeaderAll ref="myHeaderAll" v-if="noSituation"></myHeaderAll>
<bottomMenu v-if="noSituation"></bottomMenu>
<!-- 态势演播 -->
<!-- <div class="movie absolute zIndex999">
<gant class="movie absolute zIndex999"/>
</div> -->
<!-- <button class="videoStop absolute zIndex999" @click="videoStop">结束录制</button> -->
<!--左侧一级菜单-->
<firstMenu v-if="noSituation" class="absolute zIndex9" ref="firstMenu"></firstMenu>
<!--左侧二级菜单-->
<secondMenu class="absolute" ref="secondMenu"></secondMenu>
<editor class="absolute zIndex99" ref="editor"></editor>
<selectImg class="selectImgBox absolute" ref="selectImg"></selectImg>
<!--剖面分析-->
<profileAnalysis class="profileAnalysisBox absolute zIndex99"></profileAnalysis>
<!--土方分析-->
<cutFill class="cutFillBox absolute zIndex99"></cutFill>
<!--淹没分析-->
<inundationAnalysis class="inundationAnalysisBox absolute zIndex99"></inundationAnalysis>
<!-- <div class="richTextDialogBox">-->
<el-dialog :title="richTextDialog.title" :modal="false" :visible.sync="richTextDialog.visible" width="1090px"
@close="cancel" :center="true" :close-on-click-modal="false">
<div id="richTextEditor" style="background: #fff"></div>
<!-- :content="richTextDialog.content"-->
<!-- <richTextEditor></richTextEditor>-->
<!-- <div style="display: flex;justify-content: flex-end;padding: 6px 0;">
<el-button size="mini" type="primary" @click="save">确定</el-button>
<el-button size="mini" type="danger" @click="cancel">取消</el-button>
</div>-->
</el-dialog>
<!--坐标定位-->
<flyToLocation ref="flyToLocation" class="flyToLocationBox absolute zIndex99"></flyToLocation>
<junbiao ref="junbiao" class="junbiaoBox absolute zIndex999"></junbiao>
<junbiao3d ref="junbiao3d" class="junbiao3dBox absolute zIndex999"></junbiao3d>
<vrModel class="vrModelBox absolute zIndex999"></vrModel>
<textModel class="textModelBox absolute zIndex999"></textModel>
<adddirectory class="adddirectoryBox absolute zIndex999"></adddirectory>
<model ref="model" class="modelBox absolute zIndex999"></model>
<modelg ref="modelg" class="modelBoxg absolute zIndex999"></modelg>
<modelSelect ref="modelSelect" class="modelSelectBox absolute zIndex999"></modelSelect>
<bimInfo ref="bimInfo" class="bimInfoBox absolute zIndex99"></bimInfo>
<echartsTotal ref="echartsTotal" class="echartsTotalBox absolute zIndex99"></echartsTotal>
<rolePermission></rolePermission>
<div class="absolute zIndex99 tongbu" style="top: 5vw">
<el-button size="mini" @click="tongbu">数据同步</el-button>
</div>
<div v-if="showBigData || noSituation" style="display: flex">
<div id="earth" :class="['fullSize']"></div>
<div id="map2d" :class="['fullSize', 'absolute', 'halfEarth', 'zIndex1']" style="left: 50%; height: 100vh"></div>
</div>
<div v-if="!noSituation && !showBigData" id="earthContainers" :class="['fullSize']"></div>
<div v-if="noSituation" class="absolute zIndex9 logo" style="bottom: 15px" @click="changeState">
<!-- <img src="@/assets/images/81.gif" /> -->
<!-- <img src="@/assets/images/rotation.gif" /> -->
<!-- <img src="@/assets/images/地球.gif" />-->
<img :src="require('@/assets/images/shijingjun/' + skinInfo + '/logo.png')" alt="" />
<!-- <img src="@/assets/images/3c60ff3cd2d9e0547ada43a58fa60c3.png">-->
<!-- <img src="@/assets/images/aaaaaa.webp">-->
<!-- <button v-for="item in optionss" @click="addMarker(item)">{{ item.source_name }}</button>-->
</div>
<scene class="absolute zIndex999 scene"></scene>
<div id="modal" style=""></div>
<el-drawer class="transformDrawerBox" :modal-append-to-body="false" :wrapperClosable="false" title="转换"
:visible.sync="transformDrawer" direction="ltr">
<div class="transformDrawerContent">
<el-collapse @change="changeActive" v-model="transformTypeActiveName" accordion>
<template v-for="item in transformTypes">
<el-collapse-item :title="item.title" :name="item.name">
<div class="transformDrawerItem">
<span>源文件路径</span>
<el-input size="medium" v-model="input" :placeholder="item.placeholder ? item.placeholder : '请输入文件路径'
">
<template slot="append">
<el-button @click="openDialog(item)">
<i class="el-icon-more"></i>
</el-button>
</template>
</el-input>
</div>
<div class="transformDrawerItem">
<span>存放路径</span>
<el-input size="medium" v-model="output" :placeholder="item.outplaceholder ? item.outplaceholder : '请输入文件路径'
">
<template slot="append">
<el-button @click="openSaveDialog(item)">
<i class="el-icon-more"></i>
</el-button>
</template>
</el-input>
</div>
</el-collapse-item>
</template>
</el-collapse>
<div class="btn">
<el-button :disabled="transformTypeActiveName == ''" type="primary" size="medium" @click="transform">转换
</el-button>
</div>
</div>
</el-drawer>
<!-- 导入作战数据生成的点的样式-->
<fightingDataStyle ref="fightingDataStyle" class="fightingDataStyleBox absolute zIndex99"></fightingDataStyle>
<DTH ref="dth" :host="host" :token="token" class="zIndex99"></DTH>
<!-- 标准版本 无人机 -->
<!-- <flyer v-if="flyerDiv" class="flyer"></flyer> -->
<!-- <flyer2 v-if="flyerDiv2" class="flyer"></flyer2> -->
<!--态势部分-->
<div v-show="!showBigData && !noSituation" class="titles">
实景三维态势推演系统
</div>
<svg v-show="!showBigData && !noSituation" class="icon icon-top" aria-hidden="true">
<use xlink:href="#icon-top"></use>
</svg>
<svg class="icon icon-tuichudenglu" @click="closeSituation" aria-hidden="true" v-if="showList">
<use xlink:href="#icon-tuichudenglu"></use>
</svg>
<!--右侧元素指挥舱-->
<!--新增态势0827-->
<div v-if="editSituation" :class="[
'cabinBox',
'animate__animated',
typeof showCabin == 'boolean'
? showCabin
? 'animate__zoomOutRight'
: 'animate__zoomInRight'
: '',
]">
<cabin @changeShow="changeShow('showCabin', 'showCabinBtn')" ref="cabin"></cabin>
</div>
<div v-if="editSituation && typeof showCabinBtn == 'boolean'" :class="[
'cabinShowBtn',
'cabinShowBtn',
'animate__animated',
typeof showCabinBtn == 'boolean'
? showCabinBtn
? 'animate__lightSpeedInRight'
: 'animate__lightSpeedOutRight'
: '',
]">
<div class="switch-node-outer">
<div class="switch-node-inner" @click="changeShow('showCabinBtn', 'showCabin')">
展开指挥舱
</div>
</div>
</div>
<!--态势事件新建框-->
<div class="newEventBox" v-if="eventBox">
<newEvent></newEvent>
</div>
<!--态势时间面板-->
<eventEditor class="eventEditor"></eventEditor>
<!--元素列表框-->
<div :class="[
'elementBox',
'animate__animated',
typeof showElement == 'boolean'
? showElement
? 'animate__zoomOutLeft'
: 'animate__zoomInLeft'
: '',
]" v-if="editSituation">
<elements @changeShow="changeShow('showElement', 'showElementBtn')" v-if="!showList"></elements>
</div>
<!--新增态势0822 -->
<div v-if="editSituation && typeof showElementBtn == 'boolean'" style="left: 0%;" :class="[
'elementShowBtn',
'animate__animated',
typeof showElementBtn == 'boolean'
? showElementBtn
? 'animate__lightSpeedInLeft'
: 'animate__lightSpeedOutLeft'
: '',
]">
<div class="switch-node-outer">
<div class="switch-node-inner" @click="changeShow('showElementBtn', 'showElement')">
展开军标标绘
</div>
</div>
</div>
<svg class="icon icon-tuichu" @click="closeSituationEdit" aria-hidden="true" v-if="editSituation">
<use xlink:href="#icon-tuichu"></use>
</svg>
<!-- 方案列表 -->
<div class="content" v-if="showList">
<situationList ref="situation" @openSituationEdit="openSituationEdit"></situationList>
</div>
<div v-if="eventsList" class="timeline-container">
<deduction ref="Deduction" :TSTYOBJ="TSTYOBJ" :action="action"></deduction>
</div>
<!-- gis资源列表 -->
<div class="gisTable">
<el-dialog title="gis资源列表" :modal="false" :visible.sync="dialogTableVisible" @open="fetchData">
<el-table class="gisTable" :row-key="getRowKey" :reserve-selection="true" :data="gisData" ref="multipleTable"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"> </el-table-column>
<!--<el-table-column width="150" property="date" label="日期"></el-table-column>-->
<el-table-column property="source_name" label="名称"></el-table-column>
<el-table-column width="300" property="source_type" label="类型"></el-table-column>
</el-table>
<div class="btnsbox">
<el-button class="btns" @click="addResource">添加</el-button>
</div>
</el-dialog>
</div>
<input type="file" id="fileInputlink" style="display: none;" multiple
accept=".jpg, .png, .webp, .svg, .bmp, .gif,.mp4,.mp3,.pdf" @change="uploadFile" />
<input type="file" id="fileInputPanorama" style="display: none;" multiple accept=".jpeg,.png,.jpg"
@change="uploadFile2" />
<!-- 海东1021 -->
<div class="goodSearch" v-if="goodSearchDialog">
<div class="contentBox " v-draggable>
<div class="titleBox nav">
<span class="title">{{ $t("leftMenu.secondMenu.goodsSearch") }}</span>
<span class="closeBox">
<span @click="goodSearchDialog = false"></span>
</span>
<div class="hr"></div>
</div>
<!-- <template v-if="goodSearchEmpty">
<div class="empty-img">
</div>
</template>
<template v-else> -->
<div id="goodSearchEchart"></div>
<div style="height: 60px;position: relative;">
<el-button class="export-btn" style="
background: rgba(var(--color-sdk-base-rgb), 0.2);
border: 1px solid rgba(var(--color-sdk-base-rgb), 0.5);
color: #ffffff;
position: absolute;
right: 20px;
bottom: 20px;
">导出Excel</el-button>
</div>
<!-- </template> -->
</div>
</div>
<!-- 海东表格设置 -->
<excelSet ref="excelSet" class="excelSetBox absolute zIndex99"></excelSet>
<!-- tufu_select -->
<tufuSelect style="top: 115px;right: 50px;" class="tufuSelect absolute zIndex99"></tufuSelect>
<!-- 战术计算 -->
<tactical class="tacticalBox absolute"></tactical>
<!-- modelSet -->
<ModelSet class="ModelSetBox absolute"></ModelSet>
</div>
</template>
<script>
// 新增态势0910
import {ipcRenderer, remote} from "electron";
import { mapGetters } from "vuex";
import Tree from "@/components/Tree/index";
import bottomMenu from "@/components/bottomMenus/bottomMenu.vue";
import myHeaderAll from "@/components/myHeaderAll/index.vue";
import firstMenu from "@/components/LeftMenu/firstMenu.vue";
import secondMenu from "@/components/LeftMenu/secondMenu.vue";
import editor from "@/components/editor/index.vue";
import selectImg from "@/components/selectImg.vue";
import profileAnalysis from "@/components/analysis/profileAnalysis.vue";
import cutFill from "@/components/analysis/cutFill.vue";
import inundationAnalysis from "@/components/analysis/inundationAnalysis.vue";
import flyToLocation from "@/components/dialog/flyToLocation.vue";
import junbiao from "@/components/dialog/junbiao.vue";
import junbiao3d from "@/components/dialog/junbiao3d.vue";
import model from "@/components/dialog/model.vue";
import modelg from "@/components/dialog/modelg.vue";
import vrModel from "@/components/dialog/vrModel.vue";
import textModel from "@/components/dialog/textModel.vue";
import ModelSet from "@/components/dialog/ModelSet.vue";
import modelSelect from "@/components/dialog/modelSelect.vue";
import echartsTotal from "@/components/dialog/echartsTotal.vue";
import bimInfo from "@/components/dialog/bimInfo.vue";
import fightingDataStyle from "@/components/dialog/fightingDataStyle.vue";
import scene from "@/components/three/index.vue";
import rolePermission from "@/components/myHeaderAll/systemPopup/components/permission/permission.vue";
import gant from "../../components/gantt-next/gant.vue";
import modelTransform from "./modelTransform";
import DTH from "@/components/DTH/index";
// import flyer from "@/components/UAV2/index";
// import flyer2 from "@/components/UAV3/index";
import situationList from "@/components/situationList/index.vue";
import deduction from "@/components/TS/deduction.vue";
import cabin from "@/components/situationEdit/cabin.vue";
import elements from "@/components/situationEdit/element.vue";
import nodeType from "@/components/treeNode";
import newEvent from "@/components/Events/newEvent.vue";
import adddirectory from "../../components/dialog/adddirectory.vue";
import excelSet from "@/components/dialog/excelSet.vue";
import eventEditor from "@/components/TS/eventEditor/index.vue";
import tufuSelect from "@/components/dialog/tufu_select.vue";
import tactical from "@/components/dialog/tactical.vue";
import {
getSelectedNode,
getNodeData,
cusAddNodes,
cusRenderNode,
} from "@/components/Tree/treeNode";
import { addSource, delSource, checkAuth, linkFile } from "@/api/gisAPI";
import { eventList, tilesetAdd, tilesetList } from "@/api/aboutCabin";
import { obj } from "@/api/dataFromApi";
import { getIP } from "../../utils";
import { getToken } from "@/utils/auth";
import { cusNodeIcon } from "../../components/Tree/treeNode";
// import richTextEditor from "@/components/editor/richTextEditor.vue";
let handleLogin = (that) => {
// 需要登录就去掉“/dashboard”
that.$store
.dispatch("Login", {
host: "http://localhost:8890",
username: "admin",
password: "c30807e6587ade285ba7ade9f881b3d7",
})
.then(() => {
console.log("logined$$$$$$$$$$$$$$");
// that.createEarth();
// this.$router.push({path: '/'})
})
.catch(() => { });
};
export default {
name: "dashboard",
mixins: [modelTransform],
components: {
newEvent,
elements,
cabin,
deduction,
situationList,
eventEditor,
// flyer,
// flyer2,
DTH,
gant,
scene,
Tree,
rolePermission,
bottomMenu,
myHeaderAll,
firstMenu,
secondMenu,
editor,
selectImg,
profileAnalysis,
cutFill,
inundationAnalysis,
model,
modelSelect,
bimInfo,
fightingDataStyle,
echartsTotal,
junbiao,
junbiao3d,
flyToLocation,
vrModel,
textModel,
adddirectory,
// richTextEditor
// New,
// WangEditor
excelSet,
tufuSelect,
tactical,
ModelSet,
modelg
},
data() {
return {
eventLists: [],
TSTYOBJ: {},
action: null,
// flyerDiv
flyerDiv: false,
flyerDiv2: false,
excelSetDialog: false,
//海东1021
goodSearchDialog: false,
goodSearchEmpty: false,
// 新增态势0827
showCabin: "",
showCabinBtn: "",
// 新增态势0821
showElement: "",
showElementBtn: "",
//新增态势
noSituation: true,
showBigData: false,
showList: false,
editSituation: false,
eventBox: false,
eventsList: false,
dialogTableVisible: false,
gisData: [],
multipleSelection: [],
// tasks: Store.tasks, //渲染的真实任务数据、
// scales: Store.scales,
host: localStorage.getItem("service"),
token: getToken(),
skinInfo: JSON.parse(localStorage.getItem("systemSetting")).skinInfo,
appVersion: "81", //localStorage.getItem("appVersion"),
fullScreenLoading: false,
transformDrawer: false,
State: true, //功能菜单的显示状态
imgsrc: "",
halfEarth: false,
richTextDialog: {
title: "true",
content: "<span style='color:red'>true</span>",
visible: false,
},
treeObj: null,
/* BillboardObject,
*PolygonObject,
PolylineObject,
Model,
Path,
Circle,
AttackArrow,
PincerArrow,*/
/*测试用*/
optionss: [
{
source_name: "点标注",
key: "DrawPoint",
source_type: "point",
className: "public",
},
/* {name: "线", source_name: "线标注", key: "DrawPolyline", source_type: "line",},
{name: "面", source_name: "面标注", key: "DrawPolygon", source_type: "panel",},
{name: "圆", source_name: "圆标注", key: "DrawCircle", source_type: "circle",},
{name: "箭头", source_name: "箭头", key: "DrawAttackArrow", source_type: "attackArrow",},
{name: "钳形箭头", source_name: "钳形箭头", key: "DrawPincerArrow", source_type: "pincerArrow",},
*/
],
/*测试用*/
options: [
{
value: "zh",
label: "中文简体",
},
{
value: "en",
label: "英文",
},
{
value: "tw",
label: "中文繁体",
},
],
value: "zh",
};
},
beforeMount() {
// this.appVersion="earth"
},
computed: {
...mapGetters(["name", "roles", "lang"]),
},
beforeCreate() {
// if (!(this.$store.getters.token))
// handleLogin(this)
//新增态势
// window.Store = new TSTY.store();
// window.Clock = new TSTY.clock();
},
mounted() {
ipcRenderer.on("udpServerError",(e,msg)=>{
this.$message.error(msg);
})
ipcRenderer.on("udpServerSuccess",(e,msg)=>{
this.$message.success(msg);
})
// new Notification("这是标题", {
// body: "这是正文",
// icon:
// "https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png",
// requireInteraction: true,
// image:
// "https://gw.alipayobjects.com/zos/rmsportal/JiqGstEfoWAOHiTxclqi.png",
// });
window.$dth = this.$refs.dth;
// this.appVersion=localStorage.getItem("appVersion")
const that = this;
// this.imgsrc=require('@/assets/images/'+'81'+'/'+this.skinInfo+'/logo.png')
window.addEventListener("setItemEvent", (e) => {
if (e.key == "systemSetting") {
let obj = JSON.parse(e.newValue);
that.skinInfo = obj.skinInfo;
}
});
window.$root_home_index = this;
// // this.$nextTick(() => {
// this.createEarth()
this.value = this.$i18n.locale;
//
/*YJMap.on().then(() => {
window.map2d = new YJMap.Map("map2d")
})*/
this.$recvChanel("checkSituation", () => {
this.removeEarth1();
});
//测试用
this.$recvChanel("getTreeObj", (treeObj) => {
console.log(treeObj);
this.treeObj = treeObj;
this.$removeChanel("getTreeObj");
});
// checkAuth(res => {
// // console.log(res)
// // this.authInfo = res
// })
//测试用
// this.changeState()
window.addEventListener("openEventBox", () => {
console.log("++++++++++++++++++++++++++++");
this.eventBox = true;
this.$nextTick(() => {
window.dispatchEvent(window.EventsNameMap.get("initEvent"));
});
});
// this.create();
//
this.$recvChanel("linkFile", () => {
this.importPath();
});
this.$recvChanel('panoramaFile', () => {
this.importPath2()
})
this.systemSetting = JSON.parse(localStorage.getItem("systemSetting"));
// this.systemSetting.skinInfo = this.system.skin
if (this.systemSetting.sheetIndexStatusSwitch) {
this.$changeComponentShow(".tufuSelect", true);
} else {
this.$changeComponentShow(".tufuSelect", false);
}
},
methods: {
// 上传链接link
uploadFile(event) {
let files = event.target.files;
console.log("files", files);
if (files.length > 0) {
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
const element = files[i];
formData.append("files", element);
}
// 创建loading实例
const loading = this.$loading({
lock: true,
text: '上传中 0%',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
// 配置axios请求
this.$axios({
method: 'post',
url: getIP() + '/yjearth4.0/api/v1/linkFile/import',
data: formData,
headers: {
'token': getToken()
},
onUploadProgress: (progressEvent) => {
if (progressEvent.lengthComputable) {
const percentComplete = Math.round((progressEvent.loaded / progressEvent.total) * 100);
loading.text = `上传中 ${percentComplete}%`;
}
}
}).then(response => {
loading.close();
const res = response.data;
if (res.code == 0) {
this.$message.success("上传成功");
this.$sendChanel("linkFileData", res.data.list);
} else {
this.$message.error(res.message || "上传失败");
}
}).catch(error => {
loading.close();
this.$message.error("上传失败: " + error.message);
});
}
},
// 上传全景
uploadFile2(event) {
let files = event.target.files;
if (files.length > 0) {
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
const element = files[i];
formData.append("files", element);
}
// 创建loading实例
const loading = this.$loading({
lock: true,
text: '上传中 0%',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
// 配置axios请求
this.$axios({
method: 'post',
url: getIP() + '/yjearth4.0/api/v1/linkFile/import',
data: formData,
headers: {
'token': getToken()
},
onUploadProgress: (progressEvent) => {
if (progressEvent.lengthComputable) {
const percentComplete = Math.round((progressEvent.loaded / progressEvent.total) * 100);
loading.text = `上传中 ${percentComplete}%`;
}
}
}).then(response => {
loading.close();
const res = response.data;
if (res.code == 0) {
this.$message.success("上传成功");
this.$sendChanel("panoramaFileData", res.data.list);
} else {
this.$message.error(res.message || "上传失败");
}
}).catch(error => {
loading.close();
this.$message.error("上传失败: " + error.message);
});
}
},
// 导入链接link
importPath() {
document.getElementById("fileInputlink").click();
// this.$removeChanel("fileInputlink");
},
// 导入链接link
importPath2() {
document.getElementById("fileInputPanorama").click();
// this.$removeChanel("fileInputPanorama");
},
//新增态势0822
changeShow(key1, key2) {
this[key1] = !this[key1];
// this[key2]=!this[key2]
setTimeout(() => {
this[key2] = !this[key2];
}, 500);
},
// 创建地球
create() {
this.noSituation = !this.noSituation;
this.showBigData = true;
this.$nextTick(() => {
window.$createEarth();
});
},
//新增态势
closeSituation() {
//退出态势
this.noSituation = !this.noSituation;
this.showList = !this.showList;
this.$nextTick(() => {
window.$createEarth();
});
// 新增态势0910
remote.getCurrentWindow().setFullScreen(false);
// this.openEarth();
},
closeSituationEdit() {
// 新增态势0906
if (window.Earth1) {
window.draw && window.draw.end();
Array.from(ts_Map.values()).forEach((entity) => entity.remove());
ts_Map.clear();
window.Earth1.destroy();
window.Earth1 = null;
}
this.$refs.Deduction.stop();
this.editSituation = !this.editSituation;
this.eventsList = false;
this.showList = !this.showList;
// //新增态势0824
this.showElementBtn = "";
this.showCabinBtn = "";
this.showCabin = "";
this.showElement = "";
//
// this.eventBox = false;
this.$nextTick(() => {
this.$refs.situation.getList();
});
},
getRowKey(row) {
// 需要为每一行设置一个唯一标识这里假设每行的id是唯一的
return row.ID;
},
addResource() {
let ztreeObj = $.fn.zTree.getZTreeObj("treeDemos");
let nodes = ztreeObj.getSelectedNodes();
let p_id = 0;
if (nodes.length) {
p_id = nodeType[nodes[0].type].allowChildren
? nodes[0].id
: nodes[0].p_id;
}
let tilesetArr = [];
let allNodes = ztreeObj.transformToArray(ztreeObj.getNodes());
allNodes.forEach(
(item) => item.source_id && tilesetArr.push(item.source_id)
);
this.multipleSelection.forEach((item) => {
if (item.source_id && tilesetArr.includes(item.source_id)) {
console.log("已经添加过该资源");
} else {
let param = {};
param.p_id = p_id;
param.name = item.source_name;
param.tree_index = item.tree_index;
param.type = item.source_type;
param.source_id = item.source_id;
param.detail = {
layer_index: item.layer_index,
params: item.detail,
};
tilesetAdd(param, (res) => {
console.log("render数据资源");
this.dialogTableVisible = false;
let idKey = ztreeObj.setting.data.simpleData.idKey;
let parentNode = ztreeObj.getNodeByParam(idKey, param.p_id, null);
res.icon = cusNodeIcon(res);
res.children = null;
let newNodes = ztreeObj.addNodes(parentNode, [res]);
nodeType[res.type].render(res);
ztreeObj.updateNode(newNodes[0]);
});
}
});
},
fetchData() {
tilesetList({}, (res) => {
// console.log(res);
this.gisData = res.list.length ? res.list : [];
let ztreeObj = $.fn.zTree.getZTreeObj("treeDemos");
let nodes = ztreeObj.transformToArray(ztreeObj.getNodes());
let tilesetArr = [];
nodes.forEach(
(item) => item.source_id && tilesetArr.push(item.source_id)
);
console.log("tilesetArr", tilesetArr);
console.log(this.gisData);
setTimeout(() => {
for (let i = 0; i < this.gisData.length; i++) {
let item = this.gisData[i];
console.log(this.$refs.multipleTable.toggleRowSelection);
console.log(item);
console.log(tilesetArr.includes(item.source_id));
if (item.source_id && tilesetArr.includes(item.source_id)) {
this.$refs.multipleTable.toggleRowSelection(item, true);
}
}
}, 10);
});
},
handleSelectionChange(val) {
console.log(val);
this.multipleSelection = val;
},
openSituationEdit(plan) {
window.currentPlan = plan;
eventList({ plan_id: plan.ID || plan.plan_id }, (res) => {
console.log("eventList", res);
this.eventLists = res.list
this.eventsList = true;
window.TSTYOBJ = window.TSTY.init({
startTimestamp: plan.plan_create_time,
tasks: this.eventLists,
scales: { preMainIndex: 2 }
});
this.action = window.TSTYOBJ.initAction()
this.TSTYOBJ = window.TSTYOBJ
this.$nextTick(() => {
TSTYOBJ.store.init()
TSTYOBJ.renderLine(this.$nextTick)
TSTYOBJ.renderLabel({ left: 0 })
TSTYOBJ.store.updateTimeLineRightRest()
})
this.showList = !this.showList;
this.editSituation = !this.editSituation;
this.createEarth("earthContainers");
/*
console.log("eventList", res);
// obj.tasks = res.list;
let arr = [];
res.list.forEach((item) => {
arr.push(window.Store.databaseToTimeline(item));
});
obj.tasks = arr;
obj.startTimestamp = plan.plan_create_time;
window.Store.initData(obj);
// window.Clock = new TSTY.clock();
this.scales = Store.scales;
this.tasks = Store.tasks;
this.showList = !this.showList;
this.editSituation = !this.editSituation;
this.createEarth("earthContainers");
this.eventsList = true;
this.$nextTick(() => {
window.Store.setFullWidth();
});*/
});
},
removeEarth1() {
/* Array.from(_entityMap.values()).forEach(
(entity) => entity && entity.remove()
);*/
_entityMap.clear();
if (window.Earth1) {
window.Earth1.destroy();
window.Earth1 = null;
}
this.noSituation = !this.noSituation;
this.showList = !this.showList;
this.$nextTick(() => {
this.$refs.situation.getList();
});
},
changeState() {
this.State = !this.State;
let bottomMenuMove = [
"animate__fadeInLeftBig",
"animate__fadeOutLeftBig",
];
let leftMenuMove = ["animate__fadeInUpBig", "animate__fadeOutDownBig"];
let add = 1,
remove = 0;
let left_second = document.querySelector(".left_second");
if (!this.State) {
left_second.style.display = "none";
}
if (this.State) {
add = 0;
remove = 1;
}
$(".bottomMenu").removeClass(bottomMenuMove[remove]);
$(".bottomMenu").addClass(bottomMenuMove[add]);
$(".left").removeClass(leftMenuMove[remove]);
$(".left").addClass(leftMenuMove[add]);
},
tongbu() {
this.$refs.firstMenu.tongbu2D();
},
// videoStop(){
// this.$changeComponentShow('.videoStop', false)
// this.$sendElectronChanel('endRecoder')
// },
flyToView() {
console.log("2222222222flyToView");
console.log(111111, localStorage.getItem("defaultView"));
if (localStorage.getItem("defaultView"))
YJ.Global.flyTo(JSON.parse(localStorage.getItem("defaultView")));
},
closeEditor() {
this.$sendChanel("closeEditor");
this.$changeComponentShow("#modal", false);
this.richTextDialog.visible = false;
},
/* save() {
this.$sendChanel("saveRichText")
this.$sendChanel("closeEditor")
this.richTextDialog.visible = false
},*/
cancel() {
this.$changeComponentShow("#modal", false);
this.$sendChanel("closeEditor");
this.richTextDialog.visible = false;
},
//测试用
addMarker(option) {
let selectedNode = getSelectedNode(this.treeObj);
if (selectedNode) {
let DbOption = JSON.parse(JSON.stringify(option));
let source_id = this.$md5(new Date().getTime() + option.source_name);
DbOption.source_id = source_id;
DbOption.p_id = selectedNode.source_id;
let draw = new YJ.Draw[option.key]();
draw.start((err, params) => {
console.log(params);
let detailOption = {};
if (
Object.prototype.toString.call(params) === "[object Object]" &&
!params.hasOwnProperty("lng")
) {
detailOption = params;
} else {
detailOption = { position: params, name: option.source_name };
}
if (err) throw err;
//node上树node存数据库
let node = getNodeData(DbOption, detailOption);
console.log(DbOption);
addSource(node).then((res) => {
if ([0, 200].includes(res.code)) {
cusRenderNode(DbOption);
cusAddNodes(this.treeObj, selectedNode, [node]);
}
});
});
} else {
this.$message.warning("请选中一节点后操作");
}
},
/*langChange() {
this.$store.dispatch("changeLang", this.value)
this.$store.dispatch("changeIconSingleColor", "red")
console.log("lang", this.lang)
},*/
createEarth(domId) {
this.$nextTick(() => {
console.log("$nextTick");
if (YJ) {
window.Earth1 = new YJ.YJEarth(domId);
window.earth = window.Earth1;
YJ.Global.CesiumContainer(Earth1, { compass: false, legend: false });
YJ.Global.setGroundCover(true);
this.$refs.cabin.getSourceList();
window.Earth1.tabHide = ["属性信息"];
}
});
}
},
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.dashboard {
&-container {
width: 100vw;
height: 100vh;
position: fixed;
//海东1021
.goodSearch {
z-index: 999;
.contentBox {
border: 1.5px solid;
backdrop-filter: blur(2px);
background: linear-gradient(0deg, #00ffff33 0%, #00ffff00 100%),
rgba(0, 0, 0, 0.6);
width: 650px;
height: 400px;
position: absolute;
color: #fff;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-image: linear-gradient(to bottom,
rgb(0, 255, 255) 6.25%,
rgb(0, 200, 255) 100%) 1;
display: flex;
flex-direction: column;
justify-content: space-between;
.titleBox {
height: 50px;
.title {
line-height: 50px;
padding-left: 15px;
font-size: 20px;
text-shadow: 0px 0px 9px rgba(20, 118, 255, 1);
}
.closeBox {
right: 0;
position: absolute;
display: inline-block;
width: 35px;
height: 33px;
border-radius: 0 0 0 90%;
background: #00ffff;
&>span {
font-size: 22px;
position: absolute;
right: 5px;
cursor: pointer;
}
}
}
#goodSearchEchart {
flex: auto;
}
.hr {
width: 89%;
margin: 0 auto;
border-bottom: 1px solid rgba(204, 204, 204, 0.2);
}
&:after {
display: block;
position: absolute;
content: "";
left: -1.5px;
top: -6px;
width: 70.5px;
height: 6px;
opacity: 1;
background: rgba(0, 255, 255, 1);
clip-path: polygon(0 0, calc(100% - 3px) 0, 100% 6px, 0 6px);
}
}
}
//height: calc(100vh - 50px);
//margin: 30px;
#earth {
display: flex;
width: 100vw;
height: 100vh;
}
#earths {
width: 100vw;
height: 100vh;
display: none;
}
.halfEarth {
display: block !important;
width: 50vw !important;
}
.zIndex1 {
z-index: -1;
}
.selectedEarthCss {
//border: 1px solid red;
padding: 2px;
}
.svg-container {
display: inline-block;
//border: 1px solid red;
}
.bottomMenuBox,
.leftBox {
overflow: hidden;
}
.selectImgBox,
.profileAnalysisBox,
.cutFillBox,
.inundationAnalysisBox,
.flyToLocationBox,
.tongbu,
.modelSelectBox,
.bimInfoBox,
.echartsTotalBox,
.modelBox,
.vrModelBox,
.scene,
.editor,
.junbiaoBox,
.textModelBox,
.junbiao3dBox,
.videoStop,
.adddirectoryBox,
.excelSetBox,
.tufuSelect,
.tacticalBox,
.ModelSetBox,
.modelBoxg {
display: none;
}
.selectImgBox {
z-index: 9999999;
}
.ModelSetBox{
z-index: 10000;
}
.scene {
//width: 5vw;
//height: 5vw;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
//border: 1px solid red;
background: #808080;
}
.logo {
width: 5vw;
height: 5vw;
bottom: 10px;
left: 20px;
img {
width: 100%;
height: 100%;
}
}
.richTextDialogBox {
position: absolute;
//border: 1px solid red;
width: 1090px;
height: 600px;
z-index: 2003;
}
#modal {
position: fixed;
z-index: 99;
background-color: rgba(0, 0, 0, 0.5);
width: 100vw;
height: 100vh;
display: none;
}
::v-deep .el-dialog {
height: 600px;
.el-dialog__body {
padding: 0 !important;
}
}
}
&-text {
font-size: 30px;
line-height: 46px;
}
}
</style>
<style lang="scss">
.dashboard-container {
//新增态势0830
.cabinShowBtn {
z-index: 9999;
//display: none;
position: absolute;
top: calc(50% - 225px);
.switch-node-outer {
position: relative;
background: #0ff;
clip-path: polygon(0% calc(var(--width) + var(--innerBorder)),
100% 0%,
100% 100%,
0% calc(100% - var(--width) - var(--innerBorder)));
padding: calc(var(--innerBorder) * 1.42) var(--innerBorder);
.switch-node-inner {
clip-path: polygon(0% var(--width),
100% var(--innerBorder),
100% calc(100% - var(--innerBorder)),
0% calc(100% - var(--width)));
//clip-path: polygon(0% var(--innerBorder), 100% var(--width), 100% calc(100% - 30px), 0% calc(100% - 3px));
cursor: pointer;
writing-mode: vertical-lr;
padding: calc(var(--width) * 1.1) 0;
width: var(--width);
line-height: var(--width);
background: var(--bg-color);
color: #0ff;
letter-spacing: 2.5px;
/* border: 1.5px solid rgba(0, 255, 255, 1); */
position: relative;
box-sizing: border-box;
}
}
}
.timeline-container {
position: absolute;
width: 100vw;
//height: 230px;
box-sizing: border-box;
z-index: 9;
bottom: 0;
.area {
position: relative;
}
}
//新增态势0822
.elementShowBtn {
z-index: 9999;
//display: none;
position: absolute;
//新增态势0827
//left: 0%;
top: calc(50% - 225px);
/*transform: translateY(-50%);*/
.switch-node-outer {
position: relative;
//width: var(--width);
clip-path: polygon(0% 0%,
100% calc(var(--width) + var(--innerBorder)),
100% calc(100% - var(--width) - var(--innerBorder)),
0% 100%);
//clip-path: polygon(0% 0%, 100% 33px, 100% calc(100% - 33px), 0% 100%);
padding: calc(var(--innerBorder) * 1.42) var(--innerBorder);
//padding: 4.6px 3px;
background: #0ff;
.switch-node-inner {
clip-path: polygon(0% var(--innerBorder),
100% var(--width),
100% calc(100% - var(--width)),
0% calc(100% - var(--innerBorder)));
//clip-path: polygon(0% var(--innerBorder), 100% var(--width), 100% calc(100% - 30px), 0% calc(100% - 3px));
cursor: pointer;
writing-mode: vertical-lr;
padding: calc(var(--width) * 1.1) 0;
width: var(--width);
line-height: var(--width);
background: var(--bg-color);
color: #0ff;
letter-spacing: 2.5px;
/* border: 1.5px solid rgba(0, 255, 255, 1); */
position: relative;
box-sizing: border-box;
}
}
}
.cabinShowBtn {
right: 0%;
}
//新增态势
&>.content {
background: url("../../assets/img/bkgif@3x.gif") no-repeat;
background-size: 100% 100%;
width: 100vw;
height: 100vh !important;
position: absolute;
z-index: 9;
}
.icon-top {
//width: 100%;
//height: 100%;
top: 0;
left: 0;
z-index: 99;
position: absolute;
width: vw(1920) !important;
//height: 8.888vh;
height: vh(96) !important;
//background: linear-gradient(180deg, rgba(0, 33, 36, 1) 0%, rgba(0, 38, 41, 1) 25.47%, rgba(0, 0, 0, 0) 100%);
}
.timeline-content {
position: absolute;
width: 100vw;
height: vh(295);
box-sizing: border-box;
z-index: 9;
bottom: 0;
background: url("../../assets/img/timeLinePanelBg.png") no-repeat 50% 100%;
background-size: cover;
.area {
position: relative;
}
}
.icon-tuichu {
position: absolute;
top: vh(5);
right: vw(5);
z-index: 999;
width: vw(24) !important;
height: vh(24) !important;
cursor: pointer;
}
.icon-tuichudenglu {
position: absolute;
z-index: 999;
width: vw(26);
height: vh(26);
right: vw(8);
top: vh(8);
}
.titles {
left: 50%;
transform: translateX(-50%);
font-size: px2font(40);
top: vh(19);
line-height: px2font(50);
font-family: "alimamashuheiti";
z-index: 999;
position: absolute;
color: #fff;
}
.elementBox,
.cabinBox {
width: vw(343);
height: vh(662);
position: absolute;
z-index: 9999;
top: vh(145);
border: vw(1.5) solid rgba(0, 255, 255, 1);
background: linear-gradient(180deg,
rgba(0, 255, 255, 0.2) 0%,
rgba(0, 255, 255, 0) 100%),
rgba(0, 0, 0, 0.5);
color: #fff;
}
.eventEditor {
border: 1px solid;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 999;
color: #fff;
background: rgba(0, 63, 63, 1);
overflow-y: auto;
font-size: px2font(16);
}
.elementBox {
left: vw(30);
}
.cabinBox {
right: vw(30);
}
//新增态势结束
.el-dialog {
height: 600px;
display: flex;
flex-direction: column;
.el-dialog__body {
padding-top: 0 !important;
padding-bottom: 0 !important;
flex: auto;
display: flex;
flex-direction: column;
#richTextEditor {
flex: auto;
display: flex;
flex-direction: column;
.w-e-text-container {
flex: auto;
}
}
}
}
.transformDrawerContent {
padding-left: 15px;
.btn {
margin-top: 5px;
}
.transformDrawerItem {
padding-left: 10px;
font-size: 12px;
display: flex;
align-items: center;
margin-top: 5px;
>span {
display: block;
width: 115px;
/* align-content: center; */
}
}
}
.fightingDataStyleBox {
display: none;
}
.movie {
top: 0.1vh;
left: 0;
width: 98vw;
// display: none;
//height: 240px !important;
}
}
</style>