1
YM
2024-05-17 5adb70f8f046e2de37c4984a454503c5daaf08b3
src/pages/character/detail.vue
@@ -96,7 +96,7 @@
      </view>
      <view style="width: 5%"></view>
    </view>
    <div style="padding: 0 1.2rem 0; padding-top: 0.24rem;display: flex;">
    <div style="padding: 0 1.2rem 0; padding-top: 0.24rem; display: flex">
      <!-- 左侧 -->
      <div
        :span="5"
@@ -183,6 +183,12 @@
              >
                {{ index + 1 }}.{{ item }}
              </li>
              <div
                v-if="sourceDataList.length == 0"
                style="color: #666; text-align: center; font-size: 16px"
              >
                暂无数据
              </div>
            </ul>
          </el-card>
        </div>
@@ -256,14 +262,22 @@
            >
              <span>相关附表/图像</span>
            </div>
            <view class="flex">
              <el-image
                v-for="item in imageList"
                :key="item"
                style="width: 2.05rem; height: 2.4rem"
                :src="item"
                fit="fill"
              ></el-image>
            <view>
              <div class="flex">
                <el-image
                  v-for="item in imageList"
                  :key="item"
                  style="width: 2.05rem; height: 2.4rem"
                  :src="item"
                  fit="fill"
                ></el-image>
              </div>
              <div
                v-if="imageList.length == 0"
                style="color: #666; text-align: center; font-size: 16px"
              >
                暂无数据
              </div>
            </view>
          </el-card>
          <el-card class="box-card">
@@ -285,6 +299,12 @@
              >
                {{ "[" + Number(index + 1) + "]" + item.achievementName }}
              </li>
              <div
                v-if="personResearchList.length == 0"
                style="color: #666; text-align: center; font-size: 16px"
              >
                暂无数据
              </div>
            </ul>
          </el-card>
        </div>
@@ -352,13 +372,13 @@
  getPersonBiog,
  getPersonWritings,
  getPersonRelationAtSchool,
  getSpaceTime,
  getSpaceTime
} from "@/api/index.js";
import { getImg } from "@/static/tool.js";
export default {
  components: {
    Table1,
    Table1
  },
  data() {
    return {
@@ -379,60 +399,60 @@
      tableColumns1: [
        {
          prop: "a",
          label: "正书名",
          label: "正书名"
        },
        {
          prop: "e",
          label: "作者",
          label: "作者"
        },
        {
          prop: "b",
          label: "著作年",
          label: "著作年"
        },
        {
          prop: "c",
          label: "著作方式",
          label: "著作方式"
        },
        {
          prop: "d",
          label: "总目分类",
        },
          label: "总目分类"
        }
      ],
      tableColumns2: [
        {
          prop: "a",
          label: "关系人",
          label: "关系人"
        },
        {
          prop: "b",
          label: "关系类型",
          label: "关系类型"
        },
        {
          prop: "c",
          label: "考据",
          label: "考据"
        },
        {
          prop: "d",
          label: "出处",
        },
          label: "出处"
        }
      ],
      tableColumns3: [
        {
          prop: "a",
          label: "活动时间区间",
          label: "活动时间区间"
        },
        {
          prop: "b",
          label: "活动名称",
          label: "活动名称"
        },
        {
          prop: "c",
          label: "活动地点",
          label: "活动地点"
        },
        {
          prop: "d",
          label: "活动描述",
        },
          label: "活动描述"
        }
      ],
      tableData1: [],
      tableData2: [],
