月球大数据地理空间分析展示平台-【前端】-月球2期前端
Surpriseplus
2023-10-10 616b8ab8998bfbec69929152612dc94d3112c2a9
src/views/layer/layerManage.vue
@@ -27,6 +27,7 @@
        :highlight-current="false"
        :current-node-key="selectedNodeId"
        :data="treeData"
        :default-expanded-keys="defaultExpanded"
        :expand-on-click-node="false"
        show-checkbox
        @check="handleCheckChange"
@@ -45,7 +46,7 @@
            </span> -->
            <span
              class="button"
              v-if="data.isLayer == 1"
              v-if="!data.isTemporaryLayer"
            >
              <el-dropdown trigger="click">
                <span class="el-dropdown-link">
@@ -55,8 +56,27 @@
                </span>
                <template #dropdown>
                  <el-dropdown-menu>
                    <el-dropdown-item @click.native="clickdropdown(1, data)">详细</el-dropdown-item>
                    <el-dropdown-item @click.native="clickdropdown(2, data)">属性</el-dropdown-item>
                    <el-dropdown-item
                      v-if="data.type != 6 && data.isLayer ==1"
                      @click.native="clickdropdown(1, data)"
                    >详细</el-dropdown-item>
                    <el-dropdown-item v-if="data.type == 6 && data.isLayer ==1">删除</el-dropdown-item>
                    <el-dropdown-item
                      v-if="data.type == 3  && data.isLayer ==1"
                      @click.native="clickdropdown(2, data)"
                    >属性</el-dropdown-item>
                    <el-dropdown-item
                      v-if="data.isLayer ==0"
                      @click.native="clickdropdown(3, data)"
                    >透明度</el-dropdown-item>
                    <el-dropdown-item
                      v-if="data.shpType =='temporaryLayer'"
                      @click.native="clickdTemporary(1, data)"
                    >编辑</el-dropdown-item>
                    <el-dropdown-item
                      v-if="data.shpType =='temporaryLayer'"
                      @click.native="clickdTemporary(2, data)"
                    >删除</el-dropdown-item>
                  </el-dropdown-menu>
                </template>
              </el-dropdown>
@@ -74,7 +94,7 @@
    @delLayer="delLayer"
  ></layer-set>
  <attribute-list
    v-show="layerAttributeIsshow"
    v-if="layerAttributeIsshow"
    :layerData="layerObjData"
    @spatialClose="setSpatialClose"
  ></attribute-list>
