From 856b67db405f17d1c0ab99dcf0bb5da6323e4903 Mon Sep 17 00:00:00 2001 From: YM <479443481@qq.com> Date: 星期五, 19 七月 2024 11:09:10 +0800 Subject: [PATCH] Merge branch 'master' of http://182.92.203.7:2001/r/TCM_CharacterLibrary --- src/pages/academicSchools/index.vue | 398 +++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 288 insertions(+), 110 deletions(-) diff --git a/src/pages/academicSchools/index.vue b/src/pages/academicSchools/index.vue index 7b41958..c3c251c 100644 --- a/src/pages/academicSchools/index.vue +++ b/src/pages/academicSchools/index.vue @@ -1,5 +1,7 @@ <template> - <view> + <view + style="width: 100%; height: 100%; display: flex; flex-direction: column" + > <headNav :idIndex="'6'" text="瀛︽湳娴佹淳" /> <!-- 楂樼骇鎼滅储 --> <view style="margin-top: 0.1rem"> @@ -26,7 +28,6 @@ </li> </ul> </view> - <view style="margin-left: 0.2rem">涔︿腑鏈�甯告彁鍒扮殑100浣嶄汉鐗�</view> <!-- 鍏崇郴琛ㄥ湴鍥� --> <div id="relation" @@ -46,6 +47,20 @@ > 鏆傛棤鐩稿叧鏁版嵁 </div> + </div> + <div id="customDialog" class="customDialog"> + <div class="title"> + <span>{{ detailData.name }}</span> + <span @click="closeDom">鍏抽棴</span> + </div> + <div class="content"> + <p>濮撳悕锛歿{ detailData.name }}</p> + <p>鍒悕锛歿{ detailData.alias }}</p> + <p>绫嶈疮锛歿{ detailData.nativePlace }}</p> + <p>鍖诲鍒嗙锛� {{ detailData.medicalBranch }}</p> + <p>灏忎紶锛歿{ detailData.biography }}</p> + </div> + <div class="btn">鏌ョ湅鏇村>>></div> </div> </view> </template> @@ -241,8 +256,13 @@ categories: [], // 浜虹墿淇℃伅 infoOfPersons: [], + // 瀛︽湳娴佹淳 + infoOfSchools: [], // 褰撳墠浜虹墿淇℃伅 ownInfo: null, + detailData: { + name: "", + }, }; }, mounted() { @@ -257,7 +277,8 @@ this.searchKey = options.keyword; }, methods: { - getPersonInfo(arr, str, newArr, order, type) { + // 鑾峰彇浜虹墿鍏崇郴 + getPersonInfo(arr, str, newArr, order, type, parent) { for (let i = 0; i < arr.length; i++) { const ele = arr[i]; const personInfo = this.infoOfPersons.find( @@ -265,19 +286,58 @@ ); const obj = { personId: ele.personId, - id1: this.ownInfo.id, + parentId: parent.id, id2: personInfo.id, relationTypeId: ele.relationTypeId, relationTypeName: ele.relationTypeName, - name1: this.ownInfo?.NAME[0]?.content1, + parentName: parent?.NAME[0]?.content1 ?? parent.parentName, name2: personInfo?.NAME[0]?.content1, category: type, }; + if (str == "literatureList") { + obj.relationTypeName = ele.literatureName; + } + if (str == "schoolList") { + const nameData = this.infoOfSchools?.find( + (i) => i.schoolId == ele.schoolId + ); + obj.relationTypeName = nameData?.name[0]; + } + if (str == "placeList") { + obj.relationTypeName = ele.ancientName ?? ele.currentName; + } newArr.push(obj); if (ele[str] && ele[str]?.length) { - this.getPersonInfo(ele[str], "kinList", newArr, 2, type); + order++; + this.getPersonInfo(ele[str], str, newArr, order, type, personInfo); } } + }, + + // 澶勭悊鏁版嵁 + changeLiterature(arr, str) { + for (let i = 0; i < arr.length; i++) { + const ele = arr[i]; + if (!ele.personId && ele.personList?.length) { + ele.literatureList = []; + ele.personId = this.ownInfo.id; + if (ele[str] && ele[str]?.length) { + for (let j = 0; j < ele.personList.length; j++) { + const item = ele.personList[j]; + const data = item[str]?.map((e) => { + return { + ...e, + personId: item.personId, + }; + }); + if (data?.length) { + ele[str].push(...data); + } + } + } + } + } + return arr; }, //鏁扮粍鍘婚噸 @@ -299,73 +359,148 @@ return deduplicatedArray; }, + + // 鏌ヨ璇︽儏 getData() { this.loading = true; getPersonData(this.currentId).then((res) => { this.nodes = []; this.relationships = []; - let kin = []; + let kinData = []; let teacher = []; + let literature = []; + let social = []; + let place = []; + let school = []; if (res && res.success && res.object) { console.log(res.object); this.infoOfPersons = res.object?.infoOfPersons; + this.infoOfSchools = res.object?.infoOfSchools; 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); - }); + this.getPersonInfo( + obj.kinList, + "kinList", + newArr, + 1, + 0, + this.ownInfo + ); + kinData = [...newArr]; } if (obj.teacherStudentList?.length) { this.categories.push({ name: "甯堟壙鍏崇郴" }); + let newArr = []; + this.getPersonInfo( + obj.teacherStudentList, + "teacherStudentList", + newArr, + 1, + 1, + this.ownInfo + ); + teacher = [...newArr]; } if (obj.literatureList?.length) { this.categories.push({ name: "鏂囩尞浣滃搧" }); + let newArr = []; + const data = this.changeLiterature( + obj.literatureList, + "literatureList" + ); + this.getPersonInfo( + data, + "literatureList", + newArr, + 1, + 2, + this.ownInfo + ); + literature = [...newArr]; } if (obj.socialList?.length) { + let newArr = []; this.categories.push({ name: "绀句細鍏崇郴" }); + const data = this.changeLiterature(obj.socialList, "socialList"); + this.getPersonInfo( + data, + "socialList", + newArr, + 1, + 3, + this.ownInfo + ); + social = [...newArr]; } if (obj.placeList?.length) { this.categories.push({ name: "娲诲姩鍦�" }); + let newArr = []; + const data = this.changeLiterature(obj.placeList, "placeList"); + this.getPersonInfo(data, "placeList", newArr, 1, 4, this.ownInfo); + place = [...newArr]; + // console.log(place, "placeList"); } if (obj.schoolList?.length) { this.categories.push({ name: "瀛︽湳娴佹淳" }); + let newArr = []; + const data = this.changeLiterature(obj.schoolList, "schoolList"); + this.getPersonInfo( + data, + "schoolList", + newArr, + 1, + 3, + this.ownInfo + ); + school = [...newArr]; + // console.log(school, "schoolList"); } } + const personData = [ + ...kinData, + ...teacher, + ...literature, + ...social, + ...place, + ...school, + ]; + // console.log(personData) + personData.forEach((item) => { + let exists1 = this.nodes.some( + (node) => + node.id === item.parentId && node.name === item.parentName + ); + let exists2 = this.nodes.some( + (node) => node.id === item.parentId && node.name === item.name2 + ); + // 璇佹槑涓嶅瓨鍦� + if (item.name1 && exists1 !== true) { + this.nodes.push({ + name: item.parentName, + id: item.parentId, + ...item, + }); + } + if (item.name2 && exists2 !== true) { + this.nodes.push({ + name: item.name2, + id: item.id2, + ...item, + }); + } + let obj = { + source: item.parentName, + target: item.name2, + relation: item.relationTypeName || "", // 濡傛灉瀛樺湪 relationName 瀛楁鍒欎娇鐢紝鍚﹀垯涓虹┖瀛楃涓� + }; + this.relationships.push(obj); + }); } this.loading = false; this.relation(); @@ -437,28 +572,17 @@ } }); // 鏍规嵁nodes鍔ㄦ�佺敓鎴愯妭鐐规暟鎹� - var nodeData = nodes.map(function (node, index) { - return { - name: node.name, - id: node.id, - itemStyle: { - color: "#eae0eb", // 鍙互鏍规嵁绱㈠紩璁剧疆涓嶅悓鐨勯鑹� - borderWidth: BorderWidth, - borderColor: "#996f9f", - }, - }; - }); - + var nodeData = nodes; var option; option = { title: { - // text: '涔︿腑鏈�甯告彁鍒扮殑100浣嶄汉鐗�', + text: "", // subtext: '', left: "center", top: FontSize + 10, - // textStyle: { - // fontSize: FontSize // 璁剧疆鏍囬鏂囧瓧澶у皬涓� 18px - // }, + textStyle: { + fontSize: FontSize, // 璁剧疆鏍囬鏂囧瓧澶у皬涓� 18px + }, subtextStyle: { fontSize: FontSize, // 璁剧疆鍓爣棰樻枃瀛楀ぇ灏忎负 14px color: "#2C2C2C", @@ -485,22 +609,18 @@ series: [ { type: "graph", + legendHoverLink: false, 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, + roam: true, + label: { + position: "right", + formatter: "{b}", + }, lineStyle: { - opacity: 0.9, - width: 2, + color: "source", curveness: 0.3, }, emphasis: { @@ -509,49 +629,57 @@ 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; + // option.series[0].links = links; // 璁剧疆鐐瑰嚮浜嬩欢鐩戝惉 myChart.off("click"); myChart.on("click", (params) => { if (params.dataType === "node") { - this.spaceTimeArr(params.data.id); + this.creatDom(params); } }); - option && myChart.setOption(option); + myChart.setOption(option); + }, + creatDom(params) { + const e = params.event; + const div = document.getElementById("customDialog"); + div.style.display = "block"; + div.style.left = e.offsetX + 50 + "px"; + div.style.top = e.offsetY - 50 + "px"; + const data = this.infoOfPersons?.find( + (i) => i.id == params.data.personId + ); + const obj = { + name: + data?.NAME?.map((e, i) => { + i += 1; + return e["content" + i]; + }).join("銆�") ?? "", + alias: + data?.ALIAS?.map((e, i) => { + i += 1; + return e["content" + i]; + }).join("銆�") ?? "", + nativePlace: + data?.NATIVE_PLACE?.map((e, i) => { + i += 1; + return e["content" + i]; + }).join("銆�") ?? "", + medicalBranch: + data?.MEDICAL_BRANCH?.map((e, i) => { + i += 1; + return e["content" + i]; + }).join("銆�") ?? "", + biography: data?.BIOGRAPHY ?? "", + }; + this.detailData = obj; + }, + closeDom() { + const div = document.getElementById("customDialog"); + div.style.display = "none"; }, // 鍩虹鎼滅储 onSearch(val, index) { @@ -561,7 +689,6 @@ } else { this.hotAciveIndex = ""; } - // this.searchKey = val.text; this.getData(val.text); }, // 楂樼骇鎼滅储 @@ -642,6 +769,67 @@ </script> <style> +#relatio { + width: 100%; + height: 100%; + position: relative; +} + +.customDialog { + width: 300px; + min-height: 240px; + display: none; + position: fixed; + z-index: 99999999; + border-radius: 2px; + background: #fff; +} + +.customDialog .title { + width: 100%; + height: 35px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px; + box-sizing: border-box; + background-color: rgb(221, 232, 246); + font-size: 14px; +} +.customDialog .title span:nth-child(1) { + font-size: 16px; + font-weight: 600; +} + +.customDialog .title span:nth-child(2) { + color: rgb(95, 127, 168); + cursor: pointer; +} + +.customDialog .content { + padding: 15px; + box-sizing: border-box; +} + +.customDialog .content p { + margin-bottom: 5px; + display: -webkit-box; /* 鏄剧ず澶氳鏂囨湰瀹瑰櫒 */ + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; /*鏄剧ず琛屾暟*/ + overflow: hidden; /*闅愯棌澶氬嚭閮ㄥ垎鏂囧瓧*/ + text-overflow: ellipsis; /*鐢ㄧ渷鐣ュ彿浠f浛澶氬嚭閮ㄥ垎鏂囧瓧*/ +} + +.customDialog .btn{ + display: flex; + justify-content: center; + align-items: center; + color: rgb(95, 127, 168); + cursor: pointer; + font-size: 14px; + height: 35px; +} + @media screen and (min-width: 2560px) and (max-width: 3840px) { } @@ -665,15 +853,5 @@ .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