月球大数据地理空间分析展示平台-【前端】-月球2期前端
WX
2023-07-27 807d0f5ee9b78824f18788ea8a50b8dfd9f9bb2e
输入框选择图片
已修改5个文件
306 ■■■■ 文件已修改
src/assets/js/Map/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/layer/layerDetail.vue 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/layer/layerManage.vue 136 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/search/search.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/Map/index.js
@@ -44,7 +44,7 @@
    //大气层
    Viewer.scene.globe.showGroundAtmosphere = false;
    server.AddDemLayer("", 12316);
    // server.AddDemLayer("", 12316);
    // server.AddTmsLayer(
    //   "http://172.16.2.10:50001/sj_raster/v6/service/10003901/1"
src/main.ts
@@ -5,7 +5,7 @@
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import "default-passive-events";
// import "default-passive-events";
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
//base css样式
import "./assets/css/global.css";
src/views/layer/layerDetail.vue
@@ -11,23 +11,26 @@
        <!-- <el-checkbox @change="handlCheckAllChange" v-model="layerState">{{
          layerName
        }}</el-checkbox> -->
        {{ layerData.name }}
        {{ layerData.cnName }}
        <img src="../../assets/img/layer.png" alt="" />
      </div>
      <div class="slider-demo-block">
        <div class="demonstration">透明度</div>
        <el-slider v-model="transparence" />
        <el-slider
          v-model="transparence"
          @change="sliderChange"
          :format-tooltip="formatTooltip"
        />
        <div class="demonstration">{{ transparence }}%</div>
      </div>
      <div class="selectBox">
        <div class="selectTile demonstration">拉伸方式</div>
        <el-select
          v-model="stretchValue"
          class="m-2"
          placeholder="Select"
          class="imgSelect"
          placeholder="选择拉伸方式"
          size="small"
          @change="changeSelection(stretchValue)"
          ref="select"
          clearable
        >
          <el-option
            v-for="item in stretchOptions"
@@ -35,8 +38,30 @@
            :label="item.label"
            :value="item.value"
          >
            <img :src="item.url" style="height: 30px; margin-right: 10px" />
            <span>{{ item.label }}</span>
          </el-option>
        </el-select>
      </div>
      <div class="selectBox">
        <div class="selectTile demonstration">渲染类型</div>
        <el-select
          v-model="renderType"
          class="imgSelect"
          placeholder="选择渲染类型"
          size="small"
          @change="changeSelection(renderType)"
          ref="select"
          clearable
        >
          <el-option
            v-for="item in renderTypeOptions"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
            <!-- <img :src="item.url" style="height: 30px; margin-right: 10px" />
            <span>{{ item.label }}</span> -->
            <img :src="item.url" style="height: 30px; width: 100%" />
          </el-option>
        </el-select>
      </div>
