| | |
| | | <template> |
| | | <view class="relative"> |
| | | <headNav :idIndex="1 + ''" text="中医人物数据库" /> |
| | | <headNav :idIndex="1 + ''" text="历代人物" /> |
| | | <view class="Midde flex"> |
| | | <el-button class="MiddeBack flex flex-center" @click="goBack" |
| | | >返回</el-button |
| | |
| | | <view |
| | | id="copyBox" |
| | | class="fz font-family" |
| | | :title="biogData.length ? biogData[0].content : ''" |
| | | style=" |
| | | font-size: 0.13rem; |
| | | font-size: 0.14rem; |
| | | font-weight: normal; |
| | | line-height: 0.2rem; |
| | | line-height: 2; |
| | | letter-spacing: 0.03rem; |
| | | cursor: pointer; |
| | | display: -webkit-box; |
| | | -webkit-box-orient: vertical; |
| | | -webkit-line-clamp: 4; |
| | | overflow: hidden; |
| | | " |
| | | > |
| | | {{ biogData.length ? biogData[0].content : "-" }} |
| | |
| | | <img src="@/static/image/yinyong.png" alt="" />引用</el-button |
| | | > |
| | | </view> |
| | | <!-- v-if="biogData.length > 1" --> |
| | | <view |
| | | style="font-size: 0.12rem; color: #244a7b; cursor: pointer" |
| | | @click="ProfileClick" |
| | |
| | | <span>时空地图</span> |
| | | <!-- <el-button icon="el-icon-rank" style="float: right; padding: 3px 0" type="text"></el-button> --> |
| | | <img |
| | | v-if="markerList && markerList.length > 0" |
| | | src="@/static/image/fangda.png" |
| | | @click="fangdaClick(2)" |
| | | style="width: 0.18rem; height: 0.18rem; cursor: pointer" |
| | |
| | | <view |
| | | id="spaceTime" |
| | | style="height: 1.51rem; width: 100%; position: relative" |
| | | ></view> |
| | | > |
| | | <p |
| | | v-if="markerList && markerList.length == 0" |
| | | style=" |
| | | margin-top: 0.5rem; |
| | | color: #666; |
| | | text-align: center; |
| | | font-size: 12px; |
| | | " |
| | | > |
| | | 暂无数据 |
| | | </p> |
| | | </view> |
| | | </el-card> |
| | | <el-card style="width: 100%; height: 2.06rem"> |
| | | <div |
| | |
| | | class="box-card" |
| | | style="min-height: 1.91rem; margin: 0.2rem 0" |
| | | > |
| | | <el-tabs ref="tabs" v-model="activeName" @tab-click="handleClick"> |
| | | <el-tabs ref="tabs" v-model="activeName"> |
| | | <el-tab-pane label="代表著作" data-id="1" name="representative"> |
| | | <Table1 |
| | | :data="tableData1" |
| | |
| | | <span>相关附表/图像</span> |
| | | </div> |
| | | <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 style="overflow: auto; display: flex"> |
| | | <div v-for="item in imageList" :key="item" :title="item.name"> |
| | | <el-image |
| | | :title="item.name" |
| | | :alt="item.name" |
| | | style=" |
| | | width: 2.05rem; |
| | | height: 2.4rem; |
| | | margin-right: 0.2rem; |
| | | margin-bottom: 0.1rem; |
| | | " |
| | | :src="item.src" |
| | | :preview-src-list="imageList.map((item) => item.src)" |
| | | fit="contain" |
| | | ></el-image> |
| | | </div> |
| | | </div> |
| | | <div |
| | | v-if="imageList.length == 0" |
| | |
| | | > |
| | | <span>现代研究</span> |
| | | </div> |
| | | <ul class="font-family" style="font-size: 0.13rem; line-height: 2"> |
| | | <ul class="fileul" style="font-size: 0.13rem; line-height: 2"> |
| | | <li |
| | | style="cursor: pointer" |
| | | v-for="(item, index) in personResearchList" |
| | | :key="index" |
| | | @click="toLink(item)" |
| | |
| | | {{ "[" + Number(index + 1) + "]" + item.achievementName }} |
| | | </li> |
| | | <div |
| | | v-if="personResearchList.length == 0" |
| | | v-if="!personResearchList || personResearchList.length == 0" |
| | | style="color: #666; text-align: center; font-size: 16px" |
| | | > |
| | | 暂无数据 |
| | |
| | | </div> |
| | | |
| | | <!-- 返回顶部 --> |
| | | <el-col style="position: absolute; bottom: 1rem; left: 1.2rem"> |
| | | <el-col |
| | | style=" |
| | | position: absolute; |
| | | bottom: 1rem; |
| | | left: 1.2rem; |
| | | width: 0.6rem; |
| | | height: 0.6rem; |
| | | " |
| | | > |
| | | <el-button |
| | | style="width: 0.5rem; height: 0.5rem; font-size: 0.3rem" |
| | | style="font-size: 0.3rem" |
| | | icon="el-icon-top" |
| | | circle |
| | | @click="scrollToTop" |
| | |
| | | import { |
| | | getFuzzySearch, |
| | | getPersonInfo, |
| | | getRelationTypeTreeList, |
| | | getWebBasic, |
| | | getDynastyAll, |
| | | getIntroduction, |
| | | getSource, |
| | | getPersonImages, |
| | |
| | | getPersonWritings, |
| | | getPersonRelationAtSchool, |
| | | getSpaceTime, |
| | | getDynastyData |
| | | } from "@/api/index.js"; |
| | | import { getImg } from "@/static/tool.js"; |
| | | import L from "leaflet"; |
| | |
| | | |
| | | export default { |
| | | components: { |
| | | Table1, |
| | | Table1 |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | 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: "出处", |
| | | }, |
| | | width: 300, |
| | | showOverflowTooltip: true, |
| | | label: "出处" |
| | | } |
| | | ], |
| | | tableColumns3: [ |
| | | { |
| | | prop: "a", |
| | | label: "活动时间区间", |
| | | label: "活动时间区间" |
| | | }, |
| | | { |
| | | prop: "b", |
| | | label: "活动名称", |
| | | label: "活动名称" |
| | | }, |
| | | { |
| | | prop: "c", |
| | | label: "活动地点", |
| | | label: "活动地点" |
| | | }, |
| | | { |
| | | prop: "d", |
| | | label: "活动描述", |
| | | }, |
| | | label: "活动描述" |
| | | } |
| | | ], |
| | | tableData1: [], |
| | | tableData2: [], |
| | |
| | | nodes: [], |
| | | relationships: [], |
| | | personResearchList: [], |
| | | markerList: [] |
| | | }; |
| | | }, |
| | | onLoad(options) { |
| | |
| | | // 获取时空地图 |
| | | this.getMapInfo(); |
| | | |
| | | this.$nextTick(() => { |
| | | // 获取第一个选项卡的 DOM 元素 |
| | | const firstTab = this.$refs.tabs.$el.querySelector( |
| | | ".el-tabs__active-bar" |
| | | ); |
| | | firstTab.style.transform = "translateX(" + "-.2rem" + ")"; |
| | | }); |
| | | // this.$nextTick(() => { |
| | | // // 获取第一个选项卡的 DOM 元素 |
| | | // const firstTab = this.$refs.tabs.$el.querySelector( |
| | | // ".el-tabs__active-bar" |
| | | // ); |
| | | // firstTab.style.transform = "translateX(" + "-.2rem" + ")"; |
| | | // }); |
| | | |
| | | // 监听窗口大小变化 |
| | | window.addEventListener("resize", this.relation); |
| | | }, |
| | | methods: { |
| | | copyText() { |
| | | console.log(navigator.clipboard); |
| | | const textToCopy = this.biogData[0].content + ";来源:中医医学人物数据库"; |
| | | const textToCopy = |
| | | this.biogData[0].content + "\n来源:中医医学人物知识库"; |
| | | const textarea = document.createElement("textarea"); |
| | | textarea.value = textToCopy; |
| | | document.body.appendChild(textarea); |
| | |
| | | document.body.removeChild(textarea); |
| | | this.$message({ |
| | | message: "复制成功!", |
| | | type: "success", |
| | | type: "success" |
| | | }); |
| | | }, |
| | | toLink(item) { |
| | | window.open(item.url); |
| | | if (item.url) { |
| | | window.open(item.url); |
| | | } |
| | | if (item.filePath) { |
| | | window.open(getImg(item.filePath)); |
| | | } |
| | | }, |
| | | getData() { |
| | | // 基本信息 |
| | | getPersonInfo({ |
| | | id: this.detailId, |
| | | type: "PERSON_BASIC", |
| | | type: "PERSON_BASIC" |
| | | }).then((res) => { |
| | | const obj = {}; |
| | | if ( |
| | |
| | | : fieldItem.content1; |
| | | } |
| | | } |
| | | console.log(obj); |
| | | this.detailInfo = obj; |
| | | getDynastyAll().then((dynastyData) => { |
| | | getWebBasic({ |
| | | personId: this.detailId |
| | | }).then((res) => { |
| | | const obj = res.object; |
| | | if (obj.school) { |
| | | getIntroduction(Number(obj.school)).then((sres) => { |
| | | this.handleData(obj, sres, dynastyData.list); |
| | | }); |
| | | } else { |
| | | this.handleData(obj, null, dynastyData.list); |
| | | } |
| | | }); |
| | | }); |
| | | // 关系图谱 |
| | | this.getMappingData(this.detailInfo.NAME); |
| | | this.getMappingData(); |
| | | }); |
| | | |
| | | //现代研究 |
| | | getPersonInfo({ |
| | | id: this.detailId, |
| | | type: "PERSON_RESEARCH", |
| | | type: "PERSON_RESEARCH" |
| | | }).then((res) => { |
| | | this.personResearchList = res.object.personResearchList; |
| | | }); |
| | | getPersonRelationAtSchool({ |
| | | personId: this.detailId, |
| | | }).then((res) => { |
| | | console.log(res, "PERSON_RELATIONS"); |
| | | // this.personRelationList = res.object.personRelationList; |
| | | // if (this.personRelationList.length) { |
| | | // this.tableData4 = this.personRelationList.map((f) => { |
| | | // return { |
| | | // a: f.nodeName, |
| | | // b: f.relationTypeName, |
| | | // }; |
| | | // }); |
| | | // } |
| | | }); |
| | | getWebBasic({ |
| | | personId: this.detailId, |
| | | }).then((res) => { |
| | | console.log(res, "resres"); |
| | | const obj = res.object; |
| | | 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, // 这里缺少活动描述字段 |
| | | }; |
| | | }); |
| | | if (res.object.personSpaceTimeList) { |
| | | this.tableData5 = res.object.personSpaceTimeList.map((item) => { |
| | | return { |
| | | a: item.time, |
| | | b: item.activityName, |
| | | c: item.activityAddrOld, |
| | | d: item.desc |
| | | }; |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | handleData(obj, sres) { |
| | | handleData(obj, sres, dynastyData) { |
| | | this.tableArr = [ |
| | | { |
| | | list: [ |
| | | { |
| | | name: "别名", |
| | | value: obj.alias || "-", |
| | | name: "姓名", |
| | | value: obj.name || "-" |
| | | }, |
| | | { |
| | | name: "字", |
| | | value: obj.zi || "-", |
| | | value: obj.zi || "-" |
| | | }, |
| | | { |
| | | name: "号", |
| | | value: obj.hao || "-", |
| | | value: obj.hao || "-" |
| | | }, |
| | | { |
| | | name: "所处时期", |
| | | value: obj.dynastyDesc || "-", |
| | | value: |
| | | dynastyData.find((item) => item.dynastyId == obj.dynastyId) |
| | | .name || "-", |
| | | valueClick: () => { |
| | | uni.navigateTo({ |
| | | url: |
| | | "/pages/knowledgeBase/knowledgeBase?dynasty=" + |
| | | obj.dynastyId |
| | | }); |
| | | } |
| | | }, |
| | | { |
| | | name: "民族", |
| | | value: obj.ethnic || "-", |
| | | }, |
| | | ], |
| | | value: obj.ethnic || "-" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | list: [ |
| | | { |
| | | name: "籍贯", |
| | | value: obj.native || "-", |
| | | value: obj.native || "-" |
| | | }, |
| | | { |
| | | name: "性别", |
| | | value: obj.gender || "-", |
| | | value: obj.gender || "-" |
| | | }, |
| | | { |
| | | name: "职官", |
| | | value: obj.official || "-", |
| | | valueClick: () => { |
| | | uni.navigateTo({ |
| | | url: |
| | | "/pages/knowledgeBase/knowledgeBase?isAdvancedSearch=1&official=" + |
| | | obj.official |
| | | }); |
| | | } |
| | | }, |
| | | { |
| | | name: "流派", |
| | |
| | | sres.object.school_NAME && |
| | | sres.object.school_NAME.length |
| | | ? sres.object.school_NAME[0].content |
| | | : "-", |
| | | : "-" |
| | | }, |
| | | { |
| | | name: "学术特点", |
| | | value: obj.features || "-", |
| | | }, |
| | | ], |
| | | }, |
| | | 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)); |
| | | this.imageList = res.list.map((item) => { |
| | | return { |
| | | src: getImg(item.filePath), |
| | | name: item.desc |
| | | }; |
| | | }); |
| | | }); |
| | | }, |
| | | getBiog() { |
| | | getPersonBiog({ |
| | | personId: this.detailId, |
| | | personId: this.detailId |
| | | }).then((res) => { |
| | | this.biogData = res.list.map((item) => { |
| | | return { |
| | | content: item.content1, |
| | | bookName: "《" + item.bookName + "》 " + "P " + item.pageNo, // 这里只有bookid无法匹配到书名 |
| | | bookName: |
| | | "《" + |
| | | item.bookName + |
| | | "》 " + |
| | | (item.pageNo ? "P " + item.pageNo : "") // 这里只有bookid无法匹配到书名 |
| | | }; |
| | | }); |
| | | }); |
| | | }, |
| | | getBiog() { |
| | | getPersonBiog({ |
| | | personId: this.detailId |
| | | }).then((res) => { |
| | | this.biogData = res.list.map((item) => { |
| | | return { |
| | | content: item.content1, |
| | | bookName: |
| | | "《" + |
| | | item.bookName + |
| | | "》 " + |
| | | (item.pageNo ? "P " + item.pageNo : "") // 这里只有bookid无法匹配到书名 |
| | | }; |
| | | }); |
| | | }); |
| | | }, |
| | | getWritings() { |
| | | getPersonWritings({ |
| | | personId: this.detailId, |
| | | personId: this.detailId |
| | | }).then((res) => { |
| | | this.tableData1 = res.list.map((item) => { |
| | | return { |
| | |
| | | b: item.dynasty, |
| | | c: item.writeWay, |
| | | d: item.classify, |
| | | e: this.detailInfo.NAME, |
| | | e: this.detailInfo.NAME |
| | | }; |
| | | }); |
| | | }); |
| | | }, |
| | | getRelationship() { |
| | | getPersonRelationAtSchool({ |
| | | personId: this.detailId, |
| | | // relationSearchTypeEO: "SOCIAL" |
| | | getPersonInfo({ |
| | | id: this.detailId, |
| | | type: "PERSON_RELATIONS" |
| | | }).then((res) => { |
| | | console.log(res, "getPersonRelationAtSchool"); |
| | | // 这里接口有问题 |
| | | this.tableData4; |
| | | if (res.object.personRelationMap.kin.length) { |
| | | this.tableData2 = res.object.personRelationMap.kin.map((f) => { |
| | | return { |
| | | a: f.nodeName, |
| | | b: f.relationTypeName, |
| | | c: f.textualResearch, |
| | | d: |
| | | res.object.bookList && |
| | | res.object.bookList.find((citem) => citem.id == f.bookId) |
| | | ? "《" + |
| | | res.object.bookList.find((citem) => citem.id == f.bookId) |
| | | .name + |
| | | "》 P" + |
| | | f.pageNo |
| | | : "" |
| | | }; |
| | | }); |
| | | } |
| | | if (res.object.personRelationMap.teacherStudent.length) { |
| | | this.tableData3 = res.object.personRelationMap.teacherStudent.map( |
| | | (f) => { |
| | | return { |
| | | a: f.nodeName, |
| | | b: f.relationTypeName, |
| | | c: f.textualResearch, |
| | | d: |
| | | res.object.bookList && |
| | | res.object.bookList.find((citem) => citem.id == f.bookId) |
| | | ? "《" + |
| | | res.object.bookList.find((citem) => citem.id == f.bookId) |
| | | .name + |
| | | "》 P" + |
| | | f.pageNo |
| | | : "" |
| | | }; |
| | | } |
| | | ); |
| | | } |
| | | if (res.object.personRelationMap.social.length) { |
| | | this.tableData4 = res.object.personRelationMap.social.map((f) => { |
| | | return { |
| | | a: f.nodeName, |
| | | b: f.relationTypeName, |
| | | c: f.textualResearch, |
| | | d: |
| | | res.object.bookList && |
| | | res.object.bookList.find((citem) => citem.id == f.bookId) |
| | | ? "《" + |
| | | res.object.bookList.find((citem) => citem.id == f.bookId) |
| | | .name + |
| | | "》 P" + |
| | | f.pageNo |
| | | : "" |
| | | }; |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | getMappingData(name) { |
| | | getMappingData() { |
| | | getFuzzySearch({ |
| | | keyword: name, |
| | | personId: this.detailId |
| | | }).then((res) => { |
| | | this.nodes = []; |
| | | this.relationships = []; |
| | |
| | | (node) => node.id === item.identifier2 && node.name === item.name2 |
| | | ); |
| | | // 证明不存在 |
| | | if (exists1 !== true) { |
| | | if (item.name1 && exists1 !== true) { |
| | | this.nodes.push({ |
| | | name: item.name1, |
| | | id: item.identifier1, |
| | | id: item.identifier1 |
| | | }); |
| | | } |
| | | if (exists2 !== true) { |
| | | if (item.name2 && 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); |
| | | }); |
| | |
| | | }, |
| | | 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], |
| | | }; |
| | | }); |
| | | // 时空地图 |
| | | this.initMap(data[0]); |
| | | if (res.list && res.list.length) { |
| | | const data = []; |
| | | for (let i = 0; i < res.list.length; i++) { |
| | | const item = res.list[i]; |
| | | if (item.xcoord && item.ycoord) { |
| | | const obj = { |
| | | name: item.activityName, |
| | | value: [item.xcoord, item.ycoord] |
| | | }; |
| | | data.push(obj); |
| | | } |
| | | } |
| | | this.markerList = data; |
| | | // 时空地图 |
| | | // 这里只取了第一条,需要全部数据 |
| | | if (data && data.length) { |
| | | this.initMap(data); |
| | | } |
| | | } |
| | | |
| | | // loadBMap("1NJdwrI1CfT6lrykVhDkmWgsO6O2bjQK").then(() => { |
| | | // this.spaceTime(data); |
| | | // }); |
| | |
| | | initMap(markerList) { |
| | | var map = L.map("spaceTime", { |
| | | preferCanvas: true, |
| | | attributionControl: false, |
| | | }).setView([markerList.value[1], markerList.value[0]], 13); |
| | | attributionControl: false |
| | | }).setView([markerList[0].value[1], markerList[0].value[0]], 13); |
| | | L.tileLayer |
| | | .chinaProvider("TianDiTu.Normal.Map", { |
| | | key: "76bc34ead7e30e663a4eded8aeaf5860", |
| | | maxZoom: 18, |
| | | minZoom: 3, |
| | | minZoom: 3 |
| | | }) |
| | | .addTo(map); |
| | | L.tileLayer |
| | | .chinaProvider("TianDiTu.Normal.Annotion", { |
| | | key: "76bc34ead7e30e663a4eded8aeaf5860", |
| | | maxZoom: 18, |
| | | minZoom: 3 |
| | | }) |
| | | .addTo(map); |
| | | let icon = L.divIcon({ |
| | | html: "<div class='map-circle-name ripple'></div>", |
| | | iconSize: [80, 80], |
| | | className: "map-circle", |
| | | className: "map-circle" |
| | | }); |
| | | this.map = map; |
| | | const temp_mark = L.marker([markerList.value[1], markerList.value[0]], { |
| | | icon: icon, |
| | | icon: icon |
| | | }).addTo(map); |
| | | if (markerList.length) { |
| | | for (let i = 0; i < markerList.length; i++) { |
| | | const item = markerList[i]; |
| | | const temp_mark = L.marker([item.value[1], item.value[0]], { |
| | | icon: icon |
| | | }).addTo(map); |
| | | } |
| | | } |
| | | }, |
| | | // 放大地图跳转 |
| | | 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 |
| | | }); |
| | | } |
| | | }, |
| | |
| | | scrollToTop() { |
| | | window.scrollTo({ |
| | | top: 0, |
| | | behavior: "smooth", // 使用平滑滚动 |
| | | behavior: "smooth" // 使用平滑滚动 |
| | | }); |
| | | }, |
| | | openFileClick(index) { |
| | | let obj = { |
| | | id: this.detailId, |
| | | type: "Person", |
| | | type: "Person" |
| | | }; |
| | | switch (index) { |
| | | case 1: |
| | |
| | | .join("&"); |
| | | window.open(`#/pages/fileDetail/index?${queryString}`); |
| | | }, |
| | | handleClick(tab) { |
| | | let index = tab.$attrs["data-id"] - 1; |
| | | this.$nextTick(() => { |
| | | let firstTab = this.$refs.tabs.$el.querySelector( |
| | | ".el-tabs__active-bar" |
| | | ); |
| | | if (index == 0) { |
| | | firstTab.style.transform = "translateX(-" + 0.2 + "rem)"; |
| | | } else if (index == 1) { |
| | | firstTab.style.transform = "translateX(" + 0.85 * index + "rem)"; |
| | | } else if (index == 2) { |
| | | firstTab.style.transform = "translateX(" + 0.93 * index + "rem)"; |
| | | } else if (index == 3) { |
| | | firstTab.style.transform = "translateX(" + 0.95 * index + "rem)"; |
| | | } else if (index == 4) { |
| | | firstTab.style.transform = "translateX(" + 0.97 * index + "rem)"; |
| | | } else { |
| | | let firstTab = this.$refs.tabs.$el.querySelector( |
| | | ".el-tabs__active-bar" |
| | | ); |
| | | firstTab.style.transform = "translateX(" + "-.2" + "rem)"; |
| | | } |
| | | }); |
| | | }, |
| | | // 关系图谱 |
| | | relation() { |
| | | var chartDom = document.getElementById("relation"); |
| | |
| | | |
| | | let FontSize = 12; // 字体大小 |
| | | let BorderWidth = 2; // 边框大小 |
| | | let SymbolSize = 80; // 尺寸距离 |
| | | let SymbolSize = 50; // 尺寸距离 |
| | | 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; |
| | | } |
| | | // 根据关系数据生成连接线 |
| | | var links = []; |
| | | relationships.forEach((relationship, i) => { |
| | |
| | | position: "middle", // 设置标签文本在线的中间位置上居中显示 |
| | | // bottom: -(FontSize+10), |
| | | z: 10, // 设置标签的z轴高度,使其比连接线更高 |
| | | distance: -(Distance + 1), // 将标签放置在连接线上 |
| | | }, |
| | | distance: -(Distance + 1) // 将标签放置在连接线上 |
| | | } |
| | | }); |
| | | } |
| | | } |
| | |
| | | itemStyle: { |
| | | color: "#eae0eb", // 可以根据索引设置不同的颜色 |
| | | borderWidth: BorderWidth, |
| | | borderColor: "#996f9f", |
| | | }, |
| | | borderColor: "#996f9f" |
| | | } |
| | | }; |
| | | }); |
| | | var option; |
| | |
| | | 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, |
| | |
| | | label: { |
| | | show: true, |
| | | color: "black", // 设置节点文字颜色为黑色 |
| | | fontSize: FontSize, // 设置文字大小 |
| | | fontSize: FontSize // 设置文字大小 |
| | | }, |
| | | edgeSymbol: ["circle"], |
| | | edgeSymbolSize: [4, 10], |
| | |
| | | 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; |
| | |
| | | text: "", |
| | | subtext: "", |
| | | sublink: "", |
| | | left: "center", |
| | | left: "center" |
| | | }, |
| | | tooltip: { |
| | | trigger: "item", |
| | | trigger: "item" |
| | | }, |
| | | bmap: { |
| | | center: data[0].value, |
| | |
| | | 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: [ |
| | | { |
| | |
| | | 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: "", |
| | |
| | | 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> |
| | | |
| | | <style> |
| | | /* Table1表格里面的数据 */ |
| | | ::v-deep .is-leaf { |
| | | .cell { |
| | | font-size: 0.14rem !important; |
| | | height: 0.4rem !important; |
| | | line-height: 0.4rem !important; |
| | | } |
| | | ::v-deep .is-leaf .cell { |
| | | font-size: 0.14rem !important; |
| | | height: 0.4rem !important; |
| | | line-height: 0.4rem !important; |
| | | } |
| | | |
| | | ::v-deep .el-table__body { |
| | | .cell { |
| | | font-size: 0.14rem !important; |
| | | height: 0.4rem !important; |
| | | line-height: 0.4rem !important; |
| | | } |
| | | ::v-deep .el-table__body .cell { |
| | | font-size: 0.14rem !important; |
| | | height: 0.4rem !important; |
| | | line-height: 0.4rem !important; |
| | | } |
| | | |
| | | /* --------------- */ |
| | |
| | | width: 70%; |
| | | } |
| | | |
| | | ::v-deep .el-tabs__content { |
| | | line-height: 1; |
| | | } |
| | | |
| | | /* 个人小传 ------------------*/ |
| | | ::v-deep .el-dialog__header { |
| | | display: none; |
| | |
| | | |
| | | ::v-deep .el-dialog__body { |
| | | padding: 0; |
| | | } |
| | | |
| | | ::v-deep .el-dialog__wrapper { |
| | | z-index: 999999999999999 !important; |
| | | } |
| | | |
| | | .ProfileNav { |
| | |
| | | } |
| | | |
| | | /* ------------------- */ |
| | | |
| | | img { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | * { |
| | | box-sizing: border-box; |
| | | } |
| | |
| | | background-color: #0c274c; |
| | | padding: 15rpx 25rpx; |
| | | color: #fff !important; |
| | | } |
| | | .NavTop img { |
| | | width: 30rpx; |
| | | height: 30rpx; |
| | | vertical-align: middle; |
| | | } |
| | | |
| | | .NavTop .NavTopr { |
| | | img { |
| | | width: 30rpx; |
| | | height: 30rpx; |
| | | vertical-align: middle; |
| | | } |
| | | |
| | | .NavTopr { |
| | | img { |
| | | margin-right: 10rpx; |
| | | } |
| | | margin-right: 10rpx; |
| | | } |
| | | } |
| | | |
| | | .mImage { |
| | | width: 100%; |
| | | height: 30rpx; |
| | | |
| | | img { |
| | | vertical-align: top; |
| | | } |
| | | } |
| | | .mImage img { |
| | | vertical-align: top; |
| | | } |
| | | |
| | | .Midde { |
| | |
| | | color: #000; |
| | | align-items: flex-start; |
| | | padding: 0.18rem 0.24rem; |
| | | } |
| | | .Midde view { |
| | | color: #000; |
| | | } |
| | | |
| | | view { |
| | | color: #000; |
| | | } |
| | | |
| | | .MiddeBack { |
| | | width: 0.6rem; |
| | | height: 0.24rem; |
| | | font-size: 0.12rem; |
| | | padding: 0; |
| | | border: 1px solid #9e9e9e; |
| | | } |
| | | .Midde .MiddeBack { |
| | | width: 0.6rem; |
| | | height: 0.24rem; |
| | | font-size: 0.12rem; |
| | | padding: 0; |
| | | border: 1px solid #9e9e9e; |
| | | } |
| | | |
| | | .yinyong { |
| | | font-size: 0.12rem; |
| | | |
| | | img { |
| | | width: 0.12rem; |
| | | height: 0.1rem; |
| | | vertical-align: top; |
| | | margin-right: 0.03rem; |
| | | } |
| | | } |
| | | .yinyong img { |
| | | width: 0.12rem; |
| | | height: 0.1rem; |
| | | vertical-align: top; |
| | | margin-right: 0.03rem; |
| | | } |
| | | |
| | | .el-dialog__wrapper { |
| | |
| | | } |
| | | |
| | | ::v-deep .el-tabs__item { |
| | | width: 1rem; |
| | | width: 1.4rem; |
| | | font-size: 0.14rem; |
| | | line-height: 0.4rem; |
| | | height: 0.4rem; |
| | | padding: 0 20px !important; |
| | | text-align: center; |
| | | } |
| | | |
| | | ::v-deep .el-tabs__header { |
| | |
| | | } |
| | | |
| | | ::v-deep .el-tabs__active-bar { |
| | | /* 设置滚动条宽度 */ |
| | | width: 1rem !important; |
| | | height: 0.03rem !important; |
| | | background-color: #597aa5; |
| | | transform: translateX(-20px); |
| | | /* margin-top: .09rem; */ |
| | | } |
| | | |
| | | ::v-deep .el-tabs__active-bar { |
| | |
| | | opacity: 0; |
| | | } |
| | | } |
| | | |
| | | .fileul li:hover { |
| | | color: #597aa5; |
| | | } |
| | | </style> |