| | |
| | | <template> |
| | | <view> |
| | | <headNav |
| | | :idIndex="idIndex" |
| | | text="中医人物数据库" |
| | | /> |
| | | <el-button |
| | | class="getBack" |
| | | @click="getBack" |
| | | >返回</el-button> |
| | | <view |
| | | class="" |
| | | style="position: relative" |
| | | > |
| | | <view |
| | | style="width: 100%; height: 100%; display: flex; flex-direction: column" |
| | | > |
| | | <headNav :idIndex="1 + ''" text="历代人物" /> |
| | | <el-button class="getBack" @click="goBack">返回</el-button> |
| | | <view style="flex: 1; overflow: hidden"> |
| | | <!-- 地图 --> |
| | | <!-- <view id="spaceTime" style="height: 90vh;width: 100%;position: relative;"></view> --> |
| | | <div id="map"></div> |
| | | |
| | | <!-- 详情 --> |
| | | <el-dialog |
| | | class="particulars" |
| | | :visible.sync="menuNav" |
| | | :modal="false" |
| | | > |
| | | <el-dialog class="particulars" :visible.sync="menuNav" :modal="false"> |
| | | <view |
| | | class="font-family" |
| | | style="font-size: 0.26rem; padding-top: 0.16rem; font-weight: bold" |
| | | >{{ activityInfo.participants }}</view> |
| | | <ul style=" |
| | | >{{ basicInfo.name }}</view |
| | | > |
| | | <ul |
| | | style=" |
| | | border-bottom: 0.01rem solid #d8d8d8; |
| | | padding: 0.16rem 0; |
| | | font-size: 0.14rem; |
| | | font-weight: 400; |
| | | line-height: 0.28rem; |
| | | "> |
| | | <li>出生于{{ basicInfo.nativePlace }}</li> |
| | | " |
| | | > |
| | | <li>出生于{{ basicInfo.nativePlace || "-" }}</li> |
| | | <li> |
| | | {{ |
| | | basicInfo.birthYear + |
| | | basicInfo.nativePlace + |
| | | "(今" + |
| | | basicInfo.nowPlace + |
| | | ")" |
| | | }} |
| | | <span v-if="basicInfo.birthYear">{{ basicInfo.birthYear }}</span> |
| | | <span v-if="basicInfo.nativePlace">{{ |
| | | basicInfo.nativePlace |
| | | }}</span> |
| | | <span v-if="basicInfo.nowPlace" |
| | | >(今{{ basicInfo.nowPlace }})</span |
| | | > |
| | | </li> |
| | | </ul> |
| | | <ul style=" |
| | | <ul |
| | | style=" |
| | | margin: 0.31rem 0 0.11rem 0; |
| | | font-size: 0.14rem; |
| | | font-weight: 400; |
| | | line-height: 0.28rem; |
| | | "> |
| | | <li>活动名称:{{ activityInfo.activityName }}</li> |
| | | <li>活动地点:{{ activityInfo.activityAddr }}</li> |
| | | <li>活动区间:{{ activityInfo.time }}</li> |
| | | <li>活动描述:{{ activityInfo.desc }}</li> |
| | | <li>参与人员:{{ activityInfo.participants }}</li> |
| | | " |
| | | > |
| | | <li>活动名称:{{ activityInfo.activityName || "-" }}</li> |
| | | <li>活动地点:{{ activityInfo.activityAddr || "-" }}</li> |
| | | <li>活动区间:{{ activityInfo.time || "-" }}</li> |
| | | <li>活动描述:{{ activityInfo.desc || "-" }}</li> |
| | | <li>参与人员:{{ activityInfo.participants || "-" }}</li> |
| | | </ul> |
| | | <!-- <img |
| | | style="width: 100%; height: 2rem" |
| | | src="https://img0.baidu.com/it/u=1845740325,2917001370&fm=253&app=120&size=w931&n=0&f=JPEG&fmt=auto?sec=1711731600&t=0b208ab46e1d33aa81ac31dd6bf627be" |
| | | alt="" |
| | | /> --> |
| | | <div |
| | | class="box" |
| | | style="width: 80%" |
| | | > |
| | | <span |
| | | class="span" |
| | | :style="{ marginLeft: spanML + 'rem' }" |
| | | >{{ span }}年</span> |
| | | <!-- <div class="box" style="width: 80%"> |
| | | <span class="span" :style="{ marginLeft: spanML + 'rem' }" |
| | | >{{ span }}年</span |
| | | > |
| | | <div class="scales"> |
| | | <view |
| | | v-for="(item, index) in yearArr" |
| | |
| | | ></view> |
| | | </div> |
| | | <div class="MX"></div> |
| | | <div |
| | | class="cursor" |
| | | :style="{ marginLeft: cursorML + 'rem' }" |
| | | ></div> |
| | | </div> |
| | | <div class="cursor" :style="{ marginLeft: cursorML + 'rem' }"></div> |
| | | </div> --> |
| | | </el-dialog> |
| | | </view> |
| | | </view> |
| | |
| | | import * as echarts from "echarts"; |
| | | import "echarts/extension/bmap/bmap"; |
| | | import { loadBMap } from "@/static/map.js"; |
| | | import "leaflet.chinatmsproviders"; |
| | | import L from "leaflet"; |
| | | import "leaflet.chinatmsproviders"; |
| | | import { getPersonInfo } from "@/api/index.js"; |
| | | export default { |
| | | data() { |
| | |
| | | spanML: 0, |
| | | cursorML: -0.05, |
| | | activityInfo: {}, |
| | | basicInfo: {}, |
| | | basicInfo: { |
| | | name: "", |
| | | birthYear: "", |
| | | deathYear: "", |
| | | nativePlace: "", |
| | | nowPlace: "", |
| | | }, |
| | | }; |
| | | }, |
| | | |
| | |
| | | // this.aaa(); |
| | | // }); |
| | | this.$route; |
| | | console.log(this.$route, "this.$route"); |
| | | this.getPersonInfoFun(); |
| | | this.getBasicInfo(); |
| | | }, |
| | |
| | | minZoom: 5, |
| | | }) |
| | | .addTo(map); |
| | | L.tileLayer |
| | | .chinaProvider("TianDiTu.Normal.Annotion", { |
| | | key: "76bc34ead7e30e663a4eded8aeaf5860", |
| | | maxZoom: 18, |
| | | minZoom: 3, |
| | | }) |
| | | .addTo(map); |
| | | let DefaultIcon1 = L.icon({ |
| | | iconUrl: this.icoName, |
| | | iconSize: [24, 41], // 图标的大小 【值1,值2】 为具体你自定义图标的尺寸,比如我图标尺寸是32×52,表示该图标:宽度32像素,高度:52像素,那么值1:就是32,值2:就是52 |
| | |
| | | popupAnchor: [1, -24], // 该点是相对于iconAnchor弹出信息的位置 这个是我手动调出来的,文档默认原始值是[-1,-76],我是去一半值,取一半值调出来的 |
| | | }); |
| | | let icon = L.divIcon({ |
| | | html: "<div class='map-circle-name'></div>", |
| | | html: "<div class='map-circle-name ripple'></div>", |
| | | iconSize: [80, 80], |
| | | className: "map-circle", |
| | | }); |
| | |
| | | }, |
| | | |
| | | // 返回按钮 |
| | | getBack() { |
| | | uni.navigateBack(); |
| | | goBack() { |
| | | this.$router.go(-1); |
| | | }, |
| | | aaa() { |
| | | // 渲染母线 |
| | |
| | | id: this.$route.query.id, |
| | | type: "PERSON_SPACE_TIME", |
| | | }).then((res) => { |
| | | console.log(res, "res"); |
| | | this.initMap(res.object.personSpaceTimeList); |
| | | }); |
| | | }, |
| | |
| | | id: this.$route.query.id, |
| | | type: "PERSON_BASIC", |
| | | }).then((res) => { |
| | | console.log(res, "res"); |
| | | this.basicInfo.name = res.object.personFieldList.find( |
| | | (f) => f.fieldName == "WEAK_NAME" |
| | | ).content1; |
| | |
| | | this.basicInfo.nowPlace = res.object.personFieldList.find( |
| | | (f) => f.fieldName == "NATIVE_PLACE" |
| | | ).content2; |
| | | // this.initMap(res.object.personSpaceTimeList); |
| | | console.log(this.basicInfo); |
| | | }); |
| | | }, |
| | | |
| | | creatMX(len) { |
| | | console.log(len); |
| | | let width = len * 50 + 10; |
| | | // this.MX.style.width = `${width}px` |
| | | // this.scales.style.width = `${width}px` |
| | | // console.log(this.box.style.width); |
| | | }, |
| | | creatScale() { |
| | | // for (let i = 0; i < this.yearArr.length; i++) { |
| | |
| | | // scale.addEventListener("click", this.scaleClick) |
| | | // scales.appendChild(scale) |
| | | // } |
| | | // console.log(arr[0]); |
| | | }, |
| | | |
| | | handleSliderChange(value) { |
| | |
| | | }, |
| | | scaleClick(i) { |
| | | // let i = Number(this.getAttribute("data-index")) |
| | | console.log(i, this.cursorML); |
| | | |
| | | if (i > this.yearIndex) { |
| | | this.cursorML += (i - this.yearIndex + +("0.0" + this.yearIndex)) / 1.9; |
| | | // this.spanML += 50 * (i - this.yearIndex) |
| | | console.log(i - this.yearIndex + 0.2, "aaaa"); |
| | | } else { |
| | | this.cursorML -= (this.yearIndex - i) / 2 + 0.04; |
| | | // this.spanML -= 50 * (this.yearIndex - i) |
| | | console.log(this.yearIndex, i, "bbbb"); |
| | | } |
| | | this.yearIndex = i; |
| | | }, |
| | |
| | | // 设置点击事件监听 |
| | | myChart.on("click", (params) => { |
| | | // menuNav2 = !menuNav1 |
| | | // console.log(menuNav); |
| | | if (params.componentType === "series") { |
| | | var dataName = params.data.name; // 获取点击的数据名称 |
| | | var dataValue = params.data.value; // 获取点击的数据值 |
| | | // 在这里可以根据需要处理点击事件,比如弹出对应数据的详细信息等操作 |
| | | // console.log('点击了', dataName, '数据,数值为', dataValue); |
| | | // 这里可以编写触发时间获取对应数据信息的逻辑 |
| | | this.spaceTimeArr(params); |
| | | } |
| | |
| | | // 修改 Vue 组件的数据,例如显示菜单导航 |
| | | this.menuNav = !this.menuNav; |
| | | // 时空地图的数据 |
| | | console.log(Arr); |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | width: 0.6rem; |
| | | height: 0.24rem; |
| | | top: 1rem; |
| | | left: 0.24rem; |
| | | left: 0.6rem; |
| | | z-index: 99999; |
| | | font-size: 0.12rem; |
| | | display: flex; |
| | |
| | | margin: 0 !important; |
| | | position: absolute; |
| | | right: 0; |
| | | top: 0; |
| | | top: 86px; |
| | | bottom: 0; |
| | | width: 4rem; |
| | | height: 100%; |
| | | } |
| | | |
| | | .particulars ::v-deep .el-dialog__header { |
| | |
| | | height: 100%; |
| | | } |
| | | #map { |
| | | height: 1080px; |
| | | height: 100%; |
| | | width: 100%; |
| | | margin: 0 auto; |
| | | font-size: 14px !important; |
| | |
| | | width: 20px; |
| | | height: 20px; |
| | | border-radius: 50%; |
| | | background-color: #2070bc; |
| | | 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; |
| | | } |
| | | } |
| | | </style> |