From e00361c6bcbb1a56f6dcda22b91bdfcb2736e263 Mon Sep 17 00:00:00 2001 From: YM <479443481@qq.com> Date: 星期五, 26 七月 2024 15:56:27 +0800 Subject: [PATCH] 1 --- src/pages/inherit/index.vue | 823 ++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 573 insertions(+), 250 deletions(-) diff --git a/src/pages/inherit/index.vue b/src/pages/inherit/index.vue index b337f7a..54d0f9d 100644 --- a/src/pages/inherit/index.vue +++ b/src/pages/inherit/index.vue @@ -1,258 +1,581 @@ <template> - <view class=""> - <headNav :idIndex="idIndex" :searchBg="false" text="涓尰涓栧尰浼犳壙鏁版嵁搴�" bg="/static/image/topBg1.png" - bg1="/static/image/line1.png" /> + <view> + <headNav + idIndex="2" + :searchBg="false" + text="瀹跺浼犳壙" + bg="/static/image/topBg1.png" + bg1="/static/image/line1.png" + /> - <view class="flex" style="padding: .24rem 1.21rem ;background-color: #f0f0f0;"> - <view class="flex"> - <el-button class="MiddeBack flex flex-center" @click="goBack">杩斿洖</el-button> - <h3 style="margin-left: .22rem;font-size: .28erm;font-weight: 500;">閭电櫥鐎�</h3> - </view> - <ul class="flex Lists"> - <li style="background-color: #DA7A2B;color: #fff;">涓栧尰浼犳壙</li> - <!-- /pages/AcademicHistory/AcademicHistory --> - <li @click="ListClick" style="background-color: #fff;color: #DA7A2B;" >涓栧尰鏂囧寲</li> - </ul> - <view class="" style="width: 1rem;"></view> - </view> - <!-- echarts鍥� --> - <div class="barChart" ref="barChart"></div> - </view> + <div class="filterBox font-family"> + <div class="searchBox"> + <input + type="text" + v-model="keyword" + @confirm="search" + placeholder="璇疯緭鍏ュ叧閿瓧" + style="padding-right: 54px; box-sizing: border-box" + /> + <span + class="cleanupBtn" + v-if="keyword" + @click="keyword = ''" + style=" + position: absolute; + top: 50%; + margin-top: -10px; + right: 84px; + color: #fff; + z-index: 2; + display: inline-block; + width: 20px; + height: 20px; + text-align: center; + line-height: 20px; + background-color: #a5a5a5; + font-weight: bold; + border-radius: 50%; + font-size: 12px; + cursor: pointer; + " + >鉁�</span + > + <button @click="search">鎼滅储</button> + <span + class="openSearch" + @click=" + () => { + openSearch = !openSearch; + } + " + >楂樼骇鎼滅储{{ openSearch ? "鈭�" : "鈭�" }}</span + > + </div> + <div class="dynasty" v-if="openSearch"> + <div style="font-weight: 700; line-height: 0.25rem">绛涢�夋湞浠�</div> + <div class="filterList"> + <div + class="filterItem" + v-for="(item, index) in dynasty" + :key="index" + @click="changeDynasty(item)" + > + <div + class="circleBox" + :class="{ active: item.dynastyId === activeId }" + ></div> + <div class="filterText"> + {{ item.dynasty + " " + item.count }} + </div> + </div> + </div> + </div> + <div class="condition" v-if="openSearch"> + <div style="font-weight: 700; line-height: 0.25rem">鏉′欢閫夋嫨</div> + <div class="filterList"> + <div class="conditionItem" @click="changeCondition(3)"> + <div + class="circleBox" + :style="{ background: conditionId === 3 ? '#bacd66' : '#9e9e9e' }" + ></div> + <div class="filterText">3浠d紶鎵夸笘鍖�</div> + </div> + <div class="conditionItem" @click="changeCondition(4)"> + <div + class="circleBox" + :style="{ background: conditionId === 4 ? '#6d9346' : '#9e9e9e' }" + ></div> + <div class="filterText">4浠d紶鎵夸笘鍖�</div> + </div> + <div class="conditionItem" @click="changeCondition(5)"> + <div + class="circleBox" + :style="{ background: conditionId === 5 ? '#da7a2b' : '#9e9e9e' }" + ></div> + <div class="filterText">5浠d紶鎵夸笘鍖�</div> + </div> + <div class="conditionItem" @click="changeCondition(6)"> + <div + class="circleBox" + :style="{ background: conditionId === 6 ? '#bc321d' : '#9e9e9e' }" + ></div> + <div class="filterText">5浠d互涓婁紶鎵夸笘鍖�</div> + </div> + </div> + </div> + <div style="padding-left: 0.5rem; margin-top: 0.1rem"> + 鍏� {{ totalCount }}涓笘鍖� + </div> + </div> + <div class="contentBox"> + <!-- echarts鍥� --> + <div id="barChart" ref="barChart"></div> + <div + v-if="!loading && nodeData.length == 0" + style=" + position: absolute; + top: 30%; + left: 0; + right: 0; + text-align: center; + font-size: 0.2rem; + color: #666; + " + > + 鏆傛棤鎼滅储鏁版嵁 + </div> + <div + class="toolBox" + v-if="showTool" + :style="{ top: toolTop, left: toolLeft }" + > + <div class="toolItem" @click="gotoDetail(1)">涓汉淇℃伅</div> + <div + class="toolItem" + style="position: relative; top: -40px" + @click="gotoDetail(2)" + > + 涓栧尰鏂囧寲 + </div> + <div class="toolItem" @click="gotoDetail(3)">涓栧尰浼犳壙</div> + </div> + </div> + </view> </template> <script> - import * as echarts from "echarts"; - export default { - data() { - return { - // 鏍囬椤堕儴鏍忛渶瑕佺殑涓滆タ - idIndex: 0, - activeIndex: 1 - } - }, - onLoad(options) { - this.idIndex = options.id - console.log('optionsoptionsoptions', options.id); - }, - mounted() { - // 鍒濆鍖� echarts - this.initBarChart(); - }, - methods: { - initBarChart() { - // WMBg - //閫氳繃 $ref 杩涜鎸傝浇 - let myChart = echarts.init(this.$refs.barChart); +import * as echarts from "echarts"; +import { + getNodeCount, + inheritMedicalSataStatistics, + inheritMedicalList +} from "@/api/index.js"; +export default { + data() { + return { + loading: true, + // 鏍囬椤堕儴鏍忛渶瑕佺殑涓滆タ + keyword: "", + idIndex: 0, + activeId: 28, + conditionId: "", + searchType: "DYNASTY", + dynasty: [], + nodeData: [], + showTool: false, + toolTop: 0, + toolLeft: 0, + toolInfo: {}, + totalCount: 0, + openSearch: false + }; + }, + onLoad(options) { + this.idIndex = options.id; + }, + mounted() { + this.getStatistics(); + }, + methods: { + getStatistics() { + inheritMedicalSataStatistics().then((res) => { + this.dynasty = res.object; + this.activeId = this.dynasty[0].dynastyId; + this.getData(); + }); + }, + getData() { + this.loading = true; + this.nodeData = []; + // const defaultDynasty = this.dynasty.find(f.dynasty == "瀹�"); + this.showTool = false; + inheritMedicalList({ + keywords: this.keyword, + dynastyId: this.activeId, + searchType: this.searchType, + path: this.conditionId + }).then((res) => { + for (let i = 0; i < res.object.nodeList.length; i++) { + const node = res.object.nodeList[i]; + this.nodeData.push({ + ...node, + id: node.identifier, + itemStyle: { + color: "#F8E2D7", + borderColor: "#F3AA78", + borderWidth: "3" + } + }); + } + getNodeCount({ + keywords: this.keyword, + dynastyId: this.activeId, + searchType: this.searchType, + path: this.conditionId + }).then((res) => { + this.totalCount = res.object.totalCount; + }); + console.log(this.nodeData, "this.nodeData"); + this.loading = false; + // 鍒濆鍖� echarts + this.initBarChart(); + }); + }, + initBarChart() { + //閫氳繃 $ref 杩涜鎸傝浇 + var chartDom = document.getElementById("barChart"); + let myChart = echarts.init(chartDom); - let FontSize = 12; // 瀛椾綋澶у皬 - let BorderWidth = 2; // 杈规澶у皬 - let SymbolSize = 80; // 灏哄璺濈 - let Distance = 10; - // 涓嶅悓灏哄涓嬩慨鏀筫charts鐨勫瓧浣� - 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 - } + let FontSize = 18; // 瀛椾綋澶у皬 + let BorderWidth = 2; // 杈规澶у皬 + let SymbolSize = 80; // 灏哄璺濈 + let Distance = 10; + // 涓嶅悓灏哄涓嬩慨鏀筫charts鐨勫瓧浣� + if (window.innerWidth > 2560 && window.innerWidth <= 3840) { + FontSize = 20; + BorderWidth = 5; + SymbolSize = 100; + Distance = 33; + } else if (window.innerWidth > 1920 && window.innerWidth <= 2560) { + FontSize = 20; + BorderWidth = 4; + SymbolSize = 90; + Distance = 22; + } else if (window.innerWidth >= 1366 && window.innerWidth <= 1920) { + FontSize = 18; + BorderWidth = 4; + SymbolSize = 70; + Distance = 22; + } - let option = { - title: { - text: [""], - }, - backgroundColor: { - type: 'image', - image: '/static/image/WMBg.png', - repeat: 'repeat-x', // 鏄惁骞抽摵锛屽彲浠ユ槸 'repeat-x', 'repeat-y', 'no-repeat' - size: '100% 100%', // 鑳屾櫙鍥剧墖鐨勫昂瀵革紝鍙互鏄櫨鍒嗘瘮鎴栬�呭儚绱� - position: 'center center' // 鑳屾櫙鍥剧墖鐨勪綅缃紝鍙互鏄� top, bottom, middle 鎴栬�呯櫨鍒嗘瘮 - }, - tooltip: {}, - animationDurationUpdate: 1500, - animationEasingUpdate: "quinticInOut", - series: [{ - type: "graph", - layout: "none", - symbolSize: SymbolSize + 20, - //鏄惁鍏佽鐢ㄦ埛鎷栧姩鍥剧墖 - roam: false, - label: { - show: true, - color: 'black', // 璁剧疆鑺傜偣鏂囧瓧棰滆壊涓洪粦鑹� - fontSize: FontSize, // 璁剧疆鏂囧瓧澶у皬 - }, - edgeSymbol: ["circle", "arrow"], - edgeSymbolSize: [4, 10], - - edgeLabel: { - show: true, - fontSize: FontSize, //鏇存敼涓よ�呭叧绯荤殑瀛椾綋 - position: "middle", - //杩欓噷璁剧疆鍏崇郴鏂囧瓧鏄惁鍜岀嚎娈甸噸鍙� - // padding: [0, 0], // 璋冩暣鍐呰竟璺濅互纭繚鏍囩涓庣嚎娈电揣瀵嗚创鍚� - // verticalAlign: 'middle', // 璁剧疆鏂囨湰鐨勫瀭鐩村榻愭柟寮忎负灞呬腑 - formatter: function(params) { - // params.data 鏄竟鐨勬暟鎹璞★紝浣犲彲浠ュ湪杩欓噷瀹氫箟鍏崇郴鍚� - // 渚嬪锛屼綘鍙互鏍规嵁 source 鍜� target 鐨勫悕绉版潵瀹氫箟鍏崇郴鍚� - return params.data.relationName || - "鐖跺瓙"; // 濡傛灉瀹氫箟浜� relationName 鍒欐樉绀哄畠锛屽惁鍒欐樉绀衡�滅埗瀛愨�� - }, - }, - //鍚勪釜鑺傜偣 - data: [{ - name: "钖涢洩", - itemStyle: { - color: "#F8E2D7", - borderColor: "#F3AA78", - borderWidth: "3", - }, - }, - { - name: "閭电櫥鐎�", - x: 400, - y: 300, - itemStyle: { - color: "#F8E2D7", - borderColor: "#F3AA78", - borderWidth: "3", - }, - }, - { - name: "閭甸瞾鐬�", - x: 500, - y: 300, - itemStyle: { - color: "#F8E2D7", - borderColor: "#F3AA78", - borderWidth: "3", - }, - }, - { - name: "閭垫槬娉�", - x: 600, - y: 300, - itemStyle: { - color: "#F8E2D7", - borderColor: "#F3AA78", - borderWidth: "3", - }, - }, - { - name: "寰愰敠", - x: 650, - y: 400, - itemStyle: { - color: "#DCE7EB", - borderColor: "#5F81A4", - borderWidth: "3", - }, - }, - { - name: "閭典笝鎵�", - x: 700, - y: 300, - itemStyle: { - color: "#F8E2D7", - borderColor: "#F3AA78", - borderWidth: "3", - }, - }, - { - name: "鍐鑺�", - x: 720, - y: 400, - itemStyle: { - color: "#DCE7EB", - borderColor: "#5F81A4", - borderWidth: "3", - }, - }, - { - name: "鏉庨缚绔�", - x: 740, - y: 500, - itemStyle: { - color: "#E1E1E1", - borderColor: "#888888", - borderWidth: "3", - }, - }, - { - name: "閭垫櫙灏�", - x: 800, - y: 200, - itemStyle: { - color: "#F8E2D7", - borderColor: "#F3AA78", - borderWidth: "3", - }, - }, - { - name: "閭垫櫙搴�", - x: 800, - y: 400, - itemStyle: { - color: "#F8E2D7", - borderColor: "#F3AA78", - borderWidth: "3", - }, - }, - - ], - lineStyle: { - color: "#000000", - opacity: 0.9, - width: 2, - curveness: 0, - }, - }, ], - }; - //杩涜娓叉煋 - myChart.setOption(option); - }, - // 杩斿洖鎸夐挳 - goBack() { - // uuni.redirectTo(); - uni.redirectTo({ - url: '/pages/index/index' - }) - }, - } - } + let option = { + title: { + text: [""] + }, + backgroundColor: { + type: "image", + image: "/static/image/WMBg.png", + repeat: "repeat-x", // 鏄惁骞抽摵锛屽彲浠ユ槸 'repeat-x', 'repeat-y', 'no-repeat' + size: "100% 100%", // 鑳屾櫙鍥剧墖鐨勫昂瀵革紝鍙互鏄櫨鍒嗘瘮鎴栬�呭儚绱� + position: "center center" // 鑳屾櫙鍥剧墖鐨勪綅缃紝鍙互鏄� top, bottom, middle 鎴栬�呯櫨鍒嗘瘮 + }, + tooltip: {}, + animationDurationUpdate: 1500, + animationEasingUpdate: "quinticInOut", + series: [ + { + type: "graph", + layout: "force", + symbolSize: 100, + //鏄惁鍏佽鐢ㄦ埛鎷栧姩鍥剧墖 + roam: true, + label: { + show: true, + color: "black", // 璁剧疆鑺傜偣鏂囧瓧棰滆壊涓洪粦鑹� + fontSize: FontSize // 璁剧疆鏂囧瓧澶у皬 + }, + edgeSymbol: ["circle", "arrow"], + edgeSymbolSize: [4, 10], + edgeLabel: { + show: true, + fontSize: FontSize, //鏇存敼涓よ�呭叧绯荤殑瀛椾綋 + position: "middle", + //杩欓噷璁剧疆鍏崇郴鏂囧瓧鏄惁鍜岀嚎娈甸噸鍙� + // padding: [0, 0], // 璋冩暣鍐呰竟璺濅互纭繚鏍囩涓庣嚎娈电揣瀵嗚创鍚� + // verticalAlign: 'middle', // 璁剧疆鏂囨湰鐨勫瀭鐩村榻愭柟寮忎负灞呬腑 + formatter: function (params) { + // params.data 鏄竟鐨勬暟鎹璞★紝浣犲彲浠ュ湪杩欓噷瀹氫箟鍏崇郴鍚� + // 渚嬪锛屼綘鍙互鏍规嵁 source 鍜� target 鐨勫悕绉版潵瀹氫箟鍏崇郴鍚� + return params.data.relationName; // 濡傛灉瀹氫箟浜� relationName 鍒欐樉绀哄畠锛屽惁鍒欐樉绀衡�滅埗瀛愨�� + } + }, + //鍚勪釜鑺傜偣 + data: this.nodeData, + lineStyle: { + color: "#000000", + opacity: 0.9, + width: 2, + curveness: 0 + }, + force: { + layoutAnimation: false, + // initLayout: 'circular', + // gravity: 0, + friction: 0.1, + repulsion: 500, + edgeLength: 6 + }, + selectedMode: "single", + select: { + itemStyle: { + color: "#e8f3ff", + borderColor: "#284e74", + borderWidth: "3" + } + } + } + ] + }; + let selectData = []; + //杩涜娓叉煋 + myChart.setOption(option); + // myChart.getZr().on("click", (params) => { + // console.log(params); + // console.log(selectData); + // if (!params.target) { + // this.showTool = false; + // } + // }); + myChart.on("click", (params) => { + if (selectData.length > 0) { + let x = params.event.target.transform[4]; + let y = params.event.target.transform[5]; + if (params.componentType === "series") { + this.showTool = true; + this.toolTop = y - 70 + "px"; + this.toolLeft = x - 163 + "px"; + this.toolInfo = { + id: params.data.identifier, + name: encodeURIComponent(params.data.name) + }; + } else { + this.showTool = false; + } + } + }); + myChart.on("selectchanged", (params) => { + if (params.fromAction == "select") { + selectData = params.selected[0].dataIndex; + } else { + selectData = []; + this.showTool = false; + } + }); + myChart.on("graphroam", (params) => { + this.showTool = false; + myChart.dispatchAction({ + type: "unselect", + dataIndex: selectData + }); + }); + }, + gotoDetail(type) { + switch (type) { + case 1: + uni.navigateTo({ + url: "/pages/character/detail?id=" + this.toolInfo.id + }); + break; + case 2: + uni.navigateTo({ + url: + "/pages/inherit/list?type=" + + 2 + + "&id=" + + this.toolInfo.id + + "&name=" + + this.toolInfo.name + }); + break; + case 3: + uni.navigateTo({ + url: + "/pages/inherit/list?type=" + + 1 + + "&id=" + + this.toolInfo.id + + "&name=" + + this.toolInfo.name + }); + break; + } + }, + // 杩斿洖鎸夐挳 + goBack() { + this.$router.go(-1); + }, + search() { + this.searchType = "KEYWORD"; + this.activeId = ""; + this.conditionId = ""; + this.getData(); + }, + changeDynasty(item) { + if (item.dynastyId === this.activeId) { + this.activeId = ""; + if (this.conditionId === "") { + this.searchType = "KEYWORD"; + } + } else { + this.searchType = "DYNASTY"; + this.activeId = item.dynastyId; + this.keyword = ""; + } + this.getData(); + }, + changeCondition(index) { + if (index === this.conditionId) { + this.conditionId = ""; + if (this.activeId === "") { + this.searchType = "KEYWORD"; + } + } else { + this.searchType = "DYNASTY"; + this.conditionId = index; + this.keyword = ""; + } + this.getData(); + } + } +}; </script> <style scoped> - .Lists { - li { - /* background-color: #e4ebf3; - border: 1rpx solid #5778a2; - padding: 5rpx 10rpx; - font-size: 18rpx; */ - width: 0.96rem; - height: .3rem; - border: 1px solid #DA7A2B; - line-height: .3rem; - text-align: center; - font-size: .14rem; - } - } - .MiddeBack { - width: 0.6rem; - height: 0.24rem; - font-size: .12rem; - padding: 0; - - } - .barChart { - width: 100vw; - height: 80vh; - } -</style> \ No newline at end of file +.Lists li { + width: 0.96rem; + height: 0.3rem; + border: 1px solid #da7a2b; + line-height: 0.3rem; + text-align: center; + font-size: 0.14rem; +} +.MiddeBack { + width: 0.6rem; + height: 0.24rem; + font-size: 0.12rem; + padding: 0; +} +.contentBox { + width: 100vw; + height: 80vh; + position: relative; +} +#barChart { + width: 100%; + height: 100%; +} +.toolBox { + padding: 0.1rem; + position: absolute; +} +.toolItem { + padding: 0.04rem 0.2rem; + border: 1px solid #333; + border-radius: 1rem; + margin: 0.06rem; + font-size: 0.12rem; + cursor: pointer; + background-color: #fff; + display: inline-block; +} +.toolItem:hover { + background-color: #efefef; +} +.filterBox { + width: 90%; + border-bottom: 1px solid #ccc; + padding: 20px; + margin: 0 auto; +} +.searchBox { + width: 50%; + display: flex; + height: 50px; + border: 1px solid #ccc; + border-radius: 30px; + justify-content: center; + align-items: center; + margin: 0 auto; + margin-top: 0.2rem; + position: relative; +} + +.searchBox > input { + border: none; + outline: none; + margin: auto; + flex: 1; + overflow: hidden; + padding-left: 20px; +} +.searchBox > button { + color: white; + height: 40px; + line-height: 40px; + background-color: #e27917; + border-radius: 50px; + margin-right: 10rpx; +} + +.searchBox .openSearch { + position: absolute; + right: -100px; + font-size: 14px; + cursor: pointer; +} + +.dynasty { + display: flex; + margin-top: 0.2rem; + width: 100%; + padding: 0 0.5rem; +} +.condition { + display: flex; + width: 100%; + padding: 0 0.5rem; +} +.filterList { + flex: 1; + overflow: hidden; + margin-left: 0.4rem; + overflow: hidden; +} +.filterItem { + display: flex; + box-shadow: 1px 1px 5px #888888; + align-items: center; + justify-content: center; + height: 0.3rem; + margin-left: 0.2rem; + border-radius: 0.13rem; + float: left; + margin-top: 0.02rem; + margin-bottom: 0.1rem; + cursor: pointer; + padding: 0 0.1rem; +} +.conditionItem { + display: flex; + box-shadow: 1px 1px 5px #888888; + align-items: center; + justify-content: center; + padding: 0 0.1rem; + height: 0.3rem; + float: left; + margin-left: 0.2rem; + border-radius: 0.13rem; + margin-top: 0.02rem; + margin-bottom: 0.1rem; + cursor: pointer; +} + +.circleBox { + width: 20px; + height: 20px; + border-radius: 50%; + background-color: #9e9e9e; +} +.circleBox.active { + background-color: #da7a2b; +} +.filterText { + margin-left: 10px; + font-size: 0.14rem; +} +.fontColor { + color: #827e44 !important; +} +.bgcColor { + background-color: #827e44; +} +</style> -- Gitblit v1.9.1