@@ -94,6 +114,7 @@
  defineProps,
  defineEmits,
  nextTick,
  watch,
} from "vue";
import layerSet from "./layerSet";
import attributeList from "./attributeList";
@@ -102,16 +123,17 @@
import { perms_selectLayers } from "@/api/api";
import server from "@/assets/js/Map/server";
import { ElMessage } from "element-plus";
import temporaryTool from "@/assets/js/Map/temporaryTools";
const store = useStore(); // 该方法用于返回store 实例
const stretchValue = ref("");
const emits = defineEmits(["setCloseLayer"]);
let estreeRef = ref();
const setLayer = ref();
const transparence = ref(0);
var treeData = ref([]);
var layerListData = ref([]);
let menuOption = reactive([]);
const defaultExpanded = ref([]);
const layerSetIsshow = ref(false);
const layerAttributeIsshow = ref(false);
const layerDetailIsshow = ref(false);
@@ -122,7 +144,7 @@
const layerObjData = ref(null);
// 当前选中的节点 id
const selectedNodeId = ref(null as any); //做类型断言处理
const emits = defineEmits(["setCloseLayer"]);
//默认选中id
const DefaultId = ref([]);
//图层设置弹框
@@ -134,7 +156,41 @@
  layerSetIsshow.value = res;
};
const setCloseLayer = () => {
  store.state.setLayerManager = false;
  emits("setCloseLayer", false);
};
const clickdTemporary = (res, data) => {
  if (res == 1) {
    if (store.state.editTemporaryId) {
      var id = store.state.editTemporaryId;
      var edit_id = sgworld.Creator.SimpleGraphic.SimpleGraphicObj.indexOf(id);
      if (edit_id > -1) {
        sgworld.Creator.SimpleGraphic.SimpleGraphicObj.splice(edit_id, 1);
        store.state.editTemporaryId = null;
      }
    }
    store.state.editTemporaryId = data.id;
    sgworld.Creator.SimpleGraphic.SimpleGraphicObj.push(data.id);
    sgworld.Creator.SimpleGraphic.edit(true, { editProp: false });
  } else if (res == 2) {
    temporaryTool.removeTemporaryLayer(data);
    var checkedKeys = estreeRef.value.getCheckedKeys();
    if (checkedKeys.indexOf(data.id) > -1) {
      var index_id = checkedKeys.indexOf(data.id);
      var std = checkedKeys.slice(index_id, 1);
      estreeRef.value.setCheckedKeys(std, true);
    }
    var val = treeData.value[0].children;
    for (var i = 0; i < val.length; i++) {
      if (val[i].id == data.id) {
        val.splice(i, 1);
        treeData.value = [...treeData.value];
      }
    }
  }
};
//选择图层
const handleCheckChange = (data, checked) => {
@@ -142,14 +198,32 @@
  layerDetailIsshow.value = false;
  let isCheck = checked.checkedKeys.indexOf(data.id) > -1;
  // this.setVisiable(data, isCheck);
  let son = estreeRef.value.getCheckedNodes();
  let son = estreeRef.value.getCheckedNodes().reverse();
  server.delLayerAll();
  var setGeoWms = [];
  var url = null;
  for (var i in son) {
    var layerArr = son[i];
    layerArr.checked = true;
    if (layerArr.category == 2 && layerArr.type == 3) {
      if (layerArr.tab != "moon:geo_mappable_unit") {
        setGeoWms.push(layerArr.tab);
        url = layerArr.url;
      }
    } else {
      server.addTreeData(layerArr);
    }
  }
  if (setGeoWms.length > 0) {
    server.addGeoServerMmsLayers(setGeoWms.reverse(), url);
  }
  store.commit("SET_CHECKLAYER", son);
  setVisiable(data, isCheck);
  // setVisiable(data, isCheck);
  // server.addLayer(layerArr, isCheck);
  //
};
const setVisiable = (treeNode, checked) => {
  if (checked !== undefined) {
@@ -166,7 +240,7 @@
  }
  if (!treeNode.isAdd) {
    server.addTreeData(treeNode);
    //   server.addTreeData(treeNode);
    return;
  }
};
@@ -175,10 +249,7 @@
    DefaultId.value.forEach((v) => {
      if (e.id == v) {
        setVisiable(e, true);
      } else {
        if (e.children) {
          defaultLayer(e.children);
        }
        // return;
      }
    });
  });