@@ -441,7 +461,7 @@
      tableData5: [],
      nodes: [],
      relationships: [],
      personResearchList: [],
      personResearchList: []
    };
  },
  onLoad(options) {
@@ -476,12 +496,11 @@
  },
  methods: {
    copyText() {
      var textToCopy = document.getElementById("copyBox").innerText;
      console.log(textToCopy, "textToCopy");
      navigator.clipboard.writeText(textToCopy).then();
      const txt = this.biogData[0].content + ";来源:中医医学人物数据库";
      navigator.clipboard.writeText(txt).then();
      this.$message({
        message: "复制成功!",
        type: "success",
        type: "success"
      });
    },
    toLink(item) {
@@ -491,7 +510,7 @@
      // 基本信息
      getPersonInfo({
        id: this.detailId,
        type: "PERSON_BASIC",
        type: "PERSON_BASIC"
      }).then((res) => {
        const obj = {};
        if (
@@ -514,14 +533,13 @@
      //现代研究
      getPersonInfo({
        id: this.detailId,
        type: "PERSON_RESEARCH",
        type: "PERSON_RESEARCH"
      }).then((res) => {
        console.log(res, "123123123");
        this.personResearchList = res.object.personResearchList;
      });
      getPersonInfo({
        id: this.detailId,
        type: "PERSON_RELATIONS",
        type: "PERSON_RELATIONS"
      }).then((res) => {
        console.log(res, "PERSON_RELATIONS");
        this.personRelationList = res.object.personRelationList;
@@ -529,120 +547,128 @@
          this.tableData4 = this.personRelationList.map((f) => {
            return {
              a: f.nodeName,
              b: f.relationTypeName,
              b: f.relationTypeName
            };
          });
        }
      });
      getWebBasic({
        personId: this.detailId,
        personId: this.detailId
      }).then((res) => {
        console.log(res, "resres");
        const obj = res.object;
        getIntroduction(Number(obj.school)).then((sres) => {
          console.log(sres, "sres");
          this.tableArr = [
            {
              list: [
                {
                  name: "别名",
                  value: obj.alias || "-",
                },
                {
                  name: "字",
                  value: obj.zi || "-",
                },
                {
                  name: "号",
                  value: obj.hao || "-",
                },
                {
                  name: "所处时期",
                  value: obj.dynastyDesc || "-",
                },
                {
                  name: "民族",
                  value: obj.ethnic || "-",
                },
              ],
            },
            {
              list: [
                {
                  name: "籍贯",
                  value: obj.native || "-",
                },
                {
                  name: "性别",
                  value: obj.gender || "-",
                },
                {
                  name: "职官",
                  value: obj.official || "-",
                },
                {
                  name: "流派",
                  value:
                    sres &&
                    sres.object &&
                    sres.object.school_NAME &&
                    sres.object.school_NAME.length
                      ? sres.object.school_NAME[0].content
                      : "-",
                },
                {
                  name: "学术特点",
                  value: obj.features || "-",
                },
              ],
            },
          ];
        });
        if (obj.school) {
          getIntroduction(Number(obj.school)).then((sres) => {
            console.log(sres, "sres");
            handleData(obj, sres);
          });
        } else {
          handleData(obj);
        }
      });
      // 活动年谱
      getPersonInfo({
        id: this.detailId,
        type: "PERSON_SPACE_TIME",
        type: "PERSON_SPACE_TIME"
      }).then((res) => {
        this.tableData5 = res.object.personSpaceTimeList.map((item) => {
          return {
            a: item.time,
            b: item.activityName,
            c: item.activityAddrOld,
            d: item.desc, // 这里缺少活动描述字段
            d: item.desc // 这里缺少活动描述字段
          };
        });
      });
    },
    handleData(obj, sres) {
      this.tableArr = [
        {
          list: [
            {
              name: "别名",
              value: obj.alias || "-"
            },
            {
              name: "字",
              value: obj.zi || "-"
            },
            {
              name: "号",
              value: obj.hao || "-"
            },
            {
              name: "所处时期",
              value: obj.dynastyDesc || "-"
            },
            {
              name: "民族",
              value: obj.ethnic || "-"
            }
          ]
        },
        {
          list: [
            {
              name: "籍贯",
              value: obj.native || "-"
            },
            {
              name: "性别",
              value: obj.gender || "-"
            },
            {
              name: "职官",
              value: obj.official || "-"
            },
            {
              name: "流派",
              value:
                sres &&
                sres.object &&
                sres.object.school_NAME &&
                sres.object.school_NAME.length
                  ? sres.object.school_NAME[0].content
                  : "-"
            },
            {
              name: "学术特点",
              value: obj.features || "-"
            }
          ]
        }
      ];
    },
    getSourceData() {
      getSource({
        personId: this.detailId,
        personId: this.detailId
      }).then((res) => {
        this.sourceDataList = res.list;
      });
    },
    getImages() {
      getPersonImages({
        personId: this.detailId,
        personId: this.detailId
      }).then((res) => {
        this.imageList = res.list.map((item) => getImg(item.filePath));
      });
    },
    getBiog() {
      getPersonBiog({
        personId: this.detailId,
        personId: this.detailId
      }).then((res) => {
        this.biogData = res.list.map((item) => {
          return {
            content: item.content1,
            pageNo: "《" + item.pageNo + "》 " + "P " + item.pageNo, // 这里只有bookid无法匹配到书名
            pageNo: "《" + item.pageNo + "》 " + "P " + item.pageNo // 这里只有bookid无法匹配到书名
          };
        });
      });
    },
    getWritings() {
      getPersonWritings({
        personId: this.detailId,
        personId: this.detailId
      }).then((res) => {
        this.tableData1 = res.list.map((item) => {
          return {
@@ -650,14 +676,14 @@
            b: item.dynasty,
            c: item.writeWay,
            d: item.classify,
            e: this.detailInfo.NAME,
            e: this.detailInfo.NAME
          };
        });
      });
    },
    getRelationship() {
      getPersonRelationAtSchool({
        personId: this.detailId,
        personId: this.detailId
        // relationSearchTypeEO: "SOCIAL"
      }).then((res) => {
        console.log(res, "getPersonRelationAtSchool");
@@ -666,7 +692,7 @@
    },
    getMappingData(name) {
      getFuzzySearch({
        keyword: name,
        keyword: name
      }).then((res) => {
        this.nodes = [];
        this.relationships = [];
@@ -682,19 +708,19 @@
            if (exists1 !== true) {
              this.nodes.push({
                name: item.name1,
                id: item.identifier1,
                id: item.identifier1
              });
            }
            if (exists2 !== true) {
              this.nodes.push({
                name: item.name2,
                id: item.identifier2,
                id: item.identifier2
              });
            }
            let obj = {
              source: item.name1,
              target: item.name2,
              relation: item.relationName || "", // 如果存在 relationName 字段则使用,否则为空字符串
              relation: item.relationName || "" // 如果存在 relationName 字段则使用,否则为空字符串
            };
            this.relationships.push(obj);
          });
@@ -704,13 +730,13 @@
    },
    getMapInfo() {
      getSpaceTime({
        personId: this.detailId,
        personId: this.detailId
      }).then((res) => {
        console.log(res, "getSpaceTime");
        const data = res.list.map((item) => {
          return {
            name: item.activityName,
            value: [item.xcoord, item.ycoord],
            value: [item.xcoord, item.ycoord]
          };
        });
        // 时空地图
@@ -724,11 +750,11 @@
    fangdaClick(index) {
      if (index == 1) {
        uni.navigateTo({
          url: "/pages/character/index?keyword=" + this.detailInfo.NAME,
          url: "/pages/character/index?keyword=" + this.detailInfo.NAME
        });
      } else if (index == 2) {
        uni.navigateTo({
          url: "/pages/characterMap/characterMap?id=" + this.detailId,
          url: "/pages/characterMap/characterMap?id=" + this.detailId
        });
      }
    },
@@ -744,7 +770,7 @@
    scrollToTop() {
      window.scrollTo({
        top: 0,
        behavior: "smooth", // 使用平滑滚动
        behavior: "smooth" // 使用平滑滚动
      });
    },
    handleClick(tab) {
@@ -827,8 +853,8 @@
                position: "middle", // 设置标签文本在线的中间位置上居中显示
                // bottom: -(FontSize+10),
                z: 10, // 设置标签的z轴高度,使其比连接线更高
                distance: -(Distance + 1), // 将标签放置在连接线上
              },
                distance: -(Distance + 1) // 将标签放置在连接线上
              }
            });
          }
        }
@@ -843,8 +869,8 @@
          itemStyle: {
            color: "#eae0eb", // 可以根据索引设置不同的颜色
            borderWidth: BorderWidth,
            borderColor: "#996f9f",
          },
            borderColor: "#996f9f"
          }
        };
      });
      var option;
