监测检测一体化项目实践——工程概况功能规划

发布于:2025-07-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

工程概况

功能规划

左侧是功能导航栏,分别有两个功能,工程简介、版权信息。点击后查看对应内容。

右侧大片区域放的三维模型。

工程简介

本质上就是一个word文档查看器,word文档中介绍工程内容

三维模型

三维BIM模型,模型支持交互。

版权信息

显示系统的版权信息

示例代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>工程BIM展示系统</title>
  <script src="https://cdn.tailwindcss.com"></script>
  <link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/three@0.160.0/examples/js/controls/OrbitControls.js"></script>
  
  <!-- 配置Tailwind自定义主题 -->
  <script>
    tailwind.config = {
      theme: {
        extend: {
          colors: {
            primary: '#0ea5e9', // 主色调:科技蓝
            secondary: '#10b981', // 辅助色:科技绿
            accent: '#f59e0b', // 强调色:科技橙
            dark: '#0f172a', // 深色背景
            darker: '#020617', // 更深色背景
            light: '#e2e8f0', // 浅色文本
          },
          fontFamily: {
            tech: ['Inter', 'system-ui', 'sans-serif'],
          },
        },
      }
    }
  </script>
  
  <style type="text/tailwindcss">
    @layer utilities {
      .content-auto {
        content-visibility: auto;
      }
      .glass-effect {
        backdrop-filter: blur(10px);
        background-color: rgba(15, 23, 42, 0.7);
      }
      .neon-border {
        box-shadow: 0 0 5px theme('colors.primary'), 
                    0 0 10px theme('colors.primary/50'), 
                    0 0 15px theme('colors.primary/30');
      }
      .pulse-animation {
        animation: pulse 2s infinite;
      }
      @keyframes pulse {
        0%, 100% {
          opacity: 1;
        }
        50% {
          opacity: 0.7;
        }
      }
      .scrollbar-hide::-webkit-scrollbar {
        display: none;
      }
      .scrollbar-hide {
        -ms-overflow-style: none;
        scrollbar-width: none;
      }
    }
  </style>