@@ -187,13 +258,19 @@
  layerAttributeIsshow.value = false;
  layerDetailIsshow.value = false;
  layerObjData.value = e;
  store.state.spatialTitle = e.cnName;
  if (res == 2) {
    layerAttributeIsshow.value = true;
    store.state.tab = e;
  } else if (res == 3) {
  } else {
    if (!e.checked) {
    var val = estreeRef.value!.getCheckedKeys(false);
    if (val.indexOf(e.id) > -1) {
      layerDetailIsshow.value = true;
    } else {
      return ElMessage.error("请先勾选图层");
    }
    layerDetailIsshow.value = true;
  }
};
const setSpatialClose = (res) => {
@@ -244,24 +321,63 @@
  // });
  // treeData = handleTree(menuOption, "id", "pid", "children");
};
const setRestLayerData = () => {
  let son = estreeRef.value.getCheckedNodes().reverse();
  server.delLayerAll();
  var setGeoWms = [];
  var url = null;
  for (var i in son) {
    var layerArr = son[i];
    layerArr.checked = true;
    if (layerArr.category == 2 && layerArr.type == 3) {
      if (layerArr.tab != "moon:geo_mappable_unit") {
        setGeoWms.push(layerArr.tab);
        url = layerArr.url;
      }
    } else {
      server.addTreeData(layerArr);
    }
  }
  if (setGeoWms.length > 0) {
    server.addGeoServerMmsLayers(setGeoWms, url);
  }
  store.commit("SET_CHECKLAYER", son);
};
const getLayer = async () => {
  store.state.restLayer = false;
  server.delLayerAll();
  const dt = await perms_selectLayers();
  if (dt.code == 200) {
    treeData.value = setTreeData(dt.result).sort(function (a, b) {
      return a.sort - b.sort;
      return a.orderNum - b.orderNum;
    });
    treeData.value.unshift({
      cnName: "临时图层",
      level: 1,
      pid: 0,
      isLayer: 0,
      type: 6,
      id: new Date().getTime(),
      isTemporaryLayer: true,
      children: [],
    });
    var std = [];
    var terrainId = null;
    var adLayer = [];
    dt.result.filter((res) => {
      if (res.isLayer == 1 && res.status == 1) {
      if (res.isLayer == 1 && res.isShow == 1) {
        if (res.type == 1 && res.data == 2) {
          if (!terrainId) {
            terrainId = res.id;
            std.push(res.id);
            adLayer.push(res);
          }
        } else {
          std.push(res.id);
          adLayer.push(res);
        }
      }
    });
@@ -269,7 +385,25 @@
    //添加默认选中图层
    layerListData.value = dt.result;
    defaultLayer(treeData.value);
    defaultLayer(dt.result);
    var setGeoWms = [];
    var url = null;
    for (var i in adLayer) {
      var layer = adLayer[i];
      if (layer.category == 2 && layer.type == 3) {
        if (layer.tab != "moon:geo_mappable_unit") {
          setGeoWms.push(layer.tab);
          url = layer.url;
        }
      } else {
        server.addTreeData(layer);
      }
    }
    if (setGeoWms.length > 0) {
      server.addGeoServerMmsLayers(setGeoWms, url);
    }
    //;
    nextTick(() => {
      let son = estreeRef.value.getCheckedNodes();
@@ -286,7 +420,7 @@
    let branchArr = cloneData.filter((child) => father.id == child.pid);
    if (branchArr.length > 0) {
      branchArr.sort(function (a, b) {
        return a.sort - b.sort;
        return a.orderNum - b.orderNum;
      });
    }
@@ -296,8 +430,80 @@
    return father.pid == 0; // 返回一级菜单
  });
}
getLayer();
onMounted(() => {});
const addTemporaryLayer = (res) => {
  store.state.temporaryLayer = null;
  treeData.value[0].children.push(res);
  var id = res.id;
  nextTick(() => {
    var checkedKeys = estreeRef.value.getCheckedKeys();
    checkedKeys.push(id);
    estreeRef.value.setCheckedKeys(checkedKeys, true);
    temporaryTool.addTemporaryTool(res);
  });
};
const editTemporaryLayerName = (res) => {
  if (!store.state.editTemporaryId) return;
  var id = store.state.editTemporaryId;
  var val = treeData.value[0].children;
  for (var i = 0; i < val.length; i++) {
    if (val[i].id == id) {
      val[i].cnName = res;
      treeData.value = [...treeData.value];
    }
  }
  defaultExpanded.value = [treeData.value[0].id];
};
const editTemporaryBackById = (res) => {
  var obj = temporaryTool.getEntityObj(res);
  var val = treeData.value[0].children;
  for (var i = 0; i < val.length; i++) {
    if (val[i].id == res) {
      val[i] = obj;
      treeData.value = [...treeData.value];
    }
  }
};
watch(
  () => store.state.restLayer,
  (nVal, oVal) => {
    if (nVal) {
      setRestLayerData();
    }
  },
  { deep: true }
);
watch(
  () => store.state.temporaryLayer,
  (nVal, oVal) => {
    if (nVal) {
      addTemporaryLayer(nVal);
    }
  },
  { deep: true }
);
watch(
  () => store.state.editTemporarName,
  (nVal, oVal) => {
    if (nVal) {
      editTemporaryLayerName(nVal);
    }
  },
  { deep: true }
);
watch(
  () => store.state.editTemporaryback,
  (nVal, oVal) => {
    if (nVal) {
      editTemporaryBackById(nVal);
    }
  },
  { deep: true }
);
onMounted(() => {
  window.setLayer = getLayer;
});
</script>
<style lang="less" scoped>
@@ -306,6 +512,7 @@
  height: 680px;
  background: rgba(7, 8, 14, 0.8);
  box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
  z-index: 40;
  .layerTitle {
    width: calc(100% - 27px);
    height: 42px;