<template> <div class="bim-setting-page app-container2"> <div id="bimSettingContainer"></div> <model-floor-tree ref="modelFloorTree" @change="doChange" :projectMessage="models" v-if="showTree"></model-floor-tree> <div class="footer-box" v-if="showModels.length>0"> <a-tooltip placement="top" title="主视图"> <div class="footer-btn" @click="doMenu(0)" :class="activeMenu == 0 ? 'is-active' : ''"> <svg-icon icon-class="home" /> </div> </a-tooltip> <a-tooltip placement="top" title="第一人称漫游"> <div class="footer-btn" @click="doMenu(1)" :class="activeMenu == 1 ? 'is-active' : ''"> <svg-icon icon-class="roam" /> </div> </a-tooltip> <a-tooltip placement="top" title="自定义视点漫游"> <div class="footer-btn" @click="doMenu(2)" :class="activeMenu == 2 ? 'is-active' : ''"> <svg-icon icon-class="view" /> </div> </a-tooltip> <a-tooltip placement="top" title="视点管理"> <div class="footer-btn" @click="doMenu(3)" :class="activeMenu == 3 ? 'is-active' : ''"> <svg-icon icon-class="camera" /> </div> </a-tooltip> <a-tooltip placement="top" title="构件隐藏"> <div class="footer-btn" @click="doMenu(4)" :class="activeMenu == 4 ? 'is-active' : ''"> <svg-icon icon-class="hide" /> </div> </a-tooltip> </div> <div class="bim-setting-tools" v-show="activeMenu>0"> <div class="tools-title">{{param.title }}</div> <el-icon @click="doToolsClose" style="color:#fff" class="tools-close"> <Close /> </el-icon> <person-roaming v-if="activeMenu===1" ref="personRoaming" :me="this"></person-roaming> </div> </div> </template> <script> import useUserStore from '@/store/modules/user' import { listBimModel } from '@/api/bim/bimModel' import ModelFloorTree from './ModelFloorTree.vue' import PersonRoaming from './PersonRoaming.vue' export default { components: { ModelFloorTree, PersonRoaming, }, data() { return { userStore: {}, isAdmin: false, projects: [], currentPrjId: null, currentComId: null, subDepts: [], models: [], isMobile: false, showTree: false, initSuccess: false, activeMenu: 0, showModels: [], param: {}, } }, beforeUnmount() { document.body.classList.remove('is-sapi') }, mounted() { document.body.classList.add('is-sapi') this.userStore = useUserStore() this.isAdmin = this.userStore.isAdmin this.currentPrjId = this.userStore.currentPrjId this.currentComId = this.userStore.currentComId this.initLoadModel() this.initEngine() }, methods: { doChange() { this.showModels = api.m_model.keys().toArray() console.log('--change--') }, resetScene() { if (this.$refs.personRoaming) { this.$refs.personRoaming.isRoaming = false } api.Camera.stopImmersiveRoam() api.Model.location(api.m_model.keys().toArray()[0]) api.Plugin.deleteMiniMap() }, doMenu(n) { if (n == this.activeMenu) { if (n == 0) { this.resetScene() } return } this.activeMenu = n if (n == 0) { this.resetScene() } if (n == 1) { this.param.title = '第一人称漫游' } }, NotificationPopup(parameter) { this.param = parameter // const that = this // that.$notification.open({ // key: 'EngineKey', // message: parameter.title, // description: parameter.description, // class: 'engine-notification ' + (parameter.tips ? parameter.tips : ''), // duration: null, // placement: parameter.placement ? parameter.placement : that.isMobile ? 'bottomLeft' : 'topRight', // style: { // top: parameter.top ? parameter.top : '50px', // width: parameter.width ? parameter.width : '360px', // marginRight: `20px`, // borderRadius: '0px', // }, // onClose: this.notifClose, // }) }, doToolsClose() { this.activeMenu = -1 }, notifClose() { this.activeMenu = -1 }, initEngine() { window.api = new SAPI( { serverIP: window.config.serverIP, //服务ip地址 port: window.config.port, //HTTP端口 useHttps: window.config.useHttps, //使用Https container: 'bimSettingContainer', //[必须]容器id secretKey: window.config.secretKey, openEarth: window.config.openEarth, //[可选]开启Gis场景 bgColor: window.config.bgColor, //[可选]bim场景背景色, 传值即为纯色天空盒 tintColor: window.config.tintColor, //[可选]osgb单体化颜色 sceneTime: window.config.sceneTime, //[可选]分别为当前时间、日出时间、日落时间 cadMode: window.config.cadMode, // 是否是Cad图纸预览模式 }, () => { this.initSuccess = true console.log('初始化成功') let mapOptions = { imgs: { // 六面图片 top: './img/top.png', bottom: './img/under.png', east: './img/east.png', south: './img/south.png', west: './img/west.png', north: './img/north.png', }, offset: { // 屏幕坐标偏移 corner: GLENavigationCube.RightTop, x: 25, y: 20, }, cube: { hoverColor: '#7193dc', // 立方导航快鼠标移过显示颜色 size: 75, // 导航立方尺寸 hotPointSize: 7, // 导航立方棱角热点区域尺寸 cubeTextColor: '#4c4c4ccc', // cube 各个面文字颜色 cubeStrokeColor: '#374769cc', // cube 各个面边框颜色 cubeFillColor: '#374769cc', // cube 各个面填充颜色 }, zoomRatios: 1, // 缩放倍率 show: true, // 是否显示 showAxes: true, // 是否显示XYZ轴线 } api.Plugin.initNavCube(mapOptions) } ) }, initLoadModel() { listBimModel({ pageNum: 1, pageSize: 10, comId: this.currentComId, projectId: this.currentPrjId, }).then((d) => { this.models = d.rows || [] if (this.models.length == 0) { this.$model.msgError('暂无模型,请先关联模型') } else { this.showTree = true } }) }, }, } </script> <style lang="scss"> .bim-setting-page { position: relative; height: 100%; #bimSettingContainer { height: 100%; } .footer-box { position: absolute; bottom: 10vh; left: 50%; margin-left: -75px; background: #274754; border-radius: 4px; .footer-btn { display: inline-flex; width: 40px; height: 40px; justify-content: center; align-items: center; cursor: pointer; svg { width: 20px; height: 20px; fill: #fff; } &:hover { background: #408edb97; } &.is-active { svg { fill: rgb(0, 255, 174); } } } } .bim-setting-tools { position: absolute; top: 10px; right: 10px; background: rgba(255, 255, 255, 0.5); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); .tools-title { padding: 10px; color: #114c5f; size: 24px; } .tools-close { position: absolute; top: 10px; right: 10px; cursor: pointer; } } } body.is-sapi { .app-main { height: calc(100vh - 84px); } } </style>