From 587d25c4a1d1a5d240e7750aa0c043a702a737d5 Mon Sep 17 00:00:00 2001 From: QYF-GitLab1 <1940665526@qq.com> Date: 星期四, 18 七月 2024 10:47:30 +0800 Subject: [PATCH] 1 --- src/pages/academicSchools/index.vue | 674 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 667 insertions(+), 7 deletions(-) diff --git a/src/pages/academicSchools/index.vue b/src/pages/academicSchools/index.vue index 6f61006..7b41958 100644 --- a/src/pages/academicSchools/index.vue +++ b/src/pages/academicSchools/index.vue @@ -1,19 +1,679 @@ <template> <view> - <headNav :idIndex="6" text="瀛︽湳娴佹淳" /> + <headNav :idIndex="'6'" text="瀛︽湳娴佹淳" /> + <!-- 楂樼骇鎼滅储 --> + <view style="margin-top: 0.1rem"> + <advancedSearch + @onSearch="onSearch" + @onSubmit="onSubmit" + :from="From" + placehold="璇疯緭鍏ュ叧閿瓧" + :keyword="searchKey" + :advancedSearchBack="advancedSearchBack" + /> + </view> + <!-- 鐑棬鎼滅储 --> + <view class="flex flex-center hotSearch"> + 鐑棬鎼滅储锛� + <ul class="flex" style="margin-right: 10rpx"> + <li + @click="onSearch({ text: item }, index)" + :class="{ cursor: true, active: hotAciveIndex === index }" + v-for="(item, index) in hotKeyList" + :key="item" + > + {{ item }} + </li> + </ul> + </view> + <view style="margin-left: 0.2rem">涔︿腑鏈�甯告彁鍒扮殑100浣嶄汉鐗�</view> + <!-- 鍏崇郴琛ㄥ湴鍥� --> + <div + id="relation" + style="margin-top: 0.1rem; flex: 1; width: 100%; position: relative" + > + <div + v-if="!loading && relationships.length == 0" + style=" + position: absolute; + top: 30%; + left: 0; + right: 0; + text-align: center; + font-size: 0.2rem; + color: #666; + " + > + 鏆傛棤鐩稿叧鏁版嵁 + </div> + </div> </view> </template> <script> -// import * as echarts from "echarts"; -// import axios from "axios"; +import { + getPersonData, + getHotSearch, + getPDataStatistics, +} from "@/api/index.js"; +import * as echarts from "echarts"; export default { data() { - return {}; + return { + loading: true, + hotAciveIndex: "", + currentId: 21682, + // echarts鏁版嵁 + nodes: [], + // echarts涓よ�呯殑鍏崇郴 + relationships: [], + // 楂樼骇鎼滅储 + From: { + from: [ + { + type: "input", + label: "濮撳悕", + name: "name", + value: "", + }, + { + type: "input", + label: "鍒悕", + name: "alias", + value: "", + }, + { + type: "input", + label: "绫嶈疮", + name: "location", + value: "", + }, + { + type: "select", + label: "鑱屼笟", + name: "sdId", + value: "", + options: [ + { + label: "鏈寚鏄�", + value: "UNKNOWN", + }, + ], + }, + { + type: "input", + label: "瀹樿亴", + name: "office", + value: "", + }, + { + type: "select", + label: "鎬у埆", + value: "", + name: "genderTypeEO", + options: [ + { + label: "鏈寚鏄�", + value: "UNKNOWN", + }, + { + label: "鐢�", + value: "MALE", + }, + { + label: "濂�", + value: "WOMAN", + }, + ], + }, + { + type: "input", + label: "鏃舵湡", + name: "period", + value: "", + }, + { + type: "input", + label: "鏈烘瀯", + name: "inst", + value: "", + }, + { + type: "number", + label: "椤电爜", + name: "page", + value: "", + }, + { + type: "number", + label: "椤靛ぇ灏�", + name: "pageSize", + value: "", + }, + ], + }, + // 涓嬮潰鐨勬湞浠�1 + dynastyColor: 1, + // 鏈濅唬 + dynasty: [ + { + name: "澶忔湞", + coord: "2070BC", + id: 1, + }, + { + name: "鍟嗘湞", + id: 2, + coord: "1600BC", + }, + { + name: "瑗垮懆", + id: 3, + coord: "1600BC", + }, + { + name: "鏄ョ鎴樺浗", + id: 4, + coord: "770BC", + }, + { + name: "绉︽湞", + id: 5, + coord: "221BC", + }, + { + name: "姹夋湞", + id: 6, + coord: "202BC", + }, + { + name: "涓夊浗涓ゆ檵鍗楀寳鏈�", + id: 7, + coord: "184", + }, + { + name: "闅嬫湞", + id: 8, + coord: "581", + }, + { + name: "鍞愭湞", + id: 9, + coord: "618", + }, + { + name: "浜斾唬鍗佸浗", + id: 10, + coord: "907", + }, + { + name: "杈藉閲�", + id: 11, + coord: "907", + }, + { + name: "瀹嬫湞", + id: 12, + coord: "960", + }, + { + name: "鍏冩湞", + id: 13, + coord: "1271", + }, + + { + name: "鏄庢湞", + id: 14, + coord: "1368", + }, + { + name: "娓呮湞", + id: 15, + coord: "1636", + }, + ], + // 鐑棬鎼滅储 + hotKeyList: [], + searchKey: "", + + // 鍒嗙被 + categories: [], + // 浜虹墿淇℃伅 + infoOfPersons: [], + // 褰撳墠浜虹墿淇℃伅 + ownInfo: null, + }; }, - onLoad(options) {}, - methods: {} + mounted() { + this.getData(); + // this.echartsArr(); + this.hotSearch(); + // 鐩戝惉绐楀彛澶у皬鍙樺寲 + window.addEventListener("resize", this.relation); + this.innt(); + }, + onLoad(options) { + this.searchKey = options.keyword; + }, + methods: { + getPersonInfo(arr, str, newArr, order, type) { + for (let i = 0; i < arr.length; i++) { + const ele = arr[i]; + const personInfo = this.infoOfPersons.find( + (item) => item.id == ele.personId + ); + const obj = { + personId: ele.personId, + id1: this.ownInfo.id, + id2: personInfo.id, + relationTypeId: ele.relationTypeId, + relationTypeName: ele.relationTypeName, + name1: this.ownInfo?.NAME[0]?.content1, + name2: personInfo?.NAME[0]?.content1, + category: type, + }; + newArr.push(obj); + if (ele[str] && ele[str]?.length) { + this.getPersonInfo(ele[str], "kinList", newArr, 2, type); + } + } + }, + + //鏁扮粍鍘婚噸 + deduplicateArray(arr, idKey) { + // 浣跨敤涓�涓緟鍔╁璞℃潵璺熻釜宸茬粡瑙佽繃鐨処D + const seen = {}; + // 浣跨敤filter鏂规硶杩囨护鏁扮粍 + const deduplicatedArray = arr.filter((item) => { + // 鑾峰彇褰撳墠瀵硅薄鐨処D + const id = item[idKey]; + // 濡傛灉ID鍦ㄨ緟鍔╁璞′腑涓嶅瓨鍦紝鍒欏皢鍏舵坊鍔犲埌瀵硅薄骞惰繑鍥瀟rue + if (!seen[id]) { + seen[id] = true; + return true; + } + // 濡傛灉ID宸茬粡瀛樺湪锛岃繑鍥瀎alse + return false; + }); + + return deduplicatedArray; + }, + getData() { + this.loading = true; + getPersonData(this.currentId).then((res) => { + this.nodes = []; + this.relationships = []; + let kin = []; + let teacher = []; + if (res && res.success && res.object) { + console.log(res.object); + this.infoOfPersons = res.object?.infoOfPersons; + if (res.object?.personChain) { + this.ownInfo = this.infoOfPersons.find( + (item) => item.id == res.object?.personChain.personId + ); + const obj = res.object?.personChain; + console.log(obj.kinList, "kinList"); + if (obj.kinList?.length) { + let newArr = []; + this.categories.push({ name: "浜插睘鍏崇郴" }); + this.getPersonInfo(obj.kinList, "kinList", newArr, 1, 0); + console.log(newArr, "list"); + newArr.forEach((item) => { + let exists1 = this.nodes.some( + (node) => node.id === item.id1 && node.name === item.name1 + ); + let exists2 = this.nodes.some( + (node) => node.id === item.id1 && node.name === item.name2 + ); + // 璇佹槑涓嶅瓨鍦� + if (item.name1 && exists1 !== true) { + this.nodes.push({ + name: item.name1, + id: item.id1, + ...item, + }); + } + if (item.name2 && exists2 !== true) { + this.nodes.push({ + name: item.name2, + id: item.id2, + ...item, + }); + } + let obj = { + source: item.name1, + target: item.name2, + relation: item.relationTypeName || "", // 濡傛灉瀛樺湪 relationName 瀛楁鍒欎娇鐢紝鍚﹀垯涓虹┖瀛楃涓� + }; + this.relationships.push(obj); + }); + } + if (obj.teacherStudentList?.length) { + this.categories.push({ name: "甯堟壙鍏崇郴" }); + } + if (obj.literatureList?.length) { + this.categories.push({ name: "鏂囩尞浣滃搧" }); + } + if (obj.socialList?.length) { + this.categories.push({ name: "绀句細鍏崇郴" }); + } + if (obj.placeList?.length) { + this.categories.push({ name: "娲诲姩鍦�" }); + } + if (obj.schoolList?.length) { + this.categories.push({ name: "瀛︽湳娴佹淳" }); + } + } + } + this.loading = false; + this.relation(); + }); + }, + // 鍏崇郴鍥捐氨 + relation() { + var chartDom = document.getElementById("relation"); + var myChart = echarts.init(chartDom); + // 鍋囪鎮ㄦ湁鑺傜偣鍚嶇О鍜屽畠浠箣闂寸殑鍏崇郴鏁版嵁 + var nodes = this.deduplicateArray(this.nodes, "id"); + var relationships = this.relationships; + + let FontSize = 12; // 瀛椾綋澶у皬 + let BorderWidth = 2; // 杈规澶у皬 + let SymbolSize = 80; // 灏哄璺濈 + let Distance = 10; + // 涓嶅悓灏哄涓嬩慨鏀筫charts鐨勫瓧浣� + if (window.innerWidth > 2560 && window.innerWidth <= 3840) { + FontSize = 20; + BorderWidth = 5; + SymbolSize = 90; + Distance = 33; + } else if (window.innerWidth > 1920 && window.innerWidth <= 2560) { + FontSize = 18; + BorderWidth = 4; + SymbolSize = 80; + Distance = 22; + } else if (window.innerWidth >= 1366 && window.innerWidth <= 1920) { + FontSize = 14; + BorderWidth = 4; + SymbolSize = 70; + Distance = 22; + } + // 鏍规嵁鍏崇郴鏁版嵁鐢熸垚杩炴帴绾� + var links = []; + relationships.forEach((relationship, i) => { + var sourceIndex = nodes.findIndex( + (node) => node.name === relationship.source + ); + var targetIndex = nodes.findIndex( + (node) => node.name === relationship.target + ); + if (relationship.relation) { + if (sourceIndex !== -1 && targetIndex !== -1) { + links.push({ + source: sourceIndex, + target: targetIndex, + label: { + show: true, + formatter: function (params) { + // 浣跨敤鍑芥暟鍔ㄦ�佺敓鎴愭爣绛惧唴瀹� + // return relationships.find(rel => rel.source === nodes[params.data + // .source] && rel.target === nodes[params.data.target]) + // .relation; + return relationship.relation; + }, // 璁剧疆鍏崇郴鏍囩鍐呭涓�"Child-Parent" + color: "#2C2C2C", + fontSize: FontSize - 2, + backgroundColor: "rgba(255, 255, 255, 1)", + padding: [3, 8], + borderRadius: 30, + position: "middle", // 璁剧疆鏍囩鏂囨湰鍦ㄧ嚎鐨勪腑闂翠綅缃笂灞呬腑鏄剧ず + // z: -1, // 璁剧疆鏍囩鐨剒杞撮珮搴︼紝浣垮叾姣旇繛鎺ョ嚎鏇撮珮 + distance: -10, // 灏嗘爣绛炬斁缃湪杩炴帴绾夸笂 + }, + }); + } + } + }); + // 鏍规嵁nodes鍔ㄦ�佺敓鎴愯妭鐐规暟鎹� + var nodeData = nodes.map(function (node, index) { + return { + name: node.name, + id: node.id, + itemStyle: { + color: "#eae0eb", // 鍙互鏍规嵁绱㈠紩璁剧疆涓嶅悓鐨勯鑹� + borderWidth: BorderWidth, + borderColor: "#996f9f", + }, + }; + }); + + var option; + option = { + title: { + // text: '涔︿腑鏈�甯告彁鍒扮殑100浣嶄汉鐗�', + // subtext: '', + left: "center", + top: FontSize + 10, + // textStyle: { + // fontSize: FontSize // 璁剧疆鏍囬鏂囧瓧澶у皬涓� 18px + // }, + subtextStyle: { + fontSize: FontSize, // 璁剧疆鍓爣棰樻枃瀛楀ぇ灏忎负 14px + color: "#2C2C2C", + }, + }, + backgroundColor: { + type: "image", + image: "/static/image/characterRelationBg.png", + // repeat: 'repeat-x', // 鏄惁骞抽摵锛屽彲浠ユ槸 'repeat-x', 'repeat-y', 'no-repeat' + size: "100% 100%", // 鑳屾櫙鍥剧墖鐨勫昂瀵革紝鍙互鏄櫨鍒嗘瘮鎴栬�呭儚绱� + position: "center center", // 鑳屾櫙鍥剧墖鐨勪綅缃紝鍙互鏄� top, bottom, middle 鎴栬�呯櫨鍒嗘瘮 + }, + tooltip: {}, + legend: [ + { + // selectedMode: 'single', + data: this.categories.map(function (a) { + return a.name; + }), + }, + ], + animationDurationUpdate: 1500, + animationEasingUpdate: "quinticInOut", + series: [ + { + type: "graph", + layout: "force", + roam: true, + symbolSize: SymbolSize, // 璋冩暣鑺傜偣澶у皬 + label: { + show: true, + color: "black", // 璁剧疆鑺傜偣鏂囧瓧棰滆壊涓洪粦鑹� + fontSize: FontSize, // 璁剧疆鏂囧瓧澶у皬 + }, + edgeSymbol: ["circle", "arrow"], + edgeSymbolSize: [4, 10], + data: nodeData, + links: links, + categories: this.categories, + lineStyle: { + opacity: 0.9, + width: 2, + curveness: 0.3, + }, + emphasis: { + focus: "adjacency", + lineStyle: { + width: 10, + }, + }, + force: { + // layoutAnimation: false, + // friction: 1, + repulsion: 800, + edgeLength: 400, + }, + }, + // { + // name: "Les Miserables", + // type: "graph", + // legendHoverLink: false, + // layout: "none", + // data: nodeData, + // links: links, + // categories: this.categories, + // roam: true, + // label: { + // position: "right", + // formatter: "{b}", + // }, + // lineStyle: { + // color: "source", + // curveness: 0.3, + // }, + // emphasis: { + // focus: "adjacency", + // lineStyle: { + // width: 10, + // }, + // }, + // }, + ], + }; + // 灏嗙敓鎴愮殑杩炴帴绾挎坊鍔犲埌echarts鍥捐〃鐨刼ption涓� + option.series[0].links = links; + // 璁剧疆鐐瑰嚮浜嬩欢鐩戝惉 + myChart.off("click"); + myChart.on("click", (params) => { + if (params.dataType === "node") { + this.spaceTimeArr(params.data.id); + } + }); + option && myChart.setOption(option); + }, + // 鍩虹鎼滅储 + onSearch(val, index) { + if (index !== undefined) { + this.searchKey = ""; + this.hotAciveIndex = index; + } else { + this.hotAciveIndex = ""; + } + // this.searchKey = val.text; + this.getData(val.text); + }, + // 楂樼骇鎼滅储 + onSubmit(val) { + getAdvanceSearch({ + ...val, + page: 1, + pageSize: 100, + }).then((res) => { + console.log(res, "res"); + }); + }, + advancedSearchBack() { + uni.navigateTo({ + url: "/pages/knowledgeBase/knowledgeBase", + }); + }, + // 鐐瑰嚮涓嬮潰鐨勬湞浠f寜閽� + dynastyBottomClick(item) { + this.dynastyColor = item.id; + this.onSearch({ + text: item.name, + }); + }, + // 鍏崇郴鍥� 鐐瑰嚮閲岄潰鐨勫厓绱� + spaceTimeArr(id) { + // 鍏崇郴鍥剧殑鏁版嵁 + uni.navigateTo({ + url: "/pages/character/detail?id=" + id, + }); + }, + // 鑾峰彇鏈濅唬echarts鐨勬暟鎹� + echartsArr() { + getDataStatistics().then((res) => { + res.object.dynastyStatistic.details.map((item, index) => { + // this.dynasty.id = item.dynastyId + // this.dynasty.name = item.dynastyName + // this.dynasty.coord = item.count + this.dynasty[index].id = item.dynastyId; + this.dynasty[index].name = item.dynastyName; + this.dynasty[index].coord = item.count; + }); + }); + }, + // 鐑棬鎼滅储 + hotSearch() { + getHotSearch().then((res) => { + const indexList = Object.keys(res.object); + indexList.sort((a, b) => parseInt(b) - parseInt(a)); + this.hotKeyList = indexList.map((item) => { + return res.object[item]; + }); + }); + }, + + // 楂樼骇鎼滅储閲岄潰鑱屼笟鐨勪笅鎷夎彍鍗� + innt() { + getPDataStatistics().then((res) => { + const professionIndex = this.From.from.findIndex( + (field) => field.label === "鑱屼笟" + ); + // 濡傛灉鎵惧埌浜嗚亴涓氬瓧娈� + if (professionIndex !== -1) { + // 灏� profession.list 杞崲涓� options 鏍煎紡 + const options = res.object.occupationStatistic.details.map( + (item) => ({ + label: item.tagName, + value: item.tagId.toString(), // 灏� id 杞崲涓哄瓧绗︿覆锛岀‘淇濅笌 value 绫诲瀷涓�鑷� + }) + ); + // 鏇存柊鑱屼笟瀛楁鐨� options 灞炴�� + this.$set(this.From.from[professionIndex], "options", options); + } + }); + }, + }, }; </script> -<style></style> +<style> +@media screen and (min-width: 2560px) and (max-width: 3840px) { +} + +@media screen and (min-width: 1366px) and (max-width: 1920px) { +} + +::v-deep .uni-input-placeholder { + line-height: 1; + font-size: 0.12rem; +} + +::v-deep .ffff { + border-radius: 0.5rem; +} + +::v-deep .widget_button { + border-radius: 0.5rem; + margin: 0.02rem; +} + +.hotSearch { + font-size: 0.12rem; + color: #2c2c2c; + + li { + color: #244a7b; + margin: 0 0.1rem; + color: #244a7b; + &.active { + color: #027edc; + font-weight: bold; + } + } +} +</style> -- Gitblit v1.9.1