@@ -854,14 +880,14 @@
          top: FontSize + 10,
          subtextStyle: {
            fontSize: FontSize, // 设置副标题文字大小为 14px
            color: "#2C2C2C",
          },
            color: "#2C2C2C"
          }
        },
        backgroundColor: {
          type: "image",
          image: "/static/image/characterRelationBg.png",
          size: "100% 100%", // 背景图片的尺寸,可以是百分比或者像素
          position: "center center", // 背景图片的位置,可以是 top, bottom, middle 或者百分比
          position: "center center" // 背景图片的位置,可以是 top, bottom, middle 或者百分比
        },
        tooltip: {},
        animationDurationUpdate: 1500,
@@ -875,7 +901,7 @@
            label: {
              show: true,
              color: "black", // 设置节点文字颜色为黑色
              fontSize: FontSize, // 设置文字大小
              fontSize: FontSize // 设置文字大小
            },
            edgeSymbol: ["circle"],
            edgeSymbolSize: [4, 10],
@@ -884,16 +910,16 @@
            lineStyle: {
              opacity: 0.9,
              width: 2,
              curveness: 0.3,
              curveness: 0.3
            },
            emphasis: {
              focus: "adjacency",
              lineStyle: {
                width: 10,
              },
            },
          },
        ],
                width: 10
              }
            }
          }
        ]
      };
      // 将生成的连接线添加到echarts图表的option中
      option.series[0].links = links;
