杨磊
2024-04-19 302af44359c17900d09f05caa16f24dd7fce2355
src/pages/inherit/index.vue
@@ -1,258 +1,419 @@
<template>
   <view class="">
      <headNav :idIndex="idIndex" :searchBg="false" text="中医世医传承数据库" bg="/static/image/topBg1.png"
         bg1="/static/image/line1.png" />
  <view class="">
    <headNav
      :idIndex="idIndex"
      :searchBg="false"
      text="中医世医传承数据库"
      bg="/static/image/topBg1.png"
      bg1="/static/image/line1.png"
    />
      <view class="flex" style="padding: .24rem 1.21rem ;background-color: #f0f0f0;">
         <view class="flex">
               <el-button class="MiddeBack flex flex-center" @click="goBack">返回</el-button>
            <h3 style="margin-left: .22rem;font-size: .28erm;font-weight: 500;">邵登瀛</h3>
         </view>
         <ul class="flex Lists">
            <li style="background-color: #DA7A2B;color: #fff;">世医传承</li>
            <!-- /pages/AcademicHistory/AcademicHistory -->
            <li @click="ListClick" style="background-color: #fff;color: #DA7A2B;" >世医文化</li>
         </ul>
         <view class="" style="width: 1rem;"></view>
      </view>
      <!-- echarts图 -->
      <div class="barChart" ref="barChart"></div>
   </view>
    <div class="filterBox font-family">
      <div class="searchBox">
        <input type="text" placeholder="输入姓名/别名/朝代" />
        <button>搜索</button>
      </div>
      <div class="dynasty">
        <div style="font-weight: 700; line-height: 0.25rem">筛选朝代</div>
        <div class="filterList">
          <div class="filterItem" v-for="(item, index) in dynasty" :key="index">
            <div class="circleBox" :class="{ bgcColor: item.isColor }"></div>
            <div class="filterText" :class="{ fontColor: item.isColor }">
              {{ item.name + " " + item.number }}
            </div>
          </div>
        </div>
      </div>
      <div class="condition">
        <div style="font-weight: 700; line-height: 0.25rem">条件选择</div>
        <div class="filterList">
          <div class="conditionItem">
            <div class="circleBox"></div>
            <div class="filterText">3代传承世医</div>
          </div>
          <div class="conditionItem">
            <div class="circleBox"></div>
            <div class="filterText">4代传承世医</div>
          </div>
          <div class="conditionItem">
            <div class="circleBox"></div>
            <div class="filterText">5代传承世医</div>
          </div>
          <div class="conditionItem">
            <div class="circleBox"></div>
            <div class="filterText">5代以上传承世医</div>
          </div>
        </div>
      </div>
      <div style="padding-left: 0.5rem; margin-top: 20px">共 1983个世医</div>
    </div>
    <!-- echarts图 -->
    <div class="barChart" ref="barChart"></div>
  </view>
