From db966eb618d50a472fa6d882445eda2912be3c62 Mon Sep 17 00:00:00 2001 From: 杨磊 <505174330@qq.com> Date: 星期三, 12 六月 2024 16:14:47 +0800 Subject: [PATCH] 地域图谱显示小传- --- src/pages/character/detail.vue | 526 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 349 insertions(+), 177 deletions(-) diff --git a/src/pages/character/detail.vue b/src/pages/character/detail.vue index a7dd262..d3a5697 100644 --- a/src/pages/character/detail.vue +++ b/src/pages/character/detail.vue @@ -1,26 +1,17 @@ <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 - style="width: 70%" - class="flex flex-center flex-column" + <el-button class="MiddeBack flex flex-center" @click="goBack" + >杩斿洖</el-button > + <view style="width: 70%" class="flex flex-center flex-column"> <view style="font-weight: bold; font-size: 0.2rem">{{ detailInfo.NAME }}</view> - <ul - class="flex" - style="line-height: 1.2; margin: 0.15rem 0" - > - <li style=" + <ul class="flex" style="line-height: 1.2; margin: 0.15rem 0"> + <li + style=" background-color: #fff; padding: 0 0.08rem; border: 0.01rem solid #000; @@ -28,10 +19,13 @@ font-size: 0.12rem; text-align: center; margin-right: 0.15rem; - "> + " + @click="openFileClick(1)" + > RDF </li> - <li style=" + <li + style=" background-color: #fff; padding: 0 0.08rem; border: 0.01rem solid #000; @@ -39,10 +33,14 @@ font-size: 0.12rem; text-align: center; margin-right: 0.15rem; - "> + cursor: pointer; + " + @click="openFileClick(2)" + > NT </li> - <li style=" + <li + style=" background-color: #fff; padding: 0 0.08rem; border: 0.01rem solid #000; @@ -50,10 +48,14 @@ font-size: 0.12rem; text-align: center; margin-right: 0.15rem; - "> + cursor: pointer; + " + @click="openFileClick(3)" + > XML </li> - <li style=" + <li + style=" background-color: #fff; padding: 0 0.08rem; border: 0.01rem solid #000; @@ -61,26 +63,32 @@ font-size: 0.12rem; text-align: center; margin-right: 0.15rem; - "> + cursor: pointer; + " + @click="openFileClick(4)" + > JSON </li> </ul> <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 : "-" }} </view> - <view - class="flex" - style="width: 100%; margin: 0.25rem 0 0.15rem 0" - > + <view class="flex" style="width: 100%; margin: 0.25rem 0 0.15rem 0"> <view> <!-- <el-button style="padding: 10rpx;" size="mini" icon="el-icon-folder-add">鏀惰棌</el-button> --> <el-button @@ -88,16 +96,15 @@ class="yinyong flex" @click="copyText" > - <img - src="@/static/image/yinyong.png" - alt="" - />寮曠敤</el-button> + <img src="@/static/image/yinyong.png" alt="" />寮曠敤</el-button + > </view> - <!-- v-if="biogData.length > 1" --> <view + v-if="biogData.length > 1" style="font-size: 0.12rem; color: #244a7b; cursor: pointer" @click="ProfileClick" - >闃呰鏇村></view> + >闃呰鏇村></view + > </view> </view> <view style="width: 5%"></view> @@ -110,10 +117,7 @@ style="padding-right: 0.2rem; width: 2.8rem" > <div class="grid-content bg-purple-dark flex flex-column"> - <el-card - class="box-card" - style="width: 100%; height: 2.06rem" - > + <el-card class="box-card" style="width: 100%; height: 2.06rem"> <div class="clearfix flex" style=" @@ -122,11 +126,14 @@ padding-bottom: 0.1rem; " > - <span style=" + <span + style=" margin-left: 0.12rem; font-size: 0.14rem; font-weight: 900; - ">鍏崇郴鍥捐氨</span> + " + >鍏崇郴鍥捐氨</span + > <!-- <el-button icon="el-icon-rank" style="float: right; padding: 3px 0;" type="text"></el-button> --> <img src="@/static/image/fangda.png" @@ -135,10 +142,7 @@ alt="" /> </div> - <view - id="relation" - style="height: 1.51rem; width: 100%" - ></view> + <view id="relation" style="height: 1.51rem; width: 100%"></view> </el-card> <el-card class="box-card" @@ -155,6 +159,7 @@ <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" @@ -163,7 +168,19 @@ <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 @@ -203,18 +220,9 @@ </div> </div> <!-- 鍙充晶 --> - <div - :span="18" - class="BoxRight" - > - <div - class="grid-content bg-purple-dark" - style="width: 100%" - > - <el-card - class="box-card" - style="padding: 0" - > + <div :span="18" class="BoxRight"> + <div class="grid-content bg-purple-dark" style="width: 100%"> + <el-card class="box-card" style="padding: 0"> <div class="clearfix" style=" @@ -232,60 +240,36 @@ class="box-card" style="min-height: 1.91rem; margin: 0.2rem 0" > - <el-tabs - ref="tabs" - v-model="activeName" - @tab-click="handleClick" - > - <el-tab-pane - label="浠h〃钁椾綔" - data-id="1" - name="representative" - > + <el-tabs ref="tabs" v-model="activeName" @tab-click="handleClick"> + <el-tab-pane label="浠h〃钁椾綔" data-id="1" name="representative"> <Table1 :data="tableData1" :columns="tableColumns1" :height="400" /> </el-tab-pane> - <el-tab-pane - label="浜插睘鍏崇郴" - data-id="2" - name="family " - > + <el-tab-pane label="浜插睘鍏崇郴" data-id="2" name="family "> <Table1 :data="tableData2" :columns="tableColumns2" :height="400" /> </el-tab-pane> - <el-tab-pane - label="甯堟壙鍏崇郴" - data-id="3" - name="mentoring " - > + <el-tab-pane label="甯堟壙鍏崇郴" data-id="3" name="mentoring "> <Table1 :data="tableData3" :columns="tableColumns2" :height="400" /> </el-tab-pane> - <el-tab-pane - label="绀句細鍏崇郴" - data-id="4" - name="society" - > + <el-tab-pane label="绀句細鍏崇郴" data-id="4" name="society"> <Table1 :data="tableData4" :columns="tableColumns2" :height="400" /> </el-tab-pane> - <el-tab-pane - label="娲诲姩骞磋氨" - data-id="5" - name="activity" - > + <el-tab-pane label="娲诲姩骞磋氨" data-id="5" name="activity"> <Table1 :data="tableData5" :columns="tableColumns3" @@ -306,11 +290,16 @@ <span>鐩稿叧闄勮〃/鍥惧儚</span> </div> <view> - <div class="flex"> + <div style="overflow: auto"> <el-image v-for="item in imageList" :key="item" - style="width: 2.05rem; height: 2.4rem" + style=" + width: 2.05rem; + height: 2.4rem; + margin-right: 0.2rem; + margin-bottom: 0.1rem; + " :src="item" fit="fill" ></el-image> @@ -334,11 +323,9 @@ > <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)" @@ -346,7 +333,7 @@ {{ "[" + 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" > 鏆傛棤鏁版嵁 @@ -358,19 +345,24 @@ </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" ></el-button> </el-col> <!-- 涓汉灏忎紶 --> - <el-dialog - :visible.sync="isProfile" - :modal-append-to-body="false" - > + <el-dialog :visible.sync="isProfile" :modal-append-to-body="false"> <view class="ProfileNav flex flex-center"> 涓汉灏忎紶 </view> <view style="padding: 0.44rem 0.3rem; min-height: 7.32rem" @@ -393,7 +385,9 @@ </view> <view class="flex"> <view></view> - <view style="font-weight: 700; color: #2c2c2c">鈥斺�攞{ item.pageNo }}</view> + <view style="font-weight: 700; color: #2c2c2c" + >鈥斺�攞{ item.bookName }}</view + > </view> </view> </view> @@ -412,6 +406,7 @@ import { getFuzzySearch, getPersonInfo, + getRelationTypeTreeList, getWebBasic, getIntroduction, getSource, @@ -420,8 +415,11 @@ getPersonWritings, getPersonRelationAtSchool, getSpaceTime, + getDynastyData, } from "@/api/index.js"; -import { getImg } from "@/static/tool.js"; +import { getImg, getFile } from "@/static/tool.js"; +import L from "leaflet"; +import "leaflet.chinatmsproviders"; export default { components: { @@ -509,6 +507,7 @@ nodes: [], relationships: [], personResearchList: [], + markerList: [], }; }, onLoad(options) { @@ -543,8 +542,8 @@ }, 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); @@ -557,7 +556,13 @@ }); }, toLink(item) { - window.open(item.url); + console.log(item); + if (item.url) { + window.open(item.url); + } + if (item.filePath) { + window.open(getFile(item.filePath)); + } }, getData() { // 鍩烘湰淇℃伅 @@ -590,33 +595,17 @@ }).then((res) => { this.personResearchList = res.object.personResearchList; }); - getPersonInfo({ - id: this.detailId, - type: "PERSON_RELATIONS", - }).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); + this.handleData(obj, sres); }); } else { - handleData(obj); + this.handleData(obj); } }); @@ -625,14 +614,16 @@ id: this.detailId, 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) { @@ -654,6 +645,11 @@ { name: "鎵�澶勬椂鏈�", value: obj.dynastyDesc || "-", + valueClick: () => { + uni.navigateTo({ + url: "/pages/knowledgeBase/knowledgeBase?dynasty=" + obj.dynastyId + }); + } }, { name: "姘戞棌", @@ -674,6 +670,11 @@ { name: "鑱屽畼", value: obj.official || "-", + valueClick: () => { + uni.navigateTo({ + url: "/pages/knowledgeBase/knowledgeBase?isAdvancedSearch=1&official=" + obj.official + }); + } }, { name: "娴佹淳", @@ -714,7 +715,11 @@ this.biogData = res.list.map((item) => { return { content: item.content1, - pageNo: "銆�" + item.pageNo + "銆� " + "P " + item.pageNo, // 杩欓噷鍙湁bookid鏃犳硶鍖归厤鍒颁功鍚� + bookName: + "銆�" + + item.bookName + + "銆� " + + (item.pageNo ? "P " + item.pageNo : ""), // 杩欓噷鍙湁bookid鏃犳硶鍖归厤鍒颁功鍚� }; }); }); @@ -735,12 +740,96 @@ }); }, 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"); + if (res.object.personRelationMap.kin.length) { + this.tableData2 = res.object.personRelationMap.kin.map((f) => { + return { + a: f.nodeName, + b: f.relationTypeName, + }; + }); + } + if (res.object.personRelationMap.teacherStudent.length) { + this.tableData3 = res.object.personRelationMap.teacherStudent.map((f) => { + return { + a: f.nodeName, + b: f.relationTypeName, + }; + }); + } + if (res.object.personRelationMap.social.length) { + this.tableData4 = res.object.personRelationMap.social.map((f) => { + return { + a: f.nodeName, + b: f.relationTypeName, + }; + }); + } + }); + // 绀句細鍏崇郴 getPersonRelationAtSchool({ personId: this.detailId, - // relationSearchTypeEO: "SOCIAL" + relationSearchTypeEO: "SOCIAL", }).then((res) => { - console.log(res, "getPersonRelationAtSchool"); - // 杩欓噷鎺ュ彛鏈夐棶棰� + if (res.list && res.list.length) { + this.tableData4 = res.list.map((f) => { + return { + a: f.name1, + b: f.relationName, + }; + }); + } + }); + // 浜插睘鍏崇郴 + getPersonRelationAtSchool({ + personId: this.detailId, + relationSearchTypeEO: "KINSHIP", + }).then((res) => { + console.log(res, "123123"); + if (res.list && res.list.length) { + this.tableData2 = res.list.map((f) => { + return { + a: f.name1, + b: f.relationName, + }; + }); + } + }); + // 甯堟壙鍏崇郴 + getPersonRelationAtSchool({ + personId: this.detailId, + relationSearchTypeEO: "INHERITANCE", + }).then((res) => { + if (res.list && res.list.length) { + this.tableData3 = res.list.map((f) => { + return { + a: f.name1, + b: f.relationName, + }; + }); + } }); }, getMappingData(name) { @@ -758,13 +847,13 @@ (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, }); } - if (exists2 !== true) { + if (item.name2 && exists2 !== true) { this.nodes.push({ name: item.name2, id: item.identifier2, @@ -785,20 +874,68 @@ getSpaceTime({ personId: this.detailId, }).then((res) => { - console.log(res, "getSpaceTime"); - const data = res.list.map((item) => { - return { - name: item.activityName, - value: [item.xcoord, item.ycoord], - }; - }); - // 鏃剁┖鍦板浘 - loadBMap("1NJdwrI1CfT6lrykVhDkmWgsO6O2bjQK").then(() => { - this.spaceTime(data); - }); + 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[0].value[1], markerList[0].value[0]], 13); + L.tileLayer + .chinaProvider("TianDiTu.Normal.Map", { + key: "76bc34ead7e30e663a4eded8aeaf5860", + maxZoom: 18, + 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", + }); + this.map = map; + const temp_mark = L.marker([markerList.value[1], markerList.value[0]], { + 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) { @@ -825,6 +962,32 @@ top: 0, behavior: "smooth", // 浣跨敤骞虫粦婊氬姩 }); + }, + openFileClick(index) { + let obj = { + id: this.detailId, + type: "Person", + }; + switch (index) { + case 1: + obj.outputType = "RDF"; + break; + case 2: + obj.outputType = "NT"; + break; + case 3: + obj.outputType = "XML"; + break; + case 4: + obj.outputType = "JSON"; + break; + } + let queryString = Object.keys(obj) + .map( + (key) => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}` + ) + .join("&"); + window.open(`#/pages/fileDetail/index?${queryString}`); }, handleClick(tab) { let index = tab.$attrs["data-id"] - 1; @@ -991,28 +1154,6 @@ var myChart = echarts.init(chartDom); var option; - // const data = [ - // { - // name: "娴烽棬", - // value: [121.15, 31.89] - // }, - // { - // name: "閯傚皵澶氭柉", - // value: [109.781327, 39.608266] - // }, - // { - // name: "鎷涜繙", - // value: [120.38, 37.35] - // }, - // { - // name: "鑸熷北", - // value: [122.207216, 29.985295] - // }, - // { - // name: "榻愰綈鍝堝皵", - // value: [123.97, 47.33] - // } - // ]; option = { title: { text: "", @@ -1253,10 +1394,6 @@ padding: 0; } -::v-deep .el-dialog__wrapper { - z-index: 999999999999999 !important; -} - .ProfileNav { width: 100%; height: 0.7rem; @@ -1413,4 +1550,39 @@ .BoxRight .box-card { margin-bottom: 0.2rem !important; } +::v-deep .map-circle-name { + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgb(222, 142, 102); +} +::v-deep .ripple { + border-radius: 50%; + position: relative; + overflow: hidden; +} + +::v-deep .ripple::before { + content: ""; + position: absolute; + top: 50%; + left: 50%; + width: 150%; /* Ensure it covers the entire parent */ + height: 150%; + background: rgba(255, 255, 255, 0.5); + border-radius: 50%; + transform: translate(-50%, -50%) scale(1); + animation: ripple-animation 1s infinite linear; +} + +@keyframes ripple-animation { + to { + transform: translate(-50%, -50%) scale(0); + opacity: 0; + } +} + +.fileul li:hover { + color: #597aa5; +} </style> -- Gitblit v1.9.1