@@ -939,10 +965,10 @@
          text: "",
          subtext: "",
          sublink: "",
          left: "center",
          left: "center"
        },
        tooltip: {
          trigger: "item",
          trigger: "item"
        },
        bmap: {
          center: data[0].value,
@@ -954,123 +980,123 @@
                featureType: "water",
                elementType: "all",
                stylers: {
                  color: "#86a1ac",
                },
                  color: "#86a1ac"
                }
              },
              {
                featureType: "land",
                elementType: "all",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "railway",
                elementType: "all",
                stylers: {
                  visibility: "off",
                },
                  visibility: "off"
                }
              },
              {
                featureType: "highway",
                elementType: "all",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "highway",
                elementType: "labels",
                stylers: {
                  visibility: "off",
                },
                  visibility: "off"
                }
              },
              {
                featureType: "arterial",
                elementType: "geometry",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "arterial",
                elementType: "geometry.fill",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "poi",
                elementType: "all",
                stylers: {
                  visibility: "off",
                },
                  visibility: "off"
                }
              },
              {
                featureType: "green",
                elementType: "all",
                stylers: {
                  visibility: "off",
                },
                  visibility: "off"
                }
              },
              {
                featureType: "subway",
                elementType: "all",
                stylers: {
                  visibility: "off",
                },
                  visibility: "off"
                }
              },
              {
                featureType: "manmade",
                elementType: "all",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "local",
                elementType: "all",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "local",
                elementType: "labels",
                stylers: {
                  visibility: "off",
                },
                  visibility: "off"
                }
              },
              {
                featureType: "arterial",
                elementType: "labels",
                stylers: {
                  visibility: "off",
                },
                  visibility: "off"
                }
              },
              {
                featureType: "boundary",
                elementType: "all",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "building",
                elementType: "all",
                stylers: {
                  color: "#f1d99d",
                },
                  color: "#f1d99d"
                }
              },
              {
                featureType: "label",
                elementType: "labels.text.fill",
                stylers: {
                  color: "#000",
                },
              },
            ],
          },
                  color: "#000"
                }
              }
            ]
          }
        },
        series: [
          {
@@ -1080,18 +1106,18 @@
            data: data,
            symbolSize: 0,
            encode: {
              value: 2,
              value: 2
            },
            label: {
              formatter: "{b}",
              position: "right",
              show: false,
              show: false
            },
            emphasis: {
              label: {
                show: true,
              },
            },
                show: true
              }
            }
          },
          {
            name: "",
@@ -1100,32 +1126,32 @@
            data: data,
            symbolSize: 20,
            encode: {
              value: 2,
              value: 2
            },
            showEffectOn: "render",
            rippleEffect: {
              brushType: "stroke",
              brushType: "stroke"
            },
            label: {
              formatter: "{b}",
              position: "right",
              show: false,
              show: false
            },
            itemStyle: {
              color: "#ec7b43",
              shadowBlur: 10,
              shadowColor: "#333",
              shadowColor: "#333"
            },
            emphasis: {
              scale: false,
              scale: false
            },
            zlevel: 1,
          },
        ],
            zlevel: 1
          }
        ]
      };
      option && myChart.setOption(option);
    },
  },
    }
  }
};
</script>
@@ -1154,10 +1180,10 @@
.BoxLeft ::v-deep.el-card__body {
  padding: 0.1rem 0.11rem !important;
}
.BoxLeft{
.BoxLeft {
  width: 30%;
}
.BoxRight{
.BoxRight {
  width: 70%;
}