</template>
<script>
   import * as echarts from "echarts";
   export default {
      data() {
         return {
            // 标题顶部栏需要的东西
            idIndex: 0,
            activeIndex: 1
         }
      },
      onLoad(options) {
         this.idIndex = options.id
         console.log('optionsoptionsoptions', options.id);
      },
      mounted() {
         // 初始化 echarts
         this.initBarChart();
      },
      methods: {
         initBarChart() {
            // WMBg
            //通过 $ref 进行挂载
            let myChart = echarts.init(this.$refs.barChart);
import * as echarts from "echarts";
export default {
  data() {
    return {
      // 标题顶部栏需要的东西
      idIndex: 0,
      activeIndex: 1,
      dynasty: [
        {
          name: "唐",
          number: "4910",
          isColor: false,
        },
        {
          name: "五代",
          number: "494",
          isColor: true,
        },
        {
          name: "宋",
          number: "51273",
          isColor: false,
        },
        {
          name: "北宋",
          number: "15",
          isColor: true,
        },
        {
          name: "南宋",
          number: "4910",
          isColor: false,
        },
        {
          name: "元",
          number: "299",
          isColor: true,
        },
        {
          name: "明",
          number: "1830",
          isColor: false,
        },
        {
          name: "清",
          number: "1000",
          isColor: true,
        },
      ],
    };
  },
  onLoad(options) {
    this.idIndex = options.id;
    console.log("optionsoptionsoptions", options.id);
  },
  mounted() {
    // 初始化 echarts
    this.initBarChart();
  },
  methods: {
    initBarChart() {
      // WMBg
      //通过 $ref 进行挂载
      let myChart = echarts.init(this.$refs.barChart);
            let FontSize = 12; // 字体大小
            let BorderWidth = 2; // 边框大小
            let SymbolSize = 80; // 尺寸距离
            let Distance = 10;
            // 不同尺寸下修改echarts的字体
            if (window.innerWidth > 2560 && window.innerWidth <= 3840) {
               FontSize = 28
               BorderWidth = 5
               SymbolSize = 100
               Distance = 33
            } else if (window.innerWidth > 1920 && window.innerWidth <= 2560) {
               FontSize = 28
               BorderWidth = 4
               SymbolSize = 90
               Distance = 22
            } else if (window.innerWidth >= 1366 && window.innerWidth <= 1920) {
               FontSize = 18
               BorderWidth = 4
               SymbolSize = 70
               Distance = 22
            }
      let FontSize = 12; // 字体大小
      let BorderWidth = 2; // 边框大小
      let SymbolSize = 80; // 尺寸距离
      let Distance = 10;
      // 不同尺寸下修改echarts的字体
      if (window.innerWidth > 2560 && window.innerWidth <= 3840) {
        FontSize = 28;
        BorderWidth = 5;
        SymbolSize = 100;
        Distance = 33;
      } else if (window.innerWidth > 1920 && window.innerWidth <= 2560) {
        FontSize = 28;
        BorderWidth = 4;
        SymbolSize = 90;
        Distance = 22;
      } else if (window.innerWidth >= 1366 && window.innerWidth <= 1920) {
        FontSize = 18;
        BorderWidth = 4;
        SymbolSize = 70;
        Distance = 22;
      }
            let option = {
               title: {
                  text: [""],
               },
               backgroundColor: {
                  type: 'image',
                  image: '/static/image/WMBg.png',
                  repeat: 'repeat-x', // 是否平铺,可以是 'repeat-x', 'repeat-y', 'no-repeat'
                  size: '100% 100%', // 背景图片的尺寸,可以是百分比或者像素
                  position: 'center center' // 背景图片的位置,可以是 top, bottom, middle 或者百分比
               },
               tooltip: {},
               animationDurationUpdate: 1500,
               animationEasingUpdate: "quinticInOut",
               series: [{
                  type: "graph",
                  layout: "none",
                  symbolSize: SymbolSize + 20,
                  //是否允许用户拖动图片
                  roam: false,
                  label: {
                     show: true,
                     color: 'black', // 设置节点文字颜色为黑色
                     fontSize: FontSize, // 设置文字大小
                  },
                  edgeSymbol: ["circle", "arrow"],
                  edgeSymbolSize: [4, 10],
      let option = {
        title: {
          text: [""],
        },
        backgroundColor: {
          type: "image",
          image: "/static/image/WMBg.png",
          repeat: "repeat-x", // 是否平铺,可以是 'repeat-x', 'repeat-y', 'no-repeat'
          size: "100% 100%", // 背景图片的尺寸,可以是百分比或者像素
          position: "center center", // 背景图片的位置,可以是 top, bottom, middle 或者百分比
        },
        tooltip: {},
        animationDurationUpdate: 1500,
        animationEasingUpdate: "quinticInOut",
        series: [
          {
            type: "graph",
            layout: "none",
            symbolSize: SymbolSize + 20,
            //是否允许用户拖动图片
            roam: false,
            label: {
              show: true,
              color: "black", // 设置节点文字颜色为黑色
              fontSize: FontSize, // 设置文字大小
            },
            edgeSymbol: ["circle", "arrow"],
            edgeSymbolSize: [4, 10],
                  edgeLabel: {
                     show: true,
                     fontSize: FontSize, //更改两者关系的字体
                     position: "middle",
                     //这里设置关系文字是否和线段重叠
                     //   padding: [0, 0], // 调整内边距以确保标签与线段紧密贴合
                     // verticalAlign: 'middle', // 设置文本的垂直对齐方式为居中
                     formatter: function(params) {
                        // params.data 是边的数据对象,你可以在这里定义关系名
                        // 例如,你可以根据 source 和 target 的名称来定义关系名
                        return params.data.relationName ||
                           "父子"; // 如果定义了 relationName 则显示它,否则显示“父子”
                     },
                  },
                  //各个节点
                  data: [{
                        name: "薛雪",
                        itemStyle: {
                           color: "#F8E2D7",
                           borderColor: "#F3AA78",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "邵登瀛",
                        x: 400,
                        y: 300,
                        itemStyle: {
                           color: "#F8E2D7",
                           borderColor: "#F3AA78",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "邵鲁瞻",
                        x: 500,
                        y: 300,
                        itemStyle: {
                           color: "#F8E2D7",
                           borderColor: "#F3AA78",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "邵春泉",
                        x: 600,
                        y: 300,
                        itemStyle: {
                           color: "#F8E2D7",
                           borderColor: "#F3AA78",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "徐锦",
                        x: 650,
                        y: 400,
                        itemStyle: {
                           color: "#DCE7EB",
                           borderColor: "#5F81A4",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "邵丙扬",
                        x: 700,
                        y: 300,
                        itemStyle: {
                           color: "#F8E2D7",
                           borderColor: "#F3AA78",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "冯桂芬",
                        x: 720,
                        y: 400,
                        itemStyle: {
                           color: "#DCE7EB",
                           borderColor: "#5F81A4",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "李鸿章",
                        x: 740,
                        y: 500,
                        itemStyle: {
                           color: "#E1E1E1",
                           borderColor: "#888888",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "邵景尧",
                        x: 800,
                        y: 200,
                        itemStyle: {
                           color: "#F8E2D7",
                           borderColor: "#F3AA78",
                           borderWidth: "3",
                        },
                     },
                     {
                        name: "邵景康",
                        x: 800,
                        y: 400,
                        itemStyle: {
                           color: "#F8E2D7",
                           borderColor: "#F3AA78",
                           borderWidth: "3",
                        },
                     },
                  ],
                  lineStyle: {
                     color: "#000000",
                     opacity: 0.9,
                     width: 2,
                     curveness: 0,
                  },
               }, ],
            };
            //进行渲染
            myChart.setOption(option);
         },
         // 返回按钮
         goBack() {
            // uuni.redirectTo();
            uni.redirectTo({
               url: '/pages/index/index'
            })
         },
      }
   }
            edgeLabel: {
              show: true,
              fontSize: FontSize, //更改两者关系的字体
              position: "middle",
              //这里设置关系文字是否和线段重叠
              //   padding: [0, 0], // 调整内边距以确保标签与线段紧密贴合
              // verticalAlign: 'middle', // 设置文本的垂直对齐方式为居中
              formatter: function (params) {
                // params.data 是边的数据对象,你可以在这里定义关系名
                // 例如,你可以根据 source 和 target 的名称来定义关系名
                return params.data.relationName || "父子"; // 如果定义了 relationName 则显示它,否则显示“父子”
              },
            },
            //各个节点
            data: [
              {
                name: "薛雪",
                itemStyle: {
                  color: "#F8E2D7",
                  borderColor: "#F3AA78",
                  borderWidth: "3",
                },
              },
              {
                name: "邵登瀛",
                x: 400,
                y: 300,
                itemStyle: {
                  color: "#F8E2D7",
                  borderColor: "#F3AA78",
                  borderWidth: "3",
                },
              },
              {
                name: "邵鲁瞻",
                x: 500,
                y: 300,
                itemStyle: {
                  color: "#F8E2D7",
                  borderColor: "#F3AA78",
                  borderWidth: "3",
                },
              },
              {
                name: "邵春泉",
                x: 600,
                y: 300,
                itemStyle: {
                  color: "#F8E2D7",
                  borderColor: "#F3AA78",
                  borderWidth: "3",
                },
              },
              {
                name: "徐锦",
                x: 650,
                y: 400,
                itemStyle: {
                  color: "#DCE7EB",
                  borderColor: "#5F81A4",
                  borderWidth: "3",
                },
              },
              {
                name: "邵丙扬",
                x: 700,
                y: 300,
                itemStyle: {
                  color: "#F8E2D7",
                  borderColor: "#F3AA78",
                  borderWidth: "3",
                },
              },
              {
                name: "冯桂芬",
                x: 720,
                y: 400,
                itemStyle: {
                  color: "#DCE7EB",
                  borderColor: "#5F81A4",
                  borderWidth: "3",
                },
              },
              {
                name: "李鸿章",
                x: 740,
                y: 500,
                itemStyle: {
                  color: "#E1E1E1",
                  borderColor: "#888888",
                  borderWidth: "3",
                },
              },
              {
                name: "邵景尧",
                x: 800,
                y: 200,
                itemStyle: {
                  color: "#F8E2D7",
                  borderColor: "#F3AA78",
                  borderWidth: "3",
                },
              },
              {
                name: "邵景康",
                x: 800,
                y: 400,
                itemStyle: {
                  color: "#F8E2D7",
                  borderColor: "#F3AA78",
                  borderWidth: "3",
                },
              },
            ],
            lineStyle: {
              color: "#000000",
              opacity: 0.9,
              width: 2,
              curveness: 0,
            },
          },
        ],
      };
      //进行渲染
      myChart.setOption(option);
    },
    // 返回按钮
    goBack() {
      // uuni.redirectTo();
      uni.redirectTo({
        url: "/pages/index/index",
      });
    },
  },
};
</script>
<style scoped>
   .Lists {
      li {
         /* background-color: #e4ebf3;
         border: 1rpx solid #5778a2;
         padding: 5rpx 10rpx;
         font-size: 18rpx; */
         width: 0.96rem;
         height: .3rem;
         border: 1px solid #DA7A2B;
         line-height: .3rem;
         text-align: center;
         font-size: .14rem;
      }
   }
   .MiddeBack {
      width: 0.6rem;
      height: 0.24rem;
      font-size: .12rem;
      padding: 0;
   }
   .barChart {
      width: 100vw;
      height: 80vh;
   }
</style>
.Lists {
  li {
    width: 0.96rem;
    height: 0.3rem;
    border: 1px solid #da7a2b;
    line-height: 0.3rem;
    text-align: center;
    font-size: 0.14rem;
  }
}
.MiddeBack {
  width: 0.6rem;
  height: 0.24rem;
  font-size: 0.12rem;
  padding: 0;
}
.barChart {
  width: 100vw;
  height: 80vh;
}
.filterBox {
  height: 2.2rem;
  width: 90%;
  border-bottom: 1px solid #ccc;
  padding: 20px;
  margin: 0 auto;
}
.searchBox {
  width: 50%;
  display: flex;
  height: 50px;
  border: 1px solid #ccc;
  border-radius: 30px;
  justify-content: center;
  align-items: center;
  margin: 0 auto;
  margin-top: 0.2rem;
}
.searchBox > input {
  border: none;
  outline: none;
  margin: auto;
  width: 100%;
  padding-left: 20px;
}
.searchBox > button {
  width: 10%;
  color: white;
  height: 40px;
  line-height: 40px;
  background-color: #e27917;
  border-radius: 50px;
  margin-right: 10rpx;
}
.dynasty {
  display: flex;
  margin-top: 0.2rem;
  width: 100%;
  padding: 0.1rem 0.5rem;
}
.condition {
  display: flex;
  width: 100%;
  padding: 0.1rem 0.5rem;
}
.filterList {
  margin-left: 0.4rem;
  display: flex;
}
.filterItem {
  display: flex;
  box-shadow: 1px 1px 5px #888888;
  align-items: center;
  justify-content: center;
  width: 1rem;
  height: 0.25rem;
  flex: 1;
  margin-left: 0.2rem;
  border-radius: 0.13rem;
}
.conditionItem {
  display: flex;
  box-shadow: 1px 1px 5px #888888;
  align-items: center;
  justify-content: center;
  width: 1.3rem;
  height: 0.25rem;
  flex: 1;
  margin-left: 0.2rem;
  border-radius: 0.13rem;
}
.circleBox {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: #326350;
}
.filterText {
  margin-left: 10px;
  font-size: 16px;
  color: #326350;
}
.fontColor {
  color: #827e44 !important;
}
.bgcColor {
  background-color: #827e44;
}
</style>