main
			
			
		
		
							parent
							
								
									9b78757a12
								
							
						
					
					
						commit
						2dce720b2c
					
				| 
						 | 
				
			
			@ -0,0 +1,149 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div class="deviceInfoDialog">
 | 
			
		||||
        <div class="left-div">
 | 
			
		||||
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="right-div">
 | 
			
		||||
            <div class="top-div">
 | 
			
		||||
                <div :id="'echartDiv' + index" class="echartDiv100" v-for="(item, index) of deviceList" :key="index"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="bottom-div">
 | 
			
		||||
                <el-table :data="tableData" border style="width: 100%" height="450">
 | 
			
		||||
                    <el-table-column label="序号" width="60" type="index" align="center"></el-table-column>
 | 
			
		||||
                    <el-table-column prop="name" label="名称" align="center"/>
 | 
			
		||||
                    <el-table-column prop="num" label="编码" align="center"/>
 | 
			
		||||
                    <el-table-column prop="type" label="类型" align="center"/>
 | 
			
		||||
                    <el-table-column label="操作" align="center">
 | 
			
		||||
                        <template #default="scope">
 | 
			
		||||
                            <el-button link type="primary" @click="handleClearCacheName(scope.row)">查看</el-button>
 | 
			
		||||
                        </template>
 | 
			
		||||
                    </el-table-column>
 | 
			
		||||
                </el-table>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
