| | |
| | | <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> |
| | | <view |
| | | v-if="biogData.length > 1" |
| | | style="font-size: 0.12rem; color: #244a7b; cursor: pointer" |
| | | @click="ProfileClick" |
| | | >阅读更多></view |
| | |
| | | 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 style="overflow: auto"> |
| | | <el-image |
| | | v-for="item in imageList" |
| | | :key="item" |
| | | style=" |
| | | width: 2.05rem; |
| | | height: 2.4rem; |
| | | margin-right: 0.2rem; |
| | | margin-bottom: 0.1rem; |
| | | " |
| | | :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" |
| | |
| | | getPersonInfo, |
| | | getRelationTypeTreeList, |
| | | getWebBasic, |
| | | getDynastyAll, |
| | | getIntroduction, |
| | | getSource, |
| | | getPersonImages, |
| | | getPersonBiog, |
| | | getPersonWritings, |
| | | getPersonRelationAtSchool, |
| | | getSpaceTime |
| | | getSpaceTime, |
| | | getDynastyData |
| | | } from "@/api/index.js"; |
| | | import { getImg } from "@/static/tool.js"; |
| | | import L from "leaflet"; |
| | |
| | | }, |
| | | { |
| | | prop: "d", |
| | | width: 300, |
| | | showOverflowTooltip: true, |
| | | label: "出处" |
| | | } |
| | | ], |
| | |
| | | // 获取时空地图 |
| | | 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); |
| | |
| | | }); |
| | | }, |
| | | toLink(item) { |
| | | console.log(item); |
| | | if (item.url) { |
| | | window.open(item.url); |
| | | } |
| | |
| | | : 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" |
| | | }).then((res) => { |
| | | this.personResearchList = res.object.personResearchList; |
| | | }); |
| | | |
| | | getWebBasic({ |
| | | personId: this.detailId |
| | | }).then((res) => { |
| | | const obj = res.object; |
| | | if (obj.school) { |
| | | getIntroduction(Number(obj.school)).then((sres) => { |
| | | this.handleData(obj, sres); |
| | | }); |
| | | } else { |
| | | this.handleData(obj); |
| | | } |
| | | }); |
| | | |
| | | // 活动年谱 |
| | |
| | | a: item.time, |
| | | b: item.activityName, |
| | | c: item.activityAddrOld, |
| | | d: item.desc // 这里缺少活动描述字段 |
| | | d: item.desc |
| | | }; |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | handleData(obj, sres) { |
| | | handleData(obj, sres, dynastyData) { |
| | | this.tableArr = [ |
| | | { |
| | | list: [ |
| | | { |
| | | name: "别名", |
| | | value: obj.alias || "-" |
| | | name: "姓名", |
| | | value: obj.name || "-" |
| | | }, |
| | | { |
| | | name: "字", |
| | |
| | | }, |
| | | { |
| | | name: "所处时期", |
| | | value: obj.dynastyDesc || "-", |
| | | value: |
| | | dynastyData.find((item) => item.dynastyId == obj.dynastyId) |
| | | .name || "-", |
| | | valueClick: () => { |
| | | uni.navigateTo({ |
| | | url: |
| | |
| | | getPersonImages({ |
| | | 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 |
| | | }).then((res) => { |
| | | this.biogData = res.list.map((item) => { |
| | | return { |
| | | content: item.content1, |
| | | bookName: |
| | | "《" + |
| | | item.bookName + |
| | | "》 " + |
| | | (item.pageNo ? "P " + item.pageNo : "") // 这里只有bookid无法匹配到书名 |
| | | }; |
| | | }); |
| | | }); |
| | | }, |
| | | getBiog() { |
| | |
| | | }); |
| | | }, |
| | | getRelationship() { |
| | | getRelationTypeTreeList().then((res) => { |
| | | console.log(res, "getRelationTypeTreeList"); |
| | | console.log(res); |
| | | }); |
| | | // getPersonRelationAtSchool({ |
| | | // personId: this.detailId, |
| | | // }).then((res) => { |
| | | // this.personRelationList = res.object.personRelationList; |
| | | // if (this.personRelationList.length) { |
| | | // this.tableData4 = this.personRelationList.map((f) => { |
| | | // return { |
| | | // a: f.nodeName, |
| | | // b: f.relationTypeName, |
| | | // }; |
| | | // }); |
| | | // } |
| | | // }); |
| | | getPersonInfo({ |
| | | id: this.detailId, |
| | | type: "PERSON_RELATIONS" |
| | | }).then((res) => { |
| | | this.tableData4; |
| | | console.log(res, "PERSON_RELATIONS"); |
| | | }); |
| | | // 社会关系 |
| | | getPersonRelationAtSchool({ |
| | | personId: this.detailId, |
| | | relationSearchTypeEO: "SOCIAL" |
| | | }).then((res) => { |
| | | if (res.list && res.list.length) { |
| | | this.tableData4 = res.list.map((f) => { |
| | | if (res.object.personRelationMap.kin.length) { |
| | | this.tableData2 = res.object.personRelationMap.kin.map((f) => { |
| | | return { |
| | | a: f.name1, |
| | | b: f.relationName |
| | | 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 |
| | | : "" |
| | | }; |
| | | }); |
| | | } |
| | | }); |
| | | // 亲属关系 |
| | | getPersonRelationAtSchool({ |
| | | personId: this.detailId, |
| | | relationSearchTypeEO: "KINSHIP" |
| | | }).then((res) => { |
| | | if (res.list && res.list.length) { |
| | | this.tableData2 = res.list.map((f) => { |
| | | return { |
| | | a: f.name1, |
| | | b: f.relationName |
| | | }; |
| | | }); |
| | | 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 |
| | | : "" |
| | | }; |
| | | } |
| | | ); |
| | | } |
| | | }); |
| | | // 师承关系 |
| | | getPersonRelationAtSchool({ |
| | | personId: this.detailId, |
| | | relationSearchTypeEO: "INHERITANCE" |
| | | }).then((res) => { |
| | | if (res.list && res.list.length) { |
| | | this.tableData3 = res.list.map((f) => { |
| | | if (res.object.personRelationMap.social.length) { |
| | | this.tableData4 = res.object.personRelationMap.social.map((f) => { |
| | | return { |
| | | a: f.name1, |
| | | b: f.relationName |
| | | 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 = []; |
| | |
| | | .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) => { |
| | |
| | | |
| | | <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; |
| | | } |
| | | |
| | | /* --------------- */ |
| | |
| | | } |
| | | .BoxRight { |
| | | width: 70%; |
| | | } |
| | | |
| | | ::v-deep .el-tabs__content { |
| | | line-height: 1; |
| | | } |
| | | |
| | | /* 个人小传 ------------------*/ |
| | |
| | | } |
| | | |
| | | /* ------------------- */ |
| | | |
| | | 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 { |