</head>
<body class="font-tech bg-darker text-light min-h-screen overflow-hidden">
  <!-- 顶部状态栏 -->
  <div class="h-6 bg-gradient-to-r from-primary to-secondary glass-effect flex items-center px-4">
    <div class="flex items-center space-x-2">
      <div class="w-2 h-2 rounded-full bg-green-500 animate-pulse"></div>
      <span class="text-xs">系统运行中</span>
    </div>
    <div class="ml-auto flex items-center space-x-4">
      <span class="text-xs" id="current-date">2025年07月03日</span>
      <span class="text-xs" id="current-time">14:30:00</span>
    </div>
  </div>

  <div class="flex h-[calc(100vh-30px)]">
    <!-- 左侧导航栏 -->
    <aside class="w-64 h-full bg-dark border-r border-primary/20 flex flex-col transition-all duration-300 ease-in-out z-10">
      <!-- 系统logo和标题 -->
      <div class="p-4 border-b border-primary/20 flex items-center space-x-3">
        <div class="w-10 h-10 rounded-lg bg-primary/20 flex items-center justify-center neon-border">
          <i class="fa fa-cube text-primary text-xl"></i>
        </div>
        <div>
          <h1 class="text-lg font-bold text-primary">工程BIM系统</h1>
          <p class="text-xs text-light/60">v1.0.0</p>
        </div>
      </div>
      
      <!-- 导航菜单 -->
      <nav class="flex-1 p-4 overflow-y-auto scrollbar-hide">
        <ul class="space-y-1">
          <li>
            <a href="#project-intro" class="nav-item flex items-center space-x-3 p-3 rounded-lg bg-primary/10 text-primary border-l-4 border-primary">
              <i class="fa fa-file-text-o text-lg"></i>
              <span>工程简介</span>
            </a>
          </li>
          <li>
            <a href="#3d-model" class="nav-item flex items-center space-x-3 p-3 rounded-lg hover:bg-primary/10 transition-colors duration-300 text-light">
              <i class="fa fa-cubes text-lg"></i>
              <span>三维模型</span>
            </a>
          </li>
          <li>
            <a href="#copyright" class="nav-item flex items-center space-x-3 p-3 rounded-lg hover:bg-primary/10 transition-colors duration-300 text-light">
              <i class="fa fa-copyright text-lg"></i>
              <span>版权信息</span>
            </a>
          </li>
        </ul>
        
        <!-- 额外功能 -->
        <div class="mt-8 pt-4 border-t border-primary/20">
          <h3 class="text-xs uppercase text-light/60 mb-3 px-2">系统功能</h3>
          <ul class="space-y-1">
            <li>
              <a href="#" class="flex items-center space-x-3 p-2 rounded-lg hover:bg-primary/10 transition-colors duration-300 text-light/80 text-sm">
                <i class="fa fa-search"></i>
                <span>模型搜索</span>
              </a>
            </li>
            <li>
              <a href="#" class="flex items-center space-x-3 p-2 rounded-lg hover:bg-primary/10 transition-colors duration-300 text-light/80 text-sm">
                <i class="fa fa-sliders"></i>
                <span>视图设置</span>
              </a>
            </li>
            <li>
              <a href="#" class="flex items-center space-x-3 p-2 rounded-lg hover:bg-primary/10 transition-colors duration-300 text-light/80 text-sm">
                <i class="fa fa-history"></i>
                <span>版本记录</span>
              </a>
            </li>
          </ul>
        </div>
      </nav>
      
      <!-- 底部信息 -->
      <div class="p-4 border-t border-primary/20 text-xs text-light/50">
        <p>当前用户: <span class="text-light">管理员</span></p>
        <p class="mt-1">上次登录: 2025-07-02 09:15</p>
      </div>
    </aside>

    <!-- 右侧内容区域 -->
    <main class="flex-1 h-full overflow-hidden relative">
      <!-- 内容切换指示器 -->
      <div class="absolute top-4 left-64 transform -translate-x-1/2 z-20">
        <div class="w-3 h-3 rounded-full bg-primary animate-pulse"></div>
      </div>
      
      <!-- 工程简介内容 -->
      <section id="project-intro" class="content-section absolute inset-0 bg-dark/80 glass-effect p-6 overflow-y-auto">
        <div class="max-w-4xl mx-auto">
          <div class="flex items-center justify-between mb-6">
            <h2 class="text-2xl font-bold text-primary flex items-center">
              <i class="fa fa-file-text-o mr-2"></i>工程概况
            </h2>
            <div class="flex space-x-2">
              <button class="p-2 rounded-lg hover:bg-primary/20 transition-colors">
                <i class="fa fa-print text-light/70"></i>
              </button>
              <button class="p-2 rounded-lg hover:bg-primary/20 transition-colors">
                <i class="fa fa-download text-light/70"></i>
              </button>
            </div>
          </div>
          
          <div class="bg-darker p-6 rounded-lg border border-primary/20 shadow-lg">
            <!-- Word文档模拟内容 -->
            <div class="prose prose-invert max-w-none space-y-6">
              <h3 class="text-xl font-semibold text-primary">XX科技园区建设项目</h3>
              <p>本项目位于城市新中心区,总占地面积约120亩,总建筑面积约25万平方米,是集科研、办公、商业、配套服务于一体的综合性科技园区。项目旨在打造一个现代化、智能化、生态化的创新科技产业基地。</p>
              
              <h4 class="text-lg font-medium text-secondary">项目概况</h4>
              <p>项目由8栋科研办公楼、2栋配套服务楼和1栋商业中心组成,其中最高建筑高度为80米。建筑设计采用现代简约风格,融入绿色建筑理念,预计达到国家绿色建筑二星级标准。</p>
              
              <h4 class="text-lg font-medium text-secondary">技术指标</h4>
              <ul class="list-disc pl-5 space-y-1">
                <li>总用地面积:80,000㎡</li>
                <li>总建筑面积:250,000㎡</li>
                <li>容积率:2.8</li>
                <li>建筑密度:25%</li>
                <li>绿化率:35%</li>
                <li>停车位:1,800个</li>
              </ul>
              
              <h4 class="text-lg font-medium text-secondary">项目周期</h4>
              <p>项目计划于2025年9月正式开工,建设周期为24个月,预计2027年9月竣工交付。项目采用BIM技术进行全生命周期管理,确保工程质量和进度可控。</p>
              
              <div class="bg-primary/5 p-4 rounded-lg border border-primary/10">
                <h4 class="text-lg font-medium text-primary flex items-center">
                  <i class="fa fa-info-circle mr-2"></i>BIM技术应用
                </h4>
                <p>本项目全面应用BIM技术,实现从设计、施工到运维的全生命周期管理。通过BIM模型,各参与方可以实现协同设计、施工模拟、进度管理、成本控制等功能,有效提高项目管理效率和工程质量。</p>
              </div>
            </div>
          </div>
        </div>
      </section>
      
      <!-- 三维模型内容 -->
      <section id="3d-model" class="content-section absolute inset-0 hidden">
        <div class="h-full w-full bg-darker">
          <!-- 三维模型容器 -->
          <div id="model-container" class="h-full w-full"></div>
          
          <!-- 模型控制栏 -->
          <div class="absolute bottom-4 right-4 bg-dark/80 glass-effect p-3 rounded-lg border border-primary/20 z-10">
            <div class="flex space-x-2">
              <button id="rotate-btn" class="p-2 rounded-lg bg-primary/20 text-primary transition-colors" title="旋转">
                <i class="fa fa-arrows"></i>
              </button>
              <button id="zoom-btn" class="p-2 rounded-lg hover:bg-primary/20 transition-colors" title="缩放">
                <i class="fa fa-search-plus"></i>
              </button>
              <button id="pan-btn" class="p-2 rounded-lg hover:bg-primary/20 transition-colors" title="平移">
                <i class="fa fa-move"></i>
              </button>
              <button id="view-btn" class="p-2 rounded-lg hover:bg-primary/20 transition-colors" title="视图">
                <i class="fa fa-eye"></i>
              </button>
              <button id="layer-btn" class="p-2 rounded-lg hover:bg-primary/20 transition-colors" title="图层">
                <i class="fa fa-th"></i>
              </button>
            </div>
          </div>
          
          <!-- 模型信息面板 -->
          <div class="absolute top-4 left-4 bg-dark/80 glass-effect p-4 rounded-lg border border-primary/20 w-64 z-10">
            <h3 class="text-lg font-semibold text-primary mb-3 flex items-center">
              <i class="fa fa-cubes mr-2"></i>模型信息
            </h3>
            <div class="space-y-2 text-sm">
              <div class="flex justify-between">
                <span class="text-light/70">模型版本:</span>
                <span>v2.3.5</span>
              </div>
              <div class="flex justify-between">
                <span class="text-light/70">构件数量:</span>
                <span>12,845</span>
              </div>
              <div class="flex justify-between">
                <span class="text-light/70">更新时间:</span>
                <span>2025-07-01</span>
              </div>
              <div class="flex justify-between">
                <span class="text-light/70">加载状态:</span>
                <span class="text-secondary">已加载</span>
              </div>
            </div>
          </div>
        </div>
      </section>
      
      <!-- 版权信息内容 -->
      <section id="copyright" class="content-section absolute inset-0 hidden bg-dark/80 glass-effect p-8 flex flex-col items-center justify-center">
        <div class="max-w-2xl w-full text-center">
          <div class="w-20 h-20 rounded-full bg-primary/20 flex items-center justify-center mx-auto mb-6 neon-border">
            <i class="fa fa-copyright text-primary text-3xl"></i>
          </div>
          
          <h2 class="text-2xl font-bold text-primary mb-4">工程BIM展示系统</h2>
          <p class="text-light/70 mb-6">
            本系统为XX工程建设有限公司专属工程管理平台,采用先进的BIM技术实现工程全生命周期管理。
          </p>
          
          <div class="border-t border-primary/20 pt-6 mt-6">
            <p class="text-sm text-light/50 mb-2">© 2025 XX工程建设有限公司 版权所有</p>
            <p class="text-sm text-light/50">
              地址:XX市XX区XX路XX号  电话:010-12345678  邮箱:info@xxx.com
            </p>
            <p class="text-sm text-light/50 mt-2">
              备案号:京ICP备12345678号-1
            </p>
          </div>
          
          <div class="mt-8">
            <img src="https://picsum.photos/200/80" alt="公司标志" class="h-10 object-contain">
          </div>
        </div>
      </section>
    </main>
  </div>

  <script>
    // 日期时间显示
    function updateDateTime() {
      const now = new Date();
      const date = now.toLocaleDateString('zh-CN');
      const time = now.toLocaleTimeString('zh-CN');
      document.getElementById('current-date').textContent = date;
      document.getElementById('current-time').textContent = time;
    }
    updateDateTime();
    setInterval(updateDateTime, 1000);
    
    // 导航菜单切换
    const navItems = document.querySelectorAll('.nav-item');
    const contentSections = document.querySelectorAll('.content-section');
    
    navItems.forEach((item, index) => {
      item.addEventListener('click', () => {
        // 移除所有激活状态
        navItems.forEach(i => {
          i.classList.remove('bg-primary/10', 'text-primary', 'border-l-4', 'border-primary');
          i.classList.add('text-light');
        });
        
        // 添加当前激活状态
        item.classList.add('bg-primary/10', 'text-primary', 'border-l-4', 'border-primary');
        item.classList.remove('text-light');
        
        // 隐藏所有内容
        contentSections.forEach(section => {
          section.classList.add('hidden');
        });
        
        // 显示当前内容
        const targetId = item.getAttribute('href').substring(1);
        const targetSection = document.getElementById(targetId);
        targetSection.classList.remove('hidden');
        
        // 如果切换到3D模型,初始化或重新渲染
        if (targetId === '3d-model') {
          initThreeJS();
        }
      });
    });
    
    // 初始化Three.js场景
    function initThreeJS() {
      // 检查是否已经有场景
      const container = document.getElementById('model-container');
      // 清除容器内的所有内容
      while (container.firstChild) {
        container.removeChild(container.firstChild);
      }
      
      // 创建场景
      const scene = new THREE.Scene();
      scene.background = new THREE.Color(0x020617);
      
      // 创建相机
      const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
      camera.position.z = 5;
      
      // 创建渲染器
      const renderer = new THREE.WebGLRenderer({ antialias: true });
      renderer.setSize(container.clientWidth, container.clientHeight);
      container.appendChild(renderer.domElement);
      
      // 添加轨道控制器
      const controls = new THREE.OrbitControls(camera, renderer.domElement);
      controls.enableDamping = true;
      controls.dampingFactor = 0.05;
      
      // 添加光源
      const ambientLight = new THREE.AmbientLight(0x404040, 2);
      scene.add(ambientLight);
      
      const directionalLight = new THREE.DirectionalLight(0x0ea5e9, 2);
      directionalLight.position.set(5, 5, 5);
      scene.add(directionalLight);
      
      // 创建一个简单的BIM模型(使用几何体组合)
      // 创建建筑物主体
      const buildingGeometry = new THREE.BoxGeometry(3, 2, 1);
      const buildingMaterial = new THREE.MeshStandardMaterial({ 
        color: 0x0ea5e9,
        roughness: 0.5,
        metalness: 0.3
      });
      const building = new THREE.Mesh(buildingGeometry, buildingMaterial);
      scene.add(building);
      
      // 添加窗户
      const windowGeometry = new THREE.BoxGeometry(0.2, 0.3, 0.05);
      const windowMaterial = new THREE.MeshStandardMaterial({ 
        color: 0x10b981,
        transparent: true,
        opacity: 0.8
      });
      
      // 前立面窗户
      for (let x = -1.2; x <= 1.2; x += 0.6) {
        for (let y = -0.6; y <= 0.6; y += 0.6) {
          const window = new THREE.Mesh(windowGeometry, windowMaterial);
          window.position.set(x, y, 0.55);
          scene.add(window);
        }
      }
      
      // 后立面窗户
      for (let x = -1.2; x <= 1.2; x += 0.6) {
        for (let y = -0.6; y <= 0.6; y += 0.6) {
          const window = new THREE.Mesh(windowGeometry, windowMaterial);
          window.position.set(x, y, -0.55);
          scene.add(window);
        }
      }
      
      // 添加屋顶
      const roofGeometry = new THREE.ConeGeometry(2.5, 1, 4);
      const roofMaterial = new THREE.MeshStandardMaterial({ 
        color: 0xf59e0b,
        roughness: 0.7,
        metalness: 0.2
      });
      const roof = new THREE.Mesh(roofGeometry, roofMaterial);
      roof.position.set(0, 1.5, 0);
      scene.add(roof);
      
      // 添加地面
      const groundGeometry = new THREE.PlaneGeometry(20, 20);
      const groundMaterial = new THREE.MeshStandardMaterial({ 
        color: 0x0f172a,
        roughness: 0.8,
        metalness: 0.1
      });
      const ground = new THREE.Mesh(groundGeometry, groundMaterial);
      ground.rotation.x = -Math.PI / 2;
      ground.position.y = -1.5;
      scene.add(ground);
      
      // 添加网格辅助线
      const gridHelper = new THREE.GridHelper(20, 20, 0x1e293b, 0x0f172a);
      scene.add(gridHelper);
      
      // 添加坐标轴辅助线
      const axesHelper = new THREE.AxesHelper(5);
      scene.add(axesHelper);
      
      // 窗口大小调整
      window.addEventListener('resize', () => {
        camera.aspect = container.clientWidth / container.clientHeight;
        camera.updateProjectionMatrix();
        renderer.setSize(container.clientWidth, container.clientHeight);
      });
      
      // 渲染循环
      function animate() {
        requestAnimationFrame(animate);
        controls.update();
        renderer.render(scene, camera);
      }
      animate();
      
      // 模型控制按钮事件
      const rotateBtn = document.getElementById('rotate-btn');
      const zoomBtn = document.getElementById('zoom-btn');
      const panBtn = document.getElementById('pan-btn');
      
      rotateBtn.addEventListener('click', () => {
        controls.enableRotate = true;
        controls.enableZoom = false;
        controls.enablePan = false;
        
        // 更新按钮样式
        rotateBtn.classList.add('bg-primary/20', 'text-primary');
        zoomBtn.classList.remove('bg-primary/20', 'text-primary');
        panBtn.classList.remove('bg-primary/20', 'text-primary');
      });
      
      zoomBtn.addEventListener('click', () => {
        controls.enableRotate = false;
        controls.enableZoom = true;
        controls.enablePan = false;
        
        // 更新按钮样式
        rotateBtn.classList.remove('bg-primary/20', 'text-primary');
        zoomBtn.classList.add('bg-primary/20', 'text-primary');
        panBtn.classList.remove('bg-primary/20', 'text-primary');
      });
      
      panBtn.addEventListener('click', () => {
        controls.enableRotate = false;
        controls.enableZoom = false;
        controls.enablePan = true;
        
        // 更新按钮样式
        rotateBtn.classList.remove('bg-primary/20', 'text-primary');
        zoomBtn.classList.remove('bg-primary/20', 'text-primary');
        panBtn.classList.add('bg-primary/20', 'text-primary');
      });
      
      // 视图按钮事件
      const viewBtn = document.getElementById('view-btn');
      let viewIndex = 0;
      const views = [
        { position: new THREE.Vector3(5, 5, 5), lookAt: new THREE.Vector3(0, 0, 0) },
        { position: new THREE.Vector3(0, 5, 0), lookAt: new THREE.Vector3(0, 0, 0) },
        { position: new THREE.Vector3(0, 0, 5), lookAt: new THREE.Vector3(0, 0, 0) },
        { position: new THREE.Vector3(-5, 0, 0), lookAt: new THREE.Vector3(0, 0, 0) }
      ];
      
      viewBtn.addEventListener('click', () => {
        viewIndex = (viewIndex + 1) % views.length;
        const view = views[viewIndex];
        
        controls.target.copy(view.lookAt);
        camera.position.copy(view.position);
        controls.update();
      });
      
      // 图层按钮事件
      const layerBtn = document.getElementById('layer-btn');
      let showWindows = true;
      
      layerBtn.addEventListener('click', () => {
        showWindows = !showWindows;
        
        // 查找所有窗户并切换可见性
        scene.children.forEach(child => {
          if (child.material && child.material.color.getHex() === 0x10b981) {
            child.visible = showWindows;
          }
        });
      });
    }
    
    // 初始加载时检查是否应该显示3D模型
    document.addEventListener('DOMContentLoaded', () => {
      if (!document.getElementById('3d-model').classList.contains('hidden')) {
        initThreeJS();
      }
    });
  </script>
</body>
</html>    

网站公告

今日签到

点亮在社区的每一天
去签到