feige
2025-03-18 5f36b05f0eb2327c43c6a0c39558ebc5ece4b831
ruoyi-ui/src/views/mindMap/index.vue
@@ -1,14 +1,14 @@
<template>
  <div class="app-container">
    <h1 style="font-size: 21px;">{{ greeting +',' + user.userName }}</h1>
    <div class="image-container">
      <img class="top-image" src="../../assets/images/zhang.png" alt="Top Image">
<!--    <div class="text" style="background-color: #FEF7FC;" >
      <h1 style="font-size: 21px;">{{ greeting +',' + user.userName }}</h1></div> -->
    <div class="image-container" style="background-color: #FEF7FC;">
      <img class="top-image" src="../../assets/images/awd.png" alt="Top Image">
    </div>
    <el-card class="mind-map-container">
      <div id="mind-map">
    <superMindmap  v-if="showMindMap" :active='active' :data="mapData" @activeChange="activeChange" class="mind-map-container ">
      </div>
    </el-card>
    </superMindmap>
  </div>
</template>
@@ -16,22 +16,49 @@
import { getUserProfile } from "@/api/system/user";
import { listRootAll ,listRoot} from "@/api/root/index";
import * as d3 from 'd3';
// 导入思维导图数据
import MapData from '../components/MapData.js'
// 导入思维导图组件
import superMindmap from '../components/superMindmap.vue'
export default {
   components:{superMindmap},
  name: "index",
  data() {
    return {
      active: '',
      mapData: null,
      showMindMap: false,
      user: {},
      greeting: "",
      rootList:[]
    };
  },
  mounted() {
    this.setGreeting();
  //  this.setGreeting();
    this.getUser();
  //  this.mapData = MapData.webMap
   // console.log(this.mapData)
   // console.log('sssssssssssssssssss')
  },
  methods: {
     // 点击思维导图节点后,触发变量更新
    activeChange(newLabel) {
        this.active = newLabel
        this.reloadMindMap()
    },
    // 重载思维导图
    reloadMindMap() {
        this.showMindMap = false
        this.$nextTick(
            () => {
                this.showMindMap = true
            }
        )
    },
    setGreeting() {
      const currentTime = new Date();
      const currentHour = currentTime.getHours();
@@ -51,92 +78,95 @@
      getUserProfile().then(response => {
        this.user = response.data;
      });
      listRoot(4).then(response =>{
     let clanId = this.$store.state.user.clanId
   //  alert(clanId)
      listRoot(10,clanId).then(response =>{
        this.rootList =response.data;
        console.log(this.rootList);
        this.drawMindMap();
        const mindMapData = this.rootList[0];
         console.log(mindMapData)
   //   for(let i = 0; i < )
       console.log('9999')
        // console.log(this.drawData(mindMapData))
        this.mapData = this.drawData(mindMapData)
        this.showMindMap = true
      })
    },
    drawData(mpdata) {
     let tp = "https://www.bendudu.com:8080/profile/upload/2023/03/19/test7_20230319222030A007.jpg"
      if (mpdata == null)
        return null;
      var data = {
        "label": mpdata['spouse'] != null ? eval(mpdata['spouse']).nickName : '',
        "prop": mpdata['nickName'],
        "url": mpdata['url']!=null?'https://www.bendudu.com:8080/'+mpdata['url']:tp,
        "purl": mpdata['spouse'] != null ? (mpdata['spouse'].url!=null? 'https://www.bendudu.com:8080/'+mpdata['spouse'].url:tp):tp,
        "id": mpdata['userId'],
      "spid": mpdata['spouseId'] != null ? mpdata['spouseId'] : '',
        "link": mpdata['nickName'],
        "children": []
      };
    drawMindMap() {
      const mindMapData = this.rootList[0]; // 从rootList中获取数据
      if (mpdata['childList'] != null) {
        for (var i = 0; i < mpdata['childList'].length; i++) {
          var dt = {
            "label": mpdata['childList'][i]['spouse'] != null ? eval(mpdata['childList'][i]['spouse']).nickName : "",
            "prop": mpdata['childList'][i]['nickName'],
            "url": mpdata['childList'][i]['url']!=null?'https://www.bendudu.com:8080/'+mpdata['childList'][i]['url']:tp,
             "id": mpdata['childList'][i]['userId'],
          "spid": mpdata['childList'][i]['spouseId'] != null ? mpdata['childList'][i]['spouseId'] : '',
          "purl": (mpdata['childList'][i]['spouse'] != null ) ?( mpdata['childList'][i]['spouse'].url!= null?'https://www.bendudu.com:8080/'+mpdata['childList'][i]['spouse'].url:tp):tp,
            "link": mpdata['childList'][i]['nickName'],
            "children": []
          };
          if (mpdata['childList'][i]['childList'] != null) {
            for (var j = 0; j < mpdata['childList'][i]['childList'].length; j++) {
              dt['children'].push(this.drawData(mpdata['childList'][i]['childList'][j]));
            }
          }
          data['children'].push(dt);
        }
      }
      return data;
    },
      // 清除现有的SVG元素
      d3.select("#mind-map svg").remove();
      // 创建一个新的 div 元素作为包裹思维导图的容器
      const mindMapContainer = document.createElement("div");
      mindMapContainer.setAttribute("id", "mind-map-container");
      mindMapContainer.style.position = "absolute";
      mindMapContainer.style.top = "0";
      mindMapContainer.style.left = "0";
      mindMapContainer.style.width = "100%";
      mindMapContainer.style.height = "100%";
      mindMapContainer.style.zIndex = "1";
      // 将思维导图容器插入到 image-container 中
      document.querySelector(".image-container").appendChild(mindMapContainer);
      // 创建SVG元素,设置宽度和高度
      const svg = d3.select("#mind-map-container")
        .append("svg")
        .attr("class", "svg-container") // 添加 className
        .attr("width", "100%")
        .attr("height", "100%");
      // 创建根节点
      const root = d3.hierarchy(mindMapData);
      const treeLayout = d3.tree().size([500, 400]); // 设置树状布局的尺寸
      treeLayout(root);
      // 创建链接线
      svg.selectAll(".link")
        .data(root.descendants().slice(1))
        .enter()
        .append("path")
        .attr("class", "link")
        .attr("d", d => {
          return "M" + d.x + "," + d.y + "C" + (d.x + d.parent.x) / 2 + "," + d.y + " " +
            (d.x + d.parent.x) / 2 + "," + d.parent.y + " " + d.parent.x + "," + d.parent.y;
        });
      // 创建节点
      const nodes = svg.selectAll(".node")
        .data(root.descendants())
        .enter()
        .append("g")
        .attr("class", "node")
        .attr("transform", d => "translate(" + d.x + "," + d.y + ")");
      nodes.append("circle")
        .attr("r", 10);
      nodes.append("text")
        .attr("dx", 12)
        .attr("dy", 5)
        .text(d => d.data.nickName);
    }
  }
};
</script>
<style scoped>
.app-container{
  background-color: #FEF7FC;
  position: relative;
  background-color: transparent;
  /*padding-left: -30px;*/
  margin-top:-30px;
  margin-left: -20px;
}
.text{
  opacity: 0.75;
  padding: 10px;
}
.image-container {
  position: absolute;
  width: 100%;
  /*position: fixed;*/
  top: 50px;
  /*left:-20px;*/
  width: 110%;
  height: 100%;
  z-index: -1;
}
.mind-map-container{
  z-index: 2;
  opacity: 0.5;
  /*position: fixed;*/
  overflow: auto;
  z-index: 1;
  opacity: 1;
  margin-top: 5%;
  margin-left: 12%;
  /*background-color: transparent;*/
}
.top-image {
  width: 100%;
@@ -144,8 +174,6 @@
  object-fit: cover;
  position: static;
  opacity: 0.8;
  overflow: auto;
}
</style>