const data = reactive({
 | 
			
		||||
    deviceList: [
 | 
			
		||||
        {
 | 
			
		||||
            name: '设备A',
 | 
			
		||||
            num: 36,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '设备B',
 | 
			
		||||
            num: 36,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '设备C',
 | 
			
		||||
            num: 36,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '设备D',
 | 
			
		||||
            num: 36,
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    tableData: [
 | 
			
		||||
        {
 | 
			
		||||
            name: '立仓',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '粉碎机',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '摄像头',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '空调机组',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '立仓',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '立仓',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '粉碎机',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '摄像头',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '空调机组',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: '立仓',
 | 
			
		||||
            num: 'EQ001',
 | 
			
		||||
            type: '生产设备'
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
});
 | 
			
		||||
const { deviceList, tableData } = toRefs(data);
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
    deviceList.value.forEach(ele => {
 | 
			
		||||
        getCharts(ele);
 | 
			
		||||
    })
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const getCharts = (data) => {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.deviceInfoDialog {
 | 
			
		||||
    height: 600px;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
    .left-div {
 | 
			
		||||
        width: 20%;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        border: 1px solid #3cbfdf;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .right-div {
 | 
			
		||||
        width: 79%;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        // border: 1px solid #3cbfdf;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
        .top-div {
 | 
			
		||||
            height: 25%;
 | 
			
		||||
            border: 1px solid #3cbfdf;
 | 
			
		||||
            display: flex;
 | 
			
		||||
            justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
            >div {
 | 
			
		||||
                width: 22%;
 | 
			
		||||
                height: 100%;
 | 
			
		||||
                border: 1px solid #3cbfdf;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .bottom-div {
 | 
			
		||||
            height: 74%;
 | 
			
		||||
            border: 1px solid #3cbfdf;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -3,13 +3,17 @@
 | 
			
		|||
        <TopDiv title="资产信息"></TopDiv>
 | 
			
		||||
        <dv-border-box-10 backgroundColor="#00174b" :color="['#3cbfdf', '#3cbfdf']">
 | 
			
		||||
        </dv-border-box-10>
 | 
			
		||||
        <div class="box-button" @click="openDialog">
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
import TopDiv from "./TopDiv.vue";
 | 
			
		||||
import bimStore from '@/store/modules/bim';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const emit = defineEmits(['openDialog'])
 | 
			
		||||
const openDialog = () => {
 | 
			
		||||
    emit('openDialog', openDialog)
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang='scss' scoped>
 | 
			
		||||
.deviceDiv {
 | 
			
		||||
| 
						 | 
				
			
			@ -22,5 +26,16 @@ import bimStore from '@/store/modules/bim';
 | 
			
		|||
    flex-direction: column;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    color: #3cbfdf;
 | 
			
		||||
    .box-button {
 | 
			
		||||
        width:20px;
 | 
			
		||||
        height:20px;
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        bottom: 10px;
 | 
			
		||||
        right: 10px;
 | 
			
		||||
        border: 2px solid #3cbfdf;
 | 
			
		||||
        border-radius: 5px;
 | 
			
		||||
        cursor: pointer;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -108,20 +108,27 @@ const renderScene = () => {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
const modelMouseClick = (event) => {
 | 
			
		||||
  mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
 | 
			
		||||
  mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
 | 
			
		||||
  raycaster.setFromCamera(mouse, camera);
 | 
			
		||||
  const intersects = raycaster.intersectObject(scene, true);
 | 
			
		||||
  if (intersects.length > 0) {
 | 
			
		||||
    console.log(intersects[0].object);
 | 
			
		||||
    outlineObj(intersects[0].object);
 | 
			
		||||
  }
 | 
			
		||||
    if (event.button != 0) return;
 | 
			
		||||
    const mouse = new THREE.Vector2();
 | 
			
		||||
    mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
 | 
			
		||||
    mouse.y = - (event.clientY / window.innerHeight) * 2 + 1;
 | 
			
		||||
    const raycaster = new THREE.Raycaster();
 | 
			
		||||
    raycaster.setFromCamera(mouse, camera);
 | 
			
		||||
    const intersected = raycaster.intersectObject(scene, true)
 | 
			
		||||
    if (intersected.length) {
 | 
			
		||||
        // 其他材质恢复原材质,待研究
 | 
			
		||||
        intersected.forEach(obj => {
 | 
			
		||||
            
 | 
			
		||||
            obj.object.material.transparent = true;
 | 
			
		||||
            let color = new THREE.Color(obj.object.material.color);
 | 
			
		||||
            console.log(123,color);
 | 
			
		||||
            obj.object.material.color.set(color);
 | 
			
		||||
        })
 | 
			
		||||
        intersected[0].object.material.color.set(0x66ff00);
 | 
			
		||||
        renderer.render(scene, camera);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//高亮
 | 
			
		||||
const outlineObj = (object) => {
 | 
			
		||||
    object.material.color.set(0x66ff00);
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang='scss' scoped>
 | 
			
		||||
#three {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
    <!-- 建筑信息 -->
 | 
			
		||||
    <BuildInfo v-if="activateIndex == 0"></BuildInfo>
 | 
			
		||||
    <!-- 资产信息 -->
 | 
			
		||||
    <DevicePie v-if="activateIndex == 0"></DevicePie>
 | 
			
		||||
    <DevicePie v-if="activateIndex == 0" @openDialog="openDialog"></DevicePie>
 | 
			
		||||
    <!-- 左侧资产菜单 -->
 | 
			
		||||
    <DeviceTree v-if="activateIndex == 1" @handleNodeClick="handleDeviceClick"></DeviceTree>
 | 
			
		||||
    <!-- 资产信息 -->
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,15 @@
 | 
			
		|||
    <EquipmentInfo v-if="activateIndex == 2"></EquipmentInfo>
 | 
			
		||||
    <!-- 实时数据 -->
 | 
			
		||||
    <RealData v-if="activateIndex == 2"></RealData>
 | 
			
		||||
    <!-- 资产信息弹出框 -->
 | 
			
		||||
    <el-dialog
 | 
			
		||||
      v-model="dialogVisible"
 | 
			
		||||
      title="资产信息"
 | 
			
		||||
      width="1200px"
 | 
			
		||||
      append-to-body
 | 
			
		||||
    >
 | 
			
		||||
      <DeviceInfoDialog></DeviceInfoDialog>
 | 
			
		||||
    </el-dialog>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup name="bimHome">
 | 
			
		||||
| 
						 | 
				
			
			@ -36,12 +45,14 @@ import ApplicationTree from './components/ApplicationTree.vue';
 | 
			
		|||
import EquipmentInfo from './components/EquipmentInfo.vue';
 | 
			
		||||
import RealData from './components/RealData.vue';
 | 
			
		||||
import ThreeView from './components/ThreeView.vue';
 | 
			
		||||
import DeviceInfoDialog from './components/DeviceInfoDialog.vue';
 | 
			
		||||
import bimStore from '@/store/modules/bim';
 | 
			
		||||
const data = reactive({
 | 
			
		||||
  sceneUrl: '/jz/glb/jz.gltf'
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const { sceneUrl } = toRefs(data);
 | 
			
		||||
const dialogVisible = ref(false);
 | 
			
		||||
 | 
			
		||||
const activateIndex = computed(() =>
 | 
			
		||||
  bimStore().activateIndex
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +84,10 @@ const handleApplicationClick = (value) => {
 | 
			
		|||
const changeMenu = () => {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const openDialog = () => {
 | 
			
		||||
  dialogVisible.value = true;
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang='scss' scoped>
 | 
			
		||||
.app-container {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue