月球大数据地理空间分析展示平台-【前端】-月球2期前端
WX
2023-06-09 eff42e5897b5f0935aa5b93c1bd9acb8bb39b8f0
ui页面补充添加,功能按钮调整
已添加13个文件
已修改10个文件
1421 ■■■■ 文件已修改
public/CIMSDK/Assets/Textures/SkyBox/skyBox_py.jpg 补丁 | 查看 | 原始文档 | blame | 历史
public/CIMSDK/Assets/Textures/SkyBox/skyBox_pz.jpg 补丁 | 查看 | 原始文档 | blame | 历史
public/index.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/global.css 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/DBX.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/d.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/dl.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/dw.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/layer.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/m.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/ml.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/sc.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/xl.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/Map/index.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/Map/menuData.js 359 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/Map/menuTool.js 259 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/baseMapSwitching/baseMapSwitching.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/layer/layerManage.vue 199 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menus.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plotting/plotting.vue 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/search/search.vue 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/CIMSDK/Assets/Textures/SkyBox/skyBox_py.jpg

public/CIMSDK/Assets/Textures/SkyBox/skyBox_pz.jpg

public/index.html
@@ -23,6 +23,7 @@
</head>
<body>
  <noscript>
    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
        Please enable it to continue.</strong>
src/assets/css/global.css
@@ -90,4 +90,7 @@
  /* border: 1px solid #D6E4FF;
  box-shadow:none; */
  box-shadow:0 0 0 1px #D6E4FF;
}
.el-input__inner{
  color: #D6E4FF;
}
src/assets/img/DBX.png
src/assets/img/d.png
src/assets/img/dl.png
src/assets/img/dw.png
src/assets/img/layer.png
src/assets/img/m.png
src/assets/img/ml.png
src/assets/img/sc.png
src/assets/img/x.png
src/assets/img/xl.png
src/assets/js/Map/index.js
@@ -23,6 +23,10 @@
    this.Viewer = this.earthCtrl._Viewer;
    this.Viewer.scene.skyAtmosphere.show = false;
    this.Viewer.scene.globe.depthTestAgainstTerrain = true;
    console.log(this.earthCtrl);
    console.log(SmartEarth.EarthCtrl);
    window.earthCtrl = this.earthCtrl;
    window.Viewer = this.earthCtrl._Viewer;
@@ -30,6 +34,12 @@
    Viewer.scene.globe.showGroundAtmosphere = false;
    // let colorAll = {
    //   point: SmartEarth.Cesium.Color.fromCssColorString("#ff0000"),
    //   polyline: SmartEarth.Cesium.Color.fromCssColorString("#ffff0050"),
    //   polygon: SmartEarth.Cesium.Color.fromCssColorString("#ffff0050"),
    // };
    // this.earthCtrl.Analysis.spaceDistance(colorAll, () => {});
    // var terrain = new SmartEarth.Cesium.CesiumTerrainProvider({
    //     url: config.moonTerrain,
    //     tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme({
src/assets/js/Map/menuData.js
@@ -1,186 +1,197 @@
const menuData = {
    topMenu: [
  topMenu: [
    {
      id: "a1",
      name: "漫游",
      imgUrl: "图层 8 æ‹·è´ 2.png",
      level: 1,
      children: [
        {
            id: 'a1',
            name: "漫游",
            imgUrl: '图层 8 æ‹·è´ 2.png',
            level: 1,
            children: [
                {
                    id: 'a2',
                    name: "点漫游",
                    imgUrl: '椭圆 6.png',
                    level: 2,
                },
                {
                    id: 'a3',
                    name: "线路漫游",
                    imgUrl: '椭圆 7 æ‹·è´ 2.png',
                    level: 2,
                }
            ],
          id: "a2",
          name: "点漫游",
          imgUrl: "椭圆 6.png",
          level: 2,
        },
        {
            id: 'b1',
            name: "量测",
            imgUrl: '图层 5 æ‹·è´ 6.png',
            level: 1,
            children: [
                {
                    id: 'b2',
                    name: "表面距离",
                    imgUrl: '图层 31.png',
                    level: 2,
                },
                {
                    id: 'b3',
                    name: "平面面积",
                    imgUrl: '矩形 13 æ‹·è´.png',
                    level: 2,
                }, {
                    id: 'b4',
                    name: "高程测量",
                    imgUrl: '高程测量.png',
                    level: 2,
                },
                {
                    id: 'b5',
                    name: "垂直高度",
                    imgUrl: '图层 31 æ‹·è´.png',
                    level: 2,
                }
            ],
          id: "a3",
          name: "线路漫游",
          imgUrl: "椭圆 7 æ‹·è´ 2.png",
          level: 2,
        },
      ],
    },
    {
      id: "b1",
      name: "量测",
      imgUrl: "图层 5 æ‹·è´ 6.png",
      level: 1,
      children: [
        {
          id: "b2",
          name: "表面距离",
          imgUrl: "图层 31.png",
          level: 2,
        },
        {
            id: 'c1',
            name: "标绘",
            imgUrl: '矩形 8 æ‹·è´ 11.png',
            level: 1,
            children: [{
                id: 'c2',
                name: "点",
                imgUrl: '椭圆 5 æ‹·è´ 3.png',
                level: 2,
            },
            {
                id: 'c3',
                name: "文字",
                imgUrl: '文字标注.png',
                level: 2,
            }, {
                id: 'c4',
                name: "线",
                imgUrl: '椭圆 3 æ‹·è´ 16.png',
                level: 2,
            },
            {
                id: 'c5',
                name: "矩形",
                imgUrl: '椭圆 3 æ‹·è´ 20.png',
                level: 2,
            }, {
                id: 'c6',
                name: "多边形",
                imgUrl: '椭圆 3 æ‹·è´ 23.png',
                level: 2,
            }],
          id: "b3",
          name: "平面面积",
          imgUrl: "矩形 13 æ‹·è´.png",
          level: 2,
        },
        {
            id: 'd1',
            name: "分析",
            imgUrl: '矢量智能对象 æ‹·è´ 3.png',
            level: 1,
            children: [{
                id: 'd2',
                name: "等高线分析",
                imgUrl: '椭圆 8 æ‹·è´ 8.png',
                level: 2,
            },
            {
                id: 'd3',
                name: "坡度分析",
                imgUrl: '圆角矩形 12 æ‹·è´ 5.png',
                level: 2,
            }, {
                id: 'd4',
                name: "土方量计算",
                imgUrl: '图层 14 æ‹·è´ 3.png',
                level: 2,
            },
            {
                id: 'd5',
                name: "影像对比",
                imgUrl: '圆角矩形 12 æ‹·è´ 6.png',
          id: "b4",
          name: "高程测量",
          imgUrl: "高程测量.png",
          level: 2,
        },
        {
          id: "b5",
          name: "垂直高度",
          imgUrl: "图层 31 æ‹·è´.png",
          level: 2,
        },
      ],
    },
    {
      id: "c1",
      name: "标绘",
      imgUrl: "矩形 8 æ‹·è´ 11.png",
      level: 1,
      children: [
        {
          id: "c2",
          name: "点",
          imgUrl: "椭圆 5 æ‹·è´ 3.png",
          level: 2,
        },
        {
          id: "c3",
          name: "文字",
          imgUrl: "文字标注.png",
          level: 2,
        },
        {
          id: "c4",
          name: "线",
          imgUrl: "椭圆 3 æ‹·è´ 16.png",
          level: 2,
        },
        {
          id: "c5",
          name: "矩形",
          imgUrl: "椭圆 3 æ‹·è´ 20.png",
          level: 2,
        },
        {
          id: "c6",
          name: "多边形",
          imgUrl: "椭圆 3 æ‹·è´ 23.png",
          level: 2,
        },
      ],
    },
    {
      id: "d1",
      name: "分析",
      imgUrl: "矢量智能对象 æ‹·è´ 3.png",
      level: 1,
      children: [
        {
          id: "d2",
          name: "等高线分析",
          imgUrl: "椭圆 8 æ‹·è´ 8.png",
          level: 2,
        },
        {
          id: "d3",
          name: "坡度分析",
          imgUrl: "圆角矩形 12 æ‹·è´ 5.png",
          level: 2,
        },
        {
          id: "d4",
          name: "土方量计算",
          imgUrl: "图层 14 æ‹·è´ 3.png",
          level: 2,
        },
        {
          id: "d5",
          name: "影像对比",
          imgUrl: "圆角矩形 12 æ‹·è´ 6.png",
                level: 2,
            }, {
                id: 'd6',
                name: "阴影分析",
                imgUrl: '图层 8.png',
                level: 2,
            }],
          level: 2,
        },
        {
            id: 'e1',
            imgUrl: '形状 5.png',
            name: "快照",
            level: 1,
          id: "d6",
          name: "阴影分析",
          imgUrl: "图层 8.png",
          level: 2,
        },
        {
            id: 'f1',
            name: "空间查询",
            imgUrl: '形状 3.png',
            level: 1,
            children: [],
        },
        {
            id: 'g1',
            imgUrl: '图层 7 æ‹·è´ 5.png',
            name: "坐标定位",
            level: 1,
        },
        {
            id: 'k1',
            imgUrl: '清除.png',
            level: 1,
            name: "清除",
        },
    ],
    leftMenu: [
        {
            id: 'l1',
            name: '图层管理',
            imgUrl: '图层1 (1).png',
            checkImgUrl: '图层1 (1) æ‹·è´.png'
        },
        {
            id: 'l2',
            name: '标绘查询',
            imgUrl: '形状 4.png',
            checkImgUrl: '形状 4 æ‹·è´.png'
        }, {
            id: 'l3',
            name: '专题图制作',
            imgUrl: '形状 2.png',
            checkImgUrl: '形状 2 æ‹·è´.png'
        }, {
            id: 'l4',
            name: '工具箱',
            imgUrl: '形状 1.png',
            checkImgUrl: '形状 1 æ‹·è´.png'
        }, {
            id: 'l5',
            name: '全屏',
            imgUrl: '形状 8.png',
            checkImgUrl: '形状 8 æ‹·è´.png'
        }, {
            id: 'l6',
            name: '底图切换',
            imgUrl: '形状 3.png',
            checkImgUrl: '形状 3 æ‹·è´.png'
        }
    ]
}
export default menuData;
      ],
    },
    {
      id: "e1",
      imgUrl: "形状 5.png",
      name: "快照",
      level: 1,
    },
    {
      id: "f1",
      name: "空间查询",
      imgUrl: "形状 3.png",
      level: 1,
      children: [],
    },
    {
      id: "g1",
      imgUrl: "图层 7 æ‹·è´ 5.png",
      name: "坐标定位",
      level: 1,
    },
    {
      id: "k1",
      imgUrl: "清除.png",
      level: 1,
      name: "清除",
    },
  ],
  leftMenu: [
    {
      id: "l1",
      name: "图层管理",
      imgUrl: "图层1 (1).png",
      checkImgUrl: "图层1 (1) æ‹·è´.png",
    },
    {
      id: "l2",
      name: "标绘查询",
      imgUrl: "形状 4.png",
      checkImgUrl: "形状 4 æ‹·è´.png",
    },
    {
      id: "l3",
      name: "专题图制作",
      imgUrl: "形状 2.png",
      checkImgUrl: "形状 2 æ‹·è´.png",
    },
    // {
    //   id: "l4",
    //   name: "工具箱",
    //   imgUrl: "形状 1.png",
    //   checkImgUrl: "形状 1 æ‹·è´.png",
    // },
    {
      id: "l5",
      name: "底图切换",
      imgUrl: "形状 8.png",
      checkImgUrl: "形状 8 æ‹·è´.png",
    },
    {
      id: "l6",
      name: "全屏",
      imgUrl: "形状 3.png",
      checkImgUrl: "形状 3 æ‹·è´.png",
    },
  ],
};
export default menuData;
src/assets/js/Map/menuTool.js
@@ -1,140 +1,127 @@
const menuTool = {
    toolMenu: null,
    toolFlag: null,
    colorAll: {
    },
    topTools(res) {
        this.clearTopTools();
        if (res.id == this.toolFlag) {
            this.toolFlag = null;
            return
        }
        this.toolFlag = res.id;
        switch (res.id) {
            case 'a2'://点漫游
                this.pointRoam();
                break;
            case 'a3'://线漫游
                this.lineRoam();
                break;
            case 'b2'://表面距离
                this.surfaceDistance();
                break;
            case 'b3'://平面面积
                this.planeDistance();
                break;
            case 'b4'://高程测量
                this.heightMeasure();
                break;
            case 'b5'://垂直高度
                this.verticalHeight();
                break;
            case 'd4'://土方量计算
                this.Volumetric();
                break;
            case 'd5'://影像对比
                this.CurtainContrast();
                break;
            case 'g1'://坐标定位
                this.Coordposition();
                break;
        }
    },
    leftTools(res) {
        this.clearLeftTools()
        switch (res.id) {
            case 'l1':
                break;
            case 'l2':
                break;
            case 'l3'://在线制图
                this.setThematicMap();
                break;
            case 'l4':
                break;
            case 'l5':
                break;
            case 'l6':
                break;
        }
    },
  toolMenu: null,
  toolFlag: null,
  colorAll: {},
  topTools(res) {
    this.clearTopTools();
    if (res.id == this.toolFlag) {
      this.toolFlag = null;
      return;
    }
    this.toolFlag = res.id;
    switch (res.id) {
      case "a2": //点漫游
        this.pointRoam();
        break;
      case "a3": //线漫游
        this.lineRoam();
        break;
      case "b2": //表面距离
        this.surfaceDistance();
        break;
      case "b3": //平面面积
        this.planeDistance();
        break;
      case "b4": //高程测量
        this.heightMeasure();
        break;
      case "b5": //垂直高度
        this.verticalHeight();
        break;
      case "d4": //土方量计算
        this.Volumetric();
        break;
      case "d5": //影像对比
        this.CurtainContrast();
        break;
      case "g1": //坐标定位
        this.Coordposition();
        break;
    }
  },
  leftTools(res) {
    this.clearLeftTools();
    switch (res.id) {
      case "l1":
        break;
      case "l2":
        break;
      case "l3": //在线制图
        this.setThematicMap();
        break;
      case "l4":
        break;
      case "l5":
        break;
      case "l6":
        break;
    }
  },
    //在线制图
    setThematicMap() {
        // earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE2D;
        // var handle = new SmartEarth.Cesium.ScreenSpaceEventHandler(earthCtrl.viewer.scene.canvas);
  //在线制图
  setThematicMap() {
    // earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE2D;
    // var handle = new SmartEarth.Cesium.ScreenSpaceEventHandler(earthCtrl.viewer.scene.canvas);
  },
    },
  //坐标定位
  Coordposition() {},
  //影像对比
  CurtainContrast() {
    this.toolMenu = earthCtrl.analysis.createCurtainContrast({
      leftIndex: 0,
      rightIndex: 1,
    });
  },
  //土方量计算
  Volumetric() {
    const Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
    Volumetric.startDrawing();
  },
  //垂直高度
  verticalHeight() {
    earthCtrl.measure.measureHeight(function (e) {});
  },
  //高程测量
  heightMeasure() {},
  //平面面积
  planeDistance() {
    earthCtrl.analysis.getPlaneArea(function (e) {});
  },
  //表面距离
  surfaceDistance() {
    earthCtrl.measure.lineLength(function (e) {});
  },
  //点漫游
  pointRoam() {},
  //线漫游
  lineRoam() {},
    //坐标定位
    Coordposition() {
    },
    //影像对比
    CurtainContrast() {
        this.toolMenu = earthCtrl.analysis.createCurtainContrast({ leftIndex: 0, rightIndex: 1 })
    },
    //土方量计算
    Volumetric() {
        const Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
        Volumetric.startDrawing();
    },
    //垂直高度
    verticalHeight() {
        earthCtrl.measure.measureHeight(function (e) {
        })
    },
    //高程测量
    heightMeasure() {
    },
    //平面面积
    planeDistance() {
        earthCtrl.analysis.getPlaneArea(function (e) {
        })
    },
    //表面距离
    surfaceDistance() {
        earthCtrl.measure.lineLength(function (e) {
        })
    },
    //点漫游
    pointRoam() {
    },
    //线漫游
    lineRoam() {
    },
    //清除方法
    clearTopTools() {
        if (this.toolFlag) {
            switch (this.toolFlag) {
                case 'a2':
                    break;
                case 'a3':
                    break;
                case 'b2':
                case 'b3':
                case 'b4':
                case 'b5':
                    break;
                case 'd5':
                    debugger
                    this.toolMenu.removeFromMap()
                    break;
            }
            // this.toolFlag = null;
            this.toolMenu = null;
        }
    },
    clearLeftTools() {
    },
}
export default menuTool;
  //清除方法
  clearTopTools() {
    if (this.toolFlag) {
      switch (this.toolFlag) {
        case "a2":
          break;
        case "a3":
          break;
        case "b2":
          earthCtrl.tools.browse();
          break;
        case "b3":
        case "b4":
        case "b5":
          earthCtrl.tools.browse();
          break;
        case "d5":
          debugger;
          this.toolMenu.removeFromMap();
          break;
      }
      // this.toolFlag = null;
      this.toolMenu = null;
    }
  },
  clearLeftTools() {},
};
export default menuTool;
src/views/Index.vue
@@ -7,7 +7,6 @@
    <menus></menus>
    <bottom-btn></bottom-btn>
    <top-btn></top-btn>
  </div>
</template>
@@ -24,11 +23,10 @@
import menus from "@/views/menus.vue";
//底部菜单
import bottomBtn from "@/components/bottomBtn.vue";
//顶部菜单
import topBtn from "@/components/topBtn.vue";
import InitMap from "@/assets/js/Map/index.js";
// import * as SmartEarth from "../../public/CIMSDK/index.js";
// import * as SmartEarth from "../assets/js/CIMSDK/index.js";
let map;
var viewer;
const init = () => {
@@ -37,6 +35,7 @@
};
onMounted(() => {
  // console.log(SmartEarth);
  InitMap.init3DMap();
  init();
});
src/views/baseMapSwitching/baseMapSwitching.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
<template>
  <div v-drag class="baseMapSwitching">
    <div class="baseMapSwitchingTitle">
      <div class="tileLeft">
        <div class="titleImg">
          <ArrowLeft />
        </div>
        <div class="titleLable"></div>
      </div>
    </div>
    <div class="baseMapSwitching_content">
      <div class="baseMapSwitching_list">
        <div
          class="baseMapSwitching_list_tr"
          v-for="(item, i) in list"
          :key="i"
        >
          <div class="baseMapSwitching_list_tr_name">
            <span>{{ item.name }}</span>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script lang="ts" setup>
import {
  ref,
  onMounted,
  onBeforeUnmount,
  reactive,
  defineProps,
  defineEmits,
} from "vue";
let list = ref([
  {
    name: "等距离柱投影 ( <75)",
    type: "poi",
    icon: "d.png",
  },
  {
    name: "北极平面投影",
    type: "line",
    icon: "x.png",
  },
  {
    name: "南极平面投影",
    type: "cover",
    icon: "m.png",
  },
]);
</script>
<style lang="less" scoped>
.baseMapSwitching {
  width: 359px;
  height: 680px;
  background: rgba(7, 8, 14, 0.8);
  .baseMapSwitchingTitle {
    width: calc(100% - 27px);
    height: 42px;
    background: #0e151f;
    box-shadow: 0px 0px 6px 0px #080c13,
      0px 14px 16px 0px rgba(38, 47, 71, 0.68);
    display: flex;
    justify-content: space-between;
    padding-left: 7px;
    padding-right: 20px;
    color: white;
    .tileLeft {
      height: 100%;
      display: flex;
      align-items: center;
      .titleLable {
        font-size: 24px;
        font-family: Source Han Sans CN;
        font-weight: 400;
        color: #ffffff;
      }
    }
    .titleImg {
      width: 20px;
      height: 100%;
      display: flex;
      align-items: center;
      color: rgba(104, 156, 255, 1);
    }
  }
  .baseMapSwitching_content {
    margin-top: 3px;
    .baseMapSwitching_content_title {
      font-size: 20px;
      font-weight: 300;
      color: #ffffff;
    }
    .baseMapSwitching_list_tr {
      cursor: pointer;
      height: 42px;
      margin-top: 10px;
      background: #0d131d;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 0 25px;
      .baseMapSwitching_list_tr_name {
        // display: flex;
        // align-items: center;
        // justify-content: space-between;
        span {
          font-size: 16px;
          font-weight: 300;
          color: #ffffff;
          margin-left: 10px;
        }
      }
    }
  }
}
</style>
src/views/layer/layerManage.vue
@@ -1,47 +1,71 @@
<template>
  <div
    v-drag
    class="layerBox"
  >
  <div v-drag class="layerBox">
    <div class="layerTitle">
      <div class="tileLeft">
        <div class="titleImg">
          <ArrowLeft />
        </div>
        <div class="titleLable">
          å›¾å±‚管理
        </div>
        <div class="titleLable">图层管理</div>
      </div>
      <div class="titleImg">
        <Setting />
      </div>
    </div>
    <div>
      <div
        class="contentBox"
        v-for="(item,i) in menuOption"
      >
    <div class="layerContent">
      <div class="contentBox" v-for="(item, i) in menuOption" :key="i">
        <div class="contentTile">
          <div class="contentLeft">
            <div class="contentImg"></div>
            <div class="contentLabel">{{ item.name }}</div>
          </div>
          <div class="contentRight">
            <div class="contentCheck"><el-checkbox
            <div class="contentCheck">
              <el-checkbox
                @change="handlCheckAllChange(item)"
                v-model="item.checkedAll"
              >全部选中</el-checkbox></div>
                >全部选中</el-checkbox
              >
            </div>
            <div>
              <div
                @click="handlIsShow(item,1)"
                v-show="item.isShow"
                @click="handlIsShow(item.name)"
                class="contentUP"
                :class="{ accordion: item.isShow }"
              ></div>
              <div
                @click="handlIsShow(item,2)"
                v-show="!item.isShow"
                class="contentDown"
              ></div>
            </div>
          </div>
        </div>
        <div class="content" v-show="item.isShow">
          <div class="layer_box" v-for="(v, k) in item.children" :key="k">
            <div class="check_box">
              <el-checkbox
                @change="handlCheckAllChange(item)"
                v-model="v.layerState"
                >{{ v.layerName }}</el-checkbox
              >
              <img src="../../assets/img/layer.png" alt="" />
            </div>
            <div class="slider-demo-block">
              <div class="demonstration">透明度</div>
              <el-slider v-model="transparence" />
              <div class="demonstration">{{ transparence }}%</div>
            </div>
            <div class="selectBox">
              <div class="selectTile demonstration">拉伸方式</div>
              <el-select
                v-model="stretchValue"
                class="m-2"
                placeholder="Select"
                size="small"
              >
                <el-option
                  v-for="item in stretchOptions"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </div>
          </div>
        </div>
@@ -59,27 +83,67 @@
  defineProps,
  defineEmits,
} from "vue";
const menuOption = [
const stretchValue = ref("");
const stretchOptions = [
  {
    value: "Option1",
    label: "Option1",
  },
  {
    value: "Option2",
    label: "Option2",
  },
  {
    value: "Option3",
    label: "Option3",
  },
  {
    value: "Option4",
    label: "Option4",
  },
  {
    value: "Option5",
    label: "Option5",
  },
];
const transparence = ref(0);
let menuOption = reactive([
  {
    name: "测试",
    isShow: true,
    isShow: false,
    checkedAll: false,
    children: [
      {
        layerState: false,
        layerName: "图层名称",
        layerUrl: "",
      },
    ],
  },
  {
    name: "测试1",
    isShow: true,
    isShow: false,
    checkedAll: true,
    layerState: false,
  },
];
]);
const activeNames = ref(false);
const handleChange = (val: string[]) => {
  console.log(val);
};
const handlCheckAllChange = (res) => {};
const handlIsShow = (res, boolean) => {};
const handlIsShow = (res: string) => {
  menuOption.forEach((e) => {
    if (e.name == res) {
      e.isShow = !e.isShow;
    }
  });
};
</script>
<style lang="less" scoped>
.layerBox {
  position: absolute;
  top: 135px;
  left: 100px;
  width: 359px;
  height: 680px;
  background: rgba(7, 8, 14, 0.8);
@@ -111,10 +175,16 @@
      height: 100%;
      display: flex;
      align-items: center;
      color: rgba(104, 156, 255, 1);
    }
  }
  .layerContent {
    padding: 0 8px;
  }
  .contentBox {
    margin-top: 3px;
    .content {
    }
  }
  .contentTile {
    width: 100%;
@@ -152,7 +222,14 @@
      .contentUP {
        width: 18px;
        height: 11px;
        background: url("../../assets/img/leftBtn/箭头-å·¦ æ‹·è´.png");
        background: url("../../assets/img/leftBtn/箭头-å·¦ æ‹·è´.png") no-repeat
          center;
        background-size: 100% 100%;
        cursor: pointer;
      }
      .accordion {
        transform: rotate(180deg);
      }
      .contentDown {
        width: 18px;
@@ -161,5 +238,65 @@
      }
    }
  }
  .content {
    background: #1e2a3d;
    padding: 10px;
  }
  .check_box {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-right: 50px;
    img {
      width: 22px;
      height: 19px;
    }
  }
  .check_box .el-checkbox {
    font-size: 16px;
    color: #ffffff;
  }
  .check_box /deep/ .el-checkbox__input.is-checked .el-checkbox__inner {
    background-color: rgba(13, 255, 0, 1);
    border-color: rgba(41, 109, 255, 1);
  }
  .check_box /deep/ .el-checkbox__input.is-checked + .el-checkbox__label {
    color: #fff;
  }
  .slider-demo-block {
    margin-top: 22px;
  }
  .demonstration {
    font-size: 12px;
    font-weight: 300;
    color: #d6e4ff;
  }
  /deep/ .el-slider__runway {
    height: 2px;
    background: #73a1fa;
  }
  /deep/ .el-slider__bar {
    height: 2px;
    background: #73a1fa;
  }
  /deep/ .el-slider__button {
    width: 17px;
    height: 18px;
    border: 0;
    background: url("../../assets/img/DBX.png") no-repeat center;
    background-size: 100% 100%;
    border-radius: 0;
  }
  .selectBox {
    margin-top: 24px;
    .selectTile {
      padding-bottom: 6px;
    }
    .el-select {
      width: 100%;
    }
  }
}
</style>
</style>
src/views/menus.vue
@@ -1,5 +1,5 @@
<template>
  <div class="menus">
  <div class="menus" v-show="fullScreen">
    <div class="logo_box">
      <img src="../assets/img/logo.png" alt="" class="logo" />
      <div class="logo_name">
@@ -11,6 +11,7 @@
      <div
        class="imgBox"
        v-for="(item, i) in menuOptions"
        :key="i"
        @click="setMenuClick(item)"
      >
        <img
@@ -26,7 +27,14 @@
      </div>
    </div>
  </div>
  <layer-manage> </layer-manage>
  <div class="content_box" v-show="fullScreen">
    <layer-manage v-show="checkMenuFlag == 'l1'"> </layer-manage>
    <plotting v-show="checkMenuFlag == 'l2'"> </plotting>
    <baseMapSwitching v-show="checkMenuFlag == 'l5'"> </baseMapSwitching>
    <search> </search>
  </div>
  <top-btn v-show="fullScreen"></top-btn>
  <div class="fullScreen_btn"></div>
</template>
<script lang="ts" setup>
@@ -40,12 +48,23 @@
} from "vue";
import menuData from "@/assets/js/Map/menuData";
import menuTool from "@/assets/js/Map/menuTool";
//顶部菜单
import topBtn from "@/components/topBtn.vue";
//图层管理页面
import layerManage from "@/views/layer/layerManage.vue";
//地理编码搜索
import search from "@/views/search/search.vue";
//标绘查询
import plotting from "@/views/plotting/plotting.vue";
//底图切换
import baseMapSwitching from "@/views/baseMapSwitching/baseMapSwitching.vue";
const menuOptions = ref([]);
const checkMenuFlag = ref("");
let fullScreen = ref(true);
const setMenuClick = (res) => {
  console.log(res);
  if (res.id == "l6") {
    fullScreen.value = !fullScreen.value;
  }
  if (checkMenuFlag.value && checkMenuFlag.value == res.id) {
    checkMenuFlag.value = null;
  } else {
@@ -99,6 +118,7 @@
      display: flex;
      justify-content: center;
      margin-bottom: 52px;
      cursor: pointer;
      img {
        width: 30px;
        height: 30px;
@@ -106,4 +126,16 @@
    }
  }
}
.content_box {
  position: absolute;
  top: 135px;
  left: 100px;
  display: flex;
}
.fullScreen_btn {
  // background: url("../assets/img/形状 3.png") no-repeat center;
  // background-size: 100% 100%;
  width: 30px;
  height: 30px;
}
</style>
src/views/plotting/plotting.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,203 @@
<template>
  <div v-drag class="plottingBox">
    <div class="plottingTitle">
      <div class="tileLeft">
        <div class="titleImg">
          <ArrowLeft />
        </div>
        <div class="titleLable">标绘查询</div>
      </div>
    </div>
    <div class="plotting_content">
      <div class="plotting_content_btn">
        <span class="plotting_content_title">标绘工具</span>
        <div class="plotting_btn">
          <div class="btn_box_d btn_box"></div>
          <div class="btn_box_x btn_box"></div>
          <div class="btn_box_m btn_box"></div>
        </div>
      </div>
      <div class="plotting_list">
        <div class="plotting_list_tr" v-for="(item, i) in list" :key="i">
          <div class="plotting_list_tr_name">
            <img
              :src="require(`../../assets/img/${item.icon}`)"
              class="ico"
              alt=""
            /><span>{{ item.name }}</span>
          </div>
          <div class="plotting_list_tr_btn">
            <div class="tr_btn dw"></div>
            <div class="tr_btn sc"></div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script lang="ts" setup>
import {
  ref,
  onMounted,
  onBeforeUnmount,
  reactive,
  defineProps,
  defineEmits,
} from "vue";
let list = ref([
  {
    name: "Path #9",
    type: "poi",
    icon: "d.png",
  },
  {
    name: "路径 #1",
    type: "line",
    icon: "x.png",
  },
  {
    name: "多边形 #5",
    type: "cover",
    icon: "m.png",
  },
]);
</script>
<style lang="less" scoped>
.plottingBox {
  width: 359px;
  height: 680px;
  background: rgba(7, 8, 14, 0.8);
  .plottingTitle {
    width: calc(100% - 27px);
    height: 42px;
    background: #0e151f;
    box-shadow: 0px 0px 6px 0px #080c13,
      0px 14px 16px 0px rgba(38, 47, 71, 0.68);
    display: flex;
    justify-content: space-between;
    padding-left: 7px;
    padding-right: 20px;
    color: white;
    .tileLeft {
      height: 100%;
      display: flex;
      align-items: center;
      .titleLable {
        font-size: 24px;
        font-family: Source Han Sans CN;
        font-weight: 400;
        color: #ffffff;
      }
    }
    .titleImg {
      width: 20px;
      height: 100%;
      display: flex;
      align-items: center;
      color: rgba(104, 156, 255, 1);
    }
  }
  .plotting_content {
    margin-top: 3px;
    .plotting_content_title {
      font-size: 20px;
      font-weight: 300;
      color: #ffffff;
    }
    .plotting_content_btn {
      height: 42px;
      background: #0d131d;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 0 25px;
      .plotting_btn {
        display: flex;
        align-items: center;
        justify-content: space-between;
        .btn_box {
          cursor: pointer;
          margin-right: 18px;
        }
        .btn_box_d {
          width: 17px;
          height: 18px;
          background: url("../../assets/img/d.png") no-repeat center;
          background-size: 100% 100%;
        }
        .btn_box_d:hover {
          background: url("../../assets/img/dl.png") no-repeat center;
          background-size: 100% 100%;
        }
        .btn_box_x {
          width: 26px;
          height: 27px;
          background: url("../../assets/img/x.png") no-repeat center;
          background-size: 100% 100%;
        }
        .btn_box_x:hover {
          background: url("../../assets/img/xl.png") no-repeat center;
          background-size: 100% 100%;
        }
        .btn_box_m {
          width: 22px;
          height: 20px;
          background: url("../../assets/img/m.png") no-repeat center;
          background-size: 100% 100%;
          margin-right: 0;
        }
        .btn_box_m:hover {
          background: url("../../assets/img/ml.png") no-repeat center;
          background-size: 100% 100%;
        }
      }
    }
    .plotting_list_tr {
      height: 42px;
      margin-top: 10px;
      background: #0d131d;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 0 25px;
      .plotting_list_tr_name {
        display: flex;
        align-items: center;
        justify-content: space-between;
        .ico {
          width: 26px;
          height: 27px;
        }
        span {
          font-size: 16px;
          font-weight: 300;
          color: #ffffff;
          margin-left: 10px;
        }
      }
      .plotting_list_tr_btn {
        display: flex;
        align-items: center;
        .tr_btn {
          width: 16px;
          height: 15px;
          cursor: pointer;
        }
        .dw {
          background: url("../../assets/img/dw.png") no-repeat center;
          background-size: 100% 100%;
          margin-right: 18px;
        }
        .sc {
          background: url("../../assets/img/sc.png") no-repeat center;
          background-size: 100% 100%;
        }
      }
    }
  }
}
</style>
src/views/search/search.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,218 @@
<template>
  <div class="searchBox">
    <div>
      <el-input
        v-model="searchValue"
        class="searchInput"
        placeholder="请输入地名"
        :prefix-icon="Search"
        :clearable="true"
      />
    </div>
    <div class="search_content">
      <el-collapse v-model="activeNames" @change="handleChange">
        <el-collapse-item title="查询结果" name="1">
          <div class="search_content_text">总查询结果:448</div>
          <div class="search_content_text paging">
            æ€»é¡µæ•°ï¼š45
            <el-button size="small" text :icon="DArrowLeft" class="pagingBtn" />
            <el-button size="small" text :icon="ArrowLeft" class="pagingBtn1" />
            <el-input class="numInput" v-model="num" />
            <el-button
              size="small"
              text
              :icon="ArrowRight"
              class="pagingBtn1"
            />
            <el-button
              size="small"
              text
              :icon="DArrowRight"
              class="pagingBtn"
            />
          </div>
          <div class="table_box">
            <div class="table_header">
              <div class="table_th_x">序号</div>
              <div class="table_th">地名</div>
            </div>
            <div class="table_childer">
              <div class="table_tr">
                <div class="table_th_x"></div>
                <div class="table_th"></div>
              </div>
              <div class="table_tr">
                <div class="table_th_x"></div>
                <div class="table_th"></div>
              </div>
              <div class="table_tr">
                <div class="table_th_x"></div>
                <div class="table_th"></div>
              </div>
            </div>
          </div>
        </el-collapse-item>
      </el-collapse>
    </div>
  </div>
</template>
<script lang="ts" setup>
import {
  ref,
  onMounted,
  onBeforeUnmount,
  reactive,
  defineProps,
  defineEmits,
} from "vue";
import {
  Search,
  DArrowLeft,
  ArrowLeft,
  ArrowRight,
  DArrowRight,
} from "@element-plus/icons-vue";
let searchValue = ref("");
const activeNames = ref(["1"]);
const num = ref(1);
const NumhandleChange = (value: number) => {
  console.log(value);
};
const handleChange = (val: string[]) => {
  console.log(val);
};
const tableData = reactive([
  {
    date: "1",
    name: "Tom",
  },
  {
    date: "2",
    name: "Tom",
  },
  {
    date: "3",
    name: "Tom",
  },
  {
    date: "4",
    name: "Tom",
  },
]);
onMounted(() => {});
</script>
<style lang="less" scoped>
.searchBox {
  margin-left: 34px;
}
.searchInput {
  width: 222px;
  height: 35px;
}
.search_content {
  margin-top: 8px;
  width: 222px;
  //   background: rgba(7, 8, 14, 0.8);
  border-radius: 4px;
  .el-collapse,
  /deep/ .el-collapse-item__wrap {
    border: 0;
    background-color: transparent;
  }
  /deep/ .el-collapse-item__header {
    border-radius: 4px 4px 0px 0px;
    height: 35px;
    background: #0e151f;
    box-shadow: 0px 0px 6px 0px #080c13,
      0px 14px 16px 0px rgba(38, 47, 71, 0.68);
    padding: 10px 20px;
    box-sizing: border-box;
    color: #d6e4ff;
    border: 0;
  }
  /deep/ .el-collapse-item__content {
    background: rgba(7, 8, 14, 0.8);
    padding: 14px;
  }
  .search_content_text {
    font-size: 12px;
    color: #d6e4ff;
  }
  .numInput {
    width: 49px;
    height: 23px;
    padding: 0 5px;
  }
  .paging {
    margin-top: 14px;
  }
  .pagingBtn {
    width: 15px;
    height: 12px;
    margin: 0;
    font-size: 16px;
    color: RGBA(186, 199, 223, 1);
  }
  .pagingBtn1 {
    width: 8px;
    height: 12px;
    margin: 0;
    padding: 0;
    font-size: 16px;
    color: RGBA(186, 199, 223, 1);
  }
  .pagingBtn:hover,
  .pagingBtn1:hover {
    background: transparent;
  }
  .pagingBtn1.is-text:not(.is-disabled):focus,
  .pagingBtn1.is-text:not(.is-disabled):hover,
  .pagingBtn.is-text:not(.is-disabled):focus,
  .pagingBtn.is-text:not(.is-disabled):hover {
    background: transparent;
  }
  .table_box {
    margin-top: 17px;
    border-radius: 4px;
    border: 1px solid #d6e4ff;
    .table_header {
      height: 27px;
      background: #0e151f;
      box-shadow: 0px 0px 6px 0px #080c13,
        0px 14px 16px 0px rgba(38, 47, 71, 0.68);
      display: flex;
    }
    .table_th_x {
      width: 50px;
      border-right: 1px solid rgba(214, 228, 255, 0.4);
      font-size: 14px;
      color: #d6e4ff;
      display: flex;
      align-items: center;
      padding-left: 10px;
      box-sizing: border-box;
    }
    .table_th {
      font-size: 14px;
      color: #d6e4ff;
      display: flex;
      align-items: center;
      padding-left: 10px;
      overflow: hidden;
    }
    .table_tr {
      height: 27px;
      display: flex;
      background: #000000;
    }
    .table_tr:nth-child(2n) {
      background: #0e151f;
    }
  }
}
</style>