@@ -53,12 +78,14 @@
  defineProps,
  defineEmits,
} from "vue";
import server from "@/assets/js/Map/server";
const stretchValue = ref("");
const transparence = ref(0);
let layerName = ref("图层名称");
let layerState = ref(false);
let select = ref();
const stretchOptions = [
let renderType = ref("");
const renderTypeOptions = [
  {
    value: "Option1",
    label: "Option1",
@@ -70,31 +97,91 @@
    url: "https://img1.baidu.com/it/u=3226786080,888437008&fm=253&fmt=auto&app=138&f=JPEG?w=200&h=200",
  },
];
const stretchOptions = [
  {
    value: "Option1",
    label: "Option1",
  },
  {
    value: "Option2",
    label: "Option2",
  },
];
const formatTooltip = (val: number) => {
  return val / 100;
};
const emits = defineEmits(["detailClose"]);
//defineProps 来接收组件的传值
const props = defineProps({
  layerData: Object,
});
const layerLength = ref();
const setSpatialClose = () => {
  emits("detailClose", false);
};
const handlCheckAllChange = (res) => {};
const changeSelection = (scope) => {
  let brand = scope;
  for (let index in stretchOptions) {
    let aa = stretchOptions[index];
    let value = aa.value;
    if (brand === value) {
      console.log(select.value.$el.children);
  if (scope == "") {
    select.value.$el.children[0].children[0].removeAttribute("style");
    select.value.$el.children[0].children[0].children[0].removeAttribute(
      "style"
    );
    select.value.$el.children[0].children[0].children[0].children[0].removeAttribute(
      "style"
    );
    return;
  }
  for (let index in renderTypeOptions) {
    let obj = renderTypeOptions[index];
    if (obj.value == scope) {
      select.value.$el.children[0].children[0].setAttribute(
        "style",
        "background:url(" +
          aa.url +
          ") no-repeat 10px;background-size: 30px 30px;color:#333;padding-left: 50px;"
        `background: url(${obj.url}) no-repeat;
            width: 100%; height: 100%;
            border: none;
            height: 33px;
            background-size:100% 100%`
      );
      select.value.$el.children[0].children[0].children[0].setAttribute(
        "style",
        `display: flex;
        justify-content: flex-end;
        background:transparent;`
      );
      select.value.$el.children[0].children[0].children[0].children[0].setAttribute(
        "style",
        `display: none;`
      );
    }
  }
  // let brand = scope;
  // for (let index in stretchOptions) {
  //   let aa = stretchOptions[index];
  //   let value = aa.value;
  //   if (brand === value) {
  //     console.log(select.value.$el.children);
  //     select.value.$el.children[0].children[0].setAttribute(
  //       "style",
  //       "background:url(" +
  //         aa.url +
  //         ") no-repeat 10px;background-size: 30px 30px;color:#333;padding-left: 50px;"
  //     );
  //   }
  // }
};
//滑块变动
const sliderChange = (val) => {
  server.layerList[layerLength.value].layerData.alpha = val / 100;
};
onMounted(() => {
  server.layerList.forEach((e, i) => {
    if (props.layerData.id == e.id) {
      layerLength.value = i;
      transparence.value = e.layerData.alpha * 100;
    }
  });
});
</script>
<style lang="less" scoped>
src/views/layer/layerManage.vue
@@ -59,7 +59,7 @@
    </div>
  </div>
  <layer-set
    v-show="layerSetIsshow"
    v-if="layerSetIsshow"
    @SETstate="SETstate"
    :layerTree="treeData"
    @addlayer="addlayer"
@@ -97,28 +97,7 @@
const stretchValue = ref("");
let estreeRef = 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);
var treeData = ref([]);
var layerListData = ref([]);
@@ -192,6 +171,9 @@
};
//选择图层
const handleCheckChange = (data, checked) => {
  layerAttributeIsshow.value = false;
  layerDetailIsshow.value = false;
  let isCheck = checked.checkedKeys.indexOf(data.id) > -1;
  // this.setVisiable(data, isCheck);
@@ -199,12 +181,7 @@
  store.commit("SET_CHECKLAYER", son);
  setVisiable(data, isCheck);
  let layerArr = [];
  son.forEach((e) => {
    if (e.type == 2) {
      layerArr.push(e);
    }
  });
  // server.addLayer(layerArr, isCheck);
};
const setVisiable = (treeNode, checked) => {
@@ -219,79 +196,30 @@
      setVisiable(item, treeNode.checked);
    });
    return;
  } else if (treeNode._children) {
    if (treeNode.thisView === "ewzj") {
      treeNode._children[0].checked = treeNode.checked;
      if (treeNode._children[0].children) {
        treeNode._children[0].children.forEach((item) => {
          item.checked = treeNode.checked;
          server.addTreeData(item);
        });
      } else {
        server.addTreeData(treeNode._children[0]);
      }
    } else if (treeNode.thisView === "swzj") {
      for (let i = 1; i < treeNode._children.length; i++) {
        treeNode._children[i].checked = treeNode.checked;
      }
      treeNode._children.forEach((item, index) => {
        index !== 0 && server.addTreeData(item);
      });
    } else if (!treeNode.thisView) {
      treeNode._children.forEach((item, index) => {
        item.checked = treeNode.checked;
        if (item.children) {
          item.children.forEach((_item) => {
            _item.checked = item.checked;
            server.addTreeData(_item);
          });
        } else {
          server.addTreeData(item);
        }
      });
    }
    return;
  }
  if (!treeNode.isAdd) {
    server.addTreeData(treeNode);
    return;
  }
  // let data = _getTreeData(treeNode.id);
  // if (data) {
  //   data.item &&
  //     data.item.setVisibility &&
  //     data.item.setVisibility(treeNode.checked);
  //   data.item && data.item.setVisible && data.item.setVisible(treeNode.checked);
  //   data.item &&
  //     data.item.show !== undefined &&
  //     (data.item.show = treeNode.checked);
  //   if (data.datatype === "particle") {
  //     data.item.forEach((item) => {
  //       item.show = treeNode.checked;
  //     });
  //   }
  // } else {
  //   if (treeNode.id && treeNode.id.indexOf && treeNode.id.indexOf("---") > -1) {
  //     var ids = id.split("---");
  //     ids.forEach((item) => {
  //       sgworld.ProjectTree.setVisibility(item, treeNode.checked);
  //     });
  //   } else {
  //     sgworld.ProjectTree.setVisibility(treeNode.id, treeNode.checked);
  //     var dd = Viewer.dataSources._dataSources.filter((item) => {
  //       return item.name == treeNode.id;
  //     });
  //     if (dd && dd.length > 0) {
  //       dd[0].show = treeNode.checked;
  //     }
  //   }
  // }
};
const defaultLayer = (val) => {
  val.forEach((e) => {
    DefaultId.value.forEach((v) => {
      if (e.id == v) {
        setVisiable(e, true);
      } else {
        if (e.children) {
          defaultLayer(e.children);
        }
      }
    });
  });
};
const clickdropdown = (res, e) => {
  if (!e.checked) {
    return ElMessage.error("请先勾选图层");
  }
  layerAttributeIsshow.value = false;
  layerDetailIsshow.value = false;
  layerObjData.value = e;
@@ -358,21 +286,12 @@
    treeData.value = setTreeData(dt.result).sort(function (a, b) {
      return a.sort - b.sort;
    });
    layerListData.value = dt.result;
    //添加默认选中图层
    dt.result.forEach((e) => {
      DefaultId.value.forEach((v) => {
        if (e.id == v) {
          setVisiable(e, true);
        }
      });
    });
    layerListData.value = dt.result;
    defaultLayer(treeData.value);
  }
  // treeData.value = JSON.parse(JSON.stringify(treeData.value));
  // console.log(treeData.value);
};
//构造树
@@ -394,10 +313,7 @@
  });
}
getLayer();
onMounted(() => {
  console.log(treeData.value);
  console.log(estreeRef.value);
});
onMounted(() => {});
</script>
<style lang="less" scoped>
src/views/search/search.vue
@@ -7,40 +7,23 @@
        placeholder="请输入地名"
      >
        <template #suffix>
          <el-icon
            title="清除"
            @click="setSearchClose"
            class="el-input__icon"
          >
          <el-icon title="清除" @click="setSearchClose" class="el-input__icon">
            <Close />
          </el-icon>
        </template>
        <template #prefix>
          <el-icon
            @click="setSearchClick"
            title="查询"
            class="el-input__icon"
          >
          <el-icon @click="setSearchClick" title="查询" class="el-input__icon">
            <search />
          </el-icon>
        </template>
      </el-input>
    </div>
    <div
      v-if="searchFLag"
      class="search_content"
    >
      <el-collapse
        v-model="activeNames"
        @change="handleChange"
      >
        <el-collapse-item
          title="查询结果"
          name="1"
        >
    <div v-if="searchFLag" class="search_content">
      <el-collapse v-model="activeNames" @change="handleChange">
        <el-collapse-item title="查询结果" name="1">
          <div class="search_content_text">总查询结果:{{ listData.count }}</div>
          <div class="search_content_text paging">
            总页数:{{listData.page }}
            总页数:{{ listData.page }}
            <el-button
              size="small"
              text
@@ -76,7 +59,6 @@
            />
          </div>
          <div class="table_box">
            <div class="table_header">
              <div class="table_th_x">序号</div>
              <div class="table_th">地名</div>
@@ -84,13 +66,12 @@
            <div class="table_childer">
              <div
                class="table_tr"
                v-for='(item,flag) in tableData'
                v-for="(item, flag) in tableData"
                @click="setPointLocal(item)"
              >
                <div class="table_th_x">{{ flag +1}}</div>
                <div class="table_th_x">{{ flag + 1 }}</div>
                <div class="table_th">{{ item.enName }}</div>
              </div>
            </div>
          </div>
        </el-collapse-item>
@@ -198,7 +179,7 @@
  setPoitCannel();
};
const setSearchClick = async () => {
  if (!searchValue) return;
  if (!searchValue.value) return;
  var obj = {
    filter: "name like '" + searchValue.value + "'",
@@ -221,7 +202,11 @@
</script>
<style lang="less" scoped>
.searchBox {
  margin-left: 34px;
  // margin-left: 34px;
  // height: auto;
  position: absolute;
  top: 0;
  right: -277px;
}
.searchInput {
  width: 243px;