echarts +iview tabs 散点图 不显示、缩成一团
首先遇到问题:echarts 地图 滚轮 缩放 错误。
https://www.cnblogs.com/hao-1234-1234/p/13140070.html
关闭tabs动画,缩放问题解决了。
但引发新的问题: 百度底图正常显示,但echarts散点图 缩成一团 或不显示。
原因是:如果不是动画,那么 tabs切换前,这个tab是没有高度和宽度的。
解决:给tabs 加点击事件,点击事件里 该echarts对象调用resize方法重置高度和宽度。
但又出现了问题: 百度地图数据加载总是有部分失败!!
解决: tabs点击事件中重新请求!!!每次请求结束后就调用resize。
问题一个接一个,iview tabs 这东西,真是日了狗!
源代码:
1 @{ 2 ViewBag.Title = "自然植物名录"; 3 Layout = "~/Views/Shared/_LayoutNotFooter.cshtml"; 4 } 5 @Html.Partial("ViewPhotoWithAttr") 6 @*<link href="~/Scripts/viewer/viewer.min.css?v=20190612" rel="stylesheet" /> 7 <script src="~/Scripts/viewer/viewer.min.js?v=20190612"></script>*@ 8 <script src="~/Scripts/common/common.map.js?v=202005281610"></script> 9 <script src="~/Scripts/common/construct.plants2.js?v=202008111600"></script> 10 <script src="//api.map.baidu.com/api?v=2.0&ak=购买百度ak"></script> 11 <script src="~/Scripts/bmap.min.js"></script> 12 13 @Html.Partial("MapPartial") 14 @Html.Partial("MapPartial") 15 <style> 16 .full-card { 17 position: absolute; 18 height: 100%; 19 width: 100%; 20 } 21 .full-card .nav-tree { 22 position: absolute; 23 top: 10px; 24 left: 0px; 25 right: 0px; 26 bottom: 0px; 27 overflow: auto; 28 padding: 5px 10px; 29 } 30 31 .vertical-center-modal { 32 display: flex; 33 align-items: center; 34 justify-content: center; 35 } 36 37 .vertical-center-modal .ivu-modal { 38 top: 0; 39 } 40 41 .demo-carousel { 42 height: 400px; 43 line-height: 200px; 44 text-align: center; 45 font-size: 20px; 46 } 47 48 .ivu-tree li ul { 49 margin: 0; 50 padding: 0 0 0 10px; 51 } 52 53 .div2 { 54 margin: 0; 55 padding: 0 10px 0 10px; 56 } 57 58 .div3 { 59 margin: 0; 60 padding: 20px 0px 10px 0px; 61 } 62 63 /*.carousel-text { 64 position: absolute; 65 bottom: 25px; 66 height: 30px; 67 width: 100%; 68 text-align: center; 69 color: white; 70 background-color: rgba(0,0,0,0.3); 71 }*/ 72 .carousel-text{ 73 position: relative; 74 bottom: 35px; 75 width: 100%; 76 font-size:13px; 77 /*width: auto;*/ /*也可以*/ 78 text-align: center; 79 color: white; 80 background-color: rgba(0,0,0,0.3); 81 } 82 .mydiv { 83 padding: 20px 0px 0 10px; 84 line-height: 30px; 85 font-size: 14px; 86 } 87 88 .mydiv1 { 89 padding:5px 10px 0 30px; 90 line-height: 40px; 91 color: #000; 92 font-size: 16px; 93 } 94 95 .mydiv span { 96 color: #000; 97 } 98 .mydiv2{ 99 font-style:italic 100 } 101 </style> 102 103 <style type="text/css"> 104 .attr-form .ivu-form-item { 105 margin-bottom: 0px; 106 } 107 .map-left-card .ivu-card-body{ 108 overflow: auto; 109 position: absolute; 110 top: 50px; 111 bottom: 0px; 112 } 113 114 .full-content{ 115 position: relative; 116 height: 100%; 117 width:100%; 118 } 119 .full-content .ivu-tabs{ 120 position: relative; 121 height: 100%; 122 width:100%; 123 } 124 .full-content .ivu-tabs .ivu-tabs-content{ 125 height: calc(100% - 52px); 126 width:100%; 127 } 128 .full-content .ivu-tabs .ivu-tabs-content .ivu-tabs-tabpane{ 129 height: 100%; 130 width:100%; 131 } 132 </style> 133 134 <script type="text/x-template" id="viewTemplate"> 135 <div style="width:100%;height:100%"> 136 <div id="contentFirst" v-show="!showSecond" style="width:100%;height:100%"> 137 <Layout style="width:100%;height:100%"> 138 139 <Sider v-bind:width="270" style="background: #eee;margin:0px 0px 0px 0px;"> 140 <Card style="width:100%;height:100%" class="full-card"> 141 <div class="nav-tree" > 142 <Row > 143 <Col span="18"> 144 145 <i-input type="text" v-model="formFilter.DValue" placeholder="请输入关键字" style="width:100%"></i-input> 146 147 </Col> 148 <Col span="6"> 149 <div style="margin:0px 10px 0px 5px"> 150 <i-button type="primary" size="default" v-on:click="filterClick">查询</i-button> 151 </div> 152 </Col> 153 </Row> 154 <row style="margin:10px 5px 0px 0px"> 155 <Col span="24"> 156 <Select v-model="coastalZone" style="width:100%" multiple placeholder="所有海拔高度"> 157 158 <Option v-for="item in coastalZoneList" v-bind:value="item.value" v-bind:key="item.value">{{ item.label }}</Option> 159 </Select> 160 </Col> 161 </row> 162 <row> 163 <Col span="24"> 164 <Tree v-bind:data="data1" v-on:on-select-change="treeClick"></Tree> 165 </Col> 166 </row> 167 168 169 </div> 170 </Card> 171 </Sider> 172 <Layout > 173 <Content class="full-content"> 174 <Tabs v-bind:value="activeKey" v-on:on-click="tabsClick" ref="tabs" v-bind:animated="false"> 175 <Tab-pane label="植物列表" name="key1" v-bind:index="1"> 176 177 <datagrid border ref="gv" v-bind:height="tableHeight" v-bind:columns="columns1" v-bind:url="url" size="small" v-bind:page-small="false"></datagrid> 178 </Tab-pane> 179 @*<Tab-pane v-show="showEchartsMap" :lazy="true" label="物种分布" name="key2" v-bind:index="2"> 180 181 <div ref="plantsMapEchartsID" style="height:100%;width:100%"> </div> 182 183 </Tab-pane>*@ 184 <Tab-pane label="物种分布" name="key2" v-bind:index="2"> 185 186 <div ref="plantsMapEchartsID" style="height:100%;width:100%"> </div> 187 188 </Tab-pane> 189 190 </Tabs> 191 </Content> 192 </Layout> 193 </Layout> 194 </div> 195 196 197 <div id="contentSecond" v-show='showSecond' style="width:100%;height:100%"> 198 <Layout style="width:100%;height:100%"> 199 <Content> 200 201 <div style="position:absolute;top: 144px;right: 30px;"> 202 <div style="position: relative;z-index:99999"> 203 <a id="btn" href="javascript:;"> 204 <tooltip content="返回列表" placement="top-end"> 205 <img src="/Ecology/Images/icons8-return-30.png" /> 206 </tooltip> 207 </a> 208 </div> 209 </div> 210 211 <div v-if='showSecond' style="width:100%;height:100%"> 212 <Tabs v-bind:value="activeKeySecond" v-on:on-click="tabsClickSecond"> 213 <Tab-pane label="植物详情" name="key3" v-bind:index="1"> 214 <div v-bind:style="bindStyle_yd"> 215 <div class="container"> 216 <row> 217 <i-col span="5"> 218 219 </i-col> 220 <i-col span="14"> 221 <div class="mydiv1" style="text-align:center"> 222 <span> {{formModel.Species}} </span> 223 <span style="font-style:italic"> {{formModel.LatinSpecies}} </span> 224 </div> 225 </i-col> 226 <i-col span="5"> 227 </i-col> 228 </row> 229 <div id="dowebok"> 230 <Carousel v-bind:height="imgHeight+'px'" v-model="carouselValue" style="text-align:center;" dots="outside"> 231 <div v-for="item in imgData" v-on:click="handleView(item)"> 232 <Carousel-Item> 233 <img v-bind:src="item.src" style="height:inherit;width:auto;cursor:pointer;" /> 234 <div><span class="carousel-text"> {{item.picName}}</span></div> 235 </Carousel-Item> 236 </div> 237 </Carousel> 238 </div> 239 240 <ViewPhotoWithAttr ref="viewerYd" v-bind:image-list="imgData" /> 241 <row> 242 243 <i-col span="24"> 244 <div class="mydiv"> 245 <row> 246 <i-col span="9"> 247 科: <span> {{formModel.Family}} </span><span> {{formModel.LatinFamily}} </span> 248 </i-col> 249 <i-col span="9"> 250 属: <span> {{formModel.Genus}} </span><span> {{formModel.LatinGenus}} </span> 251 </i-col> 252 <i-col span="6"> 253 国家保护等级: <span> {{formModel.NationalConservationLevel}} </span> 254 </i-col> 255 </row> 256 <row> 257 <i-col span="9"> 258 中国生物多样性红色名录: <span> {{translateChineseSpeciesRedList(formModel.ChinaBiodiversityRedList)}} </span> 259 </i-col> 260 <i-col span="9"> 261 别名: <span> {{formModel.AnotherName}} </span> 262 </i-col> 263 <i-col span="6"> 264 CITES附录: <span> {{formModel.CITESAppendix}} </span> 265 </i-col> 266 267 </row> 268 <row> 269 <i-col span="9"> 270 海拔: <span> {{formModel.Altitude}}(米) </span> 271 </i-col> 272 <i-col span="9"> 273 外来与入侵种: <span> {{formModel.ExoticOrInvasiveSpeciesName}} </span> 274 </i-col> 275 <i-col span="6"> 276 IUCN濒危等级: <span> {{translateChineseSpeciesRedList(formModel.IUCNEndangeredGrade)}} </span> 277 </i-col> 278 </row> 279 <row> 280 <i-col span="24"> 281 分布: <span> {{formModel.Locations}} </span> 282 </i-col> 283 284 </row> 285 </div> 286 </i-col> 287 </row> 288 </div> 289 </div> 290 </Tab-pane> 291 292 <Tab-pane label="调查结果" name="key4" v-if="showMap" v-bind:index="2"> 293 294 <Layout style="height:100%"> 295 <i-Content style="height:100%"> 296 <Cesium-Map ref="cesiumMap" style="position: relative;height:100%;width: 100%;" @@data-click="handleMapDataClick"></Cesium-Map> 297 </i-Content> 298 <Sider style="background-color: rgb(245, 247, 249);" v-bind:width="250" v-show="selectPoint"> 299 <card style="height:100%" class="map-left-card"> 300 <p slot="title">植物详情</p> 301 <i-form v-bind:label-width="80" class="attr-form"> 302 <Form-Item label="物种名称"> 303 <span> {{selectInfo.Species}} </span> 304 </Form-Item> 305 <Form-Item label="物种数量"> 306 <span> {{selectInfo.Quantity }} </span> 307 </Form-Item> 308 <Form-Item label="样地编号"> 309 <span> {{selectInfo.PlotID }} </span> 310 </Form-Item> 311 <Form-Item label="样地地点"> 312 <span> {{selectInfo.SamplePlotAddress}} </span> 313 </Form-Item> 314 315 <Form-Item label="经纬度"> 316 <span> {{selectInfo.LonAndLat}} </span> 317 </Form-Item> 318 <Form-Item label="样地面积"> 319 <span v-if="selectInfo.SamplePlotArea"> {{selectInfo.SamplePlotArea}} (㎡)</span> 320 </Form-Item> 321 <Form-Item label="海拔"> 322 <span v-if="selectInfo.Altitude"> {{selectInfo.Altitude}} (米)</span> 323 </Form-Item> 324 <Form-Item label="坡度"> 325 <span v-if="selectInfo.Slope"> {{selectInfo.Slope}} (度)</span> 326 </Form-Item> 327 <Form-Item label="调查时间"> 328 <span> {{selectInfo.InvestigationTime}} </span> 329 </Form-Item> 330 <Form-Item label="调查人"> 331 <span> {{selectInfo.Investigator}} </span> 332 </Form-Item> 333 334 <div v-if="weatherData!=null&& weatherData.RecordDate"> 335 <div style="margin:10px 0px 0px 15px "><label>现场气象</label></div> 336 <Form-Item label="数据时间"> 337 <span v-if="weatherData.RecordDate">{{ weatherData.RecordDateString }}</span> 338 <span v-if="weatherData.RecordDate">{{ weatherData.DataHour +'时' }}</span> 339 </Form-Item> 340 341 <Form-Item label="温度"> 342 <span>{{ weatherData.Temperature }} (℃)</span> 343 </Form-Item> 344 345 <Form-Item label="降雨量"> 346 <span>{{ weatherData.Rainfall }} (mm/h)</span> 347 </Form-Item> 348 349 <Form-Item label="相对湿度"> 350 <span>{{ weatherData.RelativeHumidity }} (%)</span> 351 </Form-Item> 352 353 <Form-Item label="风速"> 354 <span>{{ weatherData.AvgWind }} (m/s)</span> 355 </Form-Item> 356 357 <Form-Item label="风向"> 358 <span>{{ weatherData.WindDir }}</span> 359 </Form-Item> 360 361 <Form-Item label="能见度"> 362 <span>{{ weatherData.Visibility }} (km)</span> 363 </Form-Item> 364 365 </div> 366 </i-form> 367 368 369 </card> 370 </Sider> 371 </Layout> 372 </Tab-pane> 373 374 </Tabs> 375 376 </div> 377 378 </Content> 379 </Layout> 380 </div> 381 382 </div> 383 </script> 384 <div id="app"> 385 </div> 386 387 <script> 388 var locationType = 1; 389 var coastalZone = []; 390 //是否珍惜植物 391 var isRare = true; 392 var coastalZoneList= [ 393 //{ value: 0, label: "全部" }, 394 { value: 1, label: "海岸带0-30m" }, 395 { value: 2, label: "0-200m" }, 396 { value: 3, label: "200-400m" }, 397 { value: 4, label: "400-600m" }, 398 { value: 5, label: "600-900m" } 399 ] 400 var vm = new Vue({ 401 template: "#viewTemplate", 402 el: '#app', 403 data: { 404 plantsMapEcharts:null, 405 query:'', 406 showEchartsMap:true, 407 tabsHeight_yd: 600, 408 activeKeySecond: 'key3', 409 showSecond: false, 410 coastalZone: coastalZone, 411 coastalZoneList: coastalZoneList, 412 data1: [], 413 //查询默认值 414 formFilter: { 415 DValue: '', 416 }, 417 tableHeight: 700, 418 imgHeight: 350, 419 showMap: false, 420 locationList: null, 421 selectedItem: null, 422 selectPoint: null, 423 selectInfo: {}, 424 weatherData: {}, 425 speciesIfreamHeight: 600, 426 show2: false, 427 activeKey: 'key1', 428 formModel: { 429 }, 430 imgData:[], 431 carouselValue: 0, 432 url: '@Url.Action("Plants2List", "Construct")' + '?locationType=' + locationType + '&coastalZone=' + coastalZone, 433 modal1: false, 434 detailIfreamSrc: '', 435 mapIfreamSrc: "", 436 tabname: "", 437 tableData1: [], 438 columns1: [ 439 { 440 title: '种', 441 key: 'Species', 442 sortable: 'custom', 443 minWidth: 80, 444 render: function (h, params) { 445 return h('div', [ 446 h('a', { 447 props: { 448 type: 'primary', 449 size: 'small' 450 }, 451 style: { 452 }, 453 on: { 454 click: function () { 455 vm.showDetails(params); 456 } 457 } 458 }, params.row.Species) 459 ]); 460 } 461 }, 462 { 463 title: '别名', 464 key: 'AnotherName', 465 sortable: 'custom', 466 //sortable: true, 467 minWidth: 80, 468 469 }, 470 { 471 title: '拉丁名', 472 key: 'LatinSpecies', 473 sortable: 'custom', 474 //sortable: true, 475 minWidth: 120, 476 render: function (h, params) { 477 return h('div', [ 478 h('span', { 479 props: { 480 type: 'primary', 481 size: 'small' 482 }, 483 style: { 484 fontStyle: 'italic' 485 } 486 }, params.row.LatinSpecies) 487 ]); 488 } 489 }, 490 { 491 title: '国家保护等级', 492 key: 'NationalConservationLevel', 493 minWidth: 80, 494 maxWidth: 135, 495 filters: filtersNationalConservationLevel, 496 filterRemote: filterRemote 497 }, 498 { 499 title: 'IUCN濒危等级', 500 key: 'IUCNEndangeredGrade', 501 minWidth: 100, 502 maxWidth: 150, 503 filters: filtersChineseSpeciesRedList, 504 filterRemote: filterRemote, 505 render: renderChineseSpeciesRedList 506 }, 507 { 508 title: '多样性名录', 509 key: 'ChinaBiodiversityRedList', 510 minWidth: 70, 511 maxWidth: 125, 512 filters: filtersChineseSpeciesRedList, 513 filterRemote: filterRemote, 514 render: renderChineseSpeciesRedList 515 }, 516 517 { 518 title: 'CITES附录', 519 key: 'CITESAppendix', 520 minWidth: 100, 521 maxWidth: 150, 522 filters: filtersCITESAppendix, 523 filterRemote: filterRemote, 524 525 }, { 526 title: '海拔', 527 key: 'Altitude', 528 minWidth: 50, 529 maxWidth: 90, 530 531 532 }, { 533 title: '分布', 534 key: 'Locations', 535 minWidth: 200, 536 //maxWidth: 300, 537 }, 538 539 540 ] 541 542 }, 543 created: function () { 544 //this.getPlants2AltitudeList(locationType); 545 this.initTree(); 546 547 }, 548 watch: { 549 selectInfo: function (info) { 550 if (info) { 551 this.getWeatherData() 552 } 553 }, 554 'coastalZone': function (newValue) { 555 coastalZone = newValue; 556 557 this.initTree() 558 559 this.$refs.gv.filters = []; 560 //this.$refs.gv.queryinfo = null; 561 this.columns1 = arrayDeepCopy(this.columns1);//去掉界面选中状态,深拷贝而不是引用。 562 this.$refs.gv.currentPage = 1; 563 this.url = '@Url.Action("Plants2List", "Construct")' + '?locationType=' + locationType + '&coastalZone=' + coastalZone + '&query=' + this.query; 564 565 //this.showEchartsMap = false; 566 if (this.showEchartsMap == true) { 567 var that = this; 568 569 setTimeout(() => { 570 that.plantsMap(); 571 }, 300) 572 } 573 } 574 }, 575 computed: { 576 bindStyle_yd: function () { 577 return { 578 'height': '' + this.tabsHeight_yd + 'px', 579 'overflowY': 'auto', 580 'loverflowX': 'hidden' 581 } 582 }, 583 584 }, 585 methods: { 586 tabsClickSecond: function (typeSelect) { 587 588 }, 589 590 handleView: function (info) { 591 //console.log('handleViewYd', info.id); 592 var index = 0 593 for (var i = 0; i < this.imgData.length; i++) { 594 if (this.imgData[i].id === info.id) { 595 index = i 596 break 597 } 598 } 599 //console.log('index', index); 600 this.$refs.viewerYd.view(index) 601 }, 602 getImageListByPlotID: function (dataID) { 603 let that = this; 604 that.imgData = []; 605 606 try { 607 608 let url = '@Url.Action("GetImageList", "Construct")'; 609 $.ajax({ 610 url: url, 611 type: 'POST', 612 data: { dataID: dataID.toString(), dataType: 'T_Plants2.Pic' }, 613 success: function (result) { 614 //console.log('getImageListByPlotID', result); 615 if (result.success && result.rows != null && result.rows.length > 0) { 616 let imageList = result.rows; 617 618 if (imageList.length > 0) { 619 var srcPart = '@Url.Action("Image", "Image")' + '/' 620 var part = "/640"; 621 for (var i = 0, len = imageList.length; i < len; i++) { 622 var fileName = imageList[i].FileName; 623 if (fileName != undefined && fileName != null) { 624 var fileNameArr = fileName.split("_"); 625 var pic = fileNameArr[fileNameArr.length - 1]; 626 var picName = pic.substring(0, pic.length - 4); 627 628 that.imgData.push({ id: imageList[i].ImageID, src: srcPart + imageList[i].ImageID + part, name: imageList[i].FileName, picName: picName, imageUrlSmall: srcPart + imageList[i].ImageID + part, imageUrl: srcPart + imageList[i].ImageID });//imageList[i].textName 629 630 } 631 632 633 } 634 //console.log('that.imgData', that.imgData); 635 636 } 637 } 638 639 } 640 }); 641 } catch (err) { 642 //console.log('GetImageIDListErr', err) 643 } 644 645 }, 646 initTree: function () { 647 var that = this; 648 that.data1 = []; 649 var coastalZoneTemp = coastalZone.toString(); 650 console.log("coastalZoneTemp", coastalZoneTemp); 651 var url = '@Url.Action("Plants2Tree", "Construct")'; 652 var data = { locationType: locationType, coastalZone: coastalZoneTemp, query: that.query }; 653 $.ajax({ 654 url:url, 655 data:data, 656 type:"get", 657 dataType:"json", 658 traditional: true, 659 success: function (result) { 660 //console.log('Plants2Tree', result) 661 if (result != null && result.length > 0) { 662 if (result[0] != null) { 663 result[0].expand = true; 664 result[0].selected = true; 665 666 that.data1 = result; 667 //console.log('that.$refs.gv.filters', that.$refs.gv.filters) 668 669 } 670 } 671 } 672 }) 673 674 }, 675 getWeatherData() { 676 var url = '@Url.Action("WeatherData", "Construct")'; 677 var that = this; 678 var info = this.selectInfo; 679 if (info.InvestigationTime && info.Latitude && info.Longitude) { 680 681 var data = { 682 datetime: info.InvestigationTime, 683 lat: info.Latitude, 684 lon: info.Longitude 685 } 686 $.ajax({ 687 url: url, 688 data: data, 689 success: function (result) { 690 console.log('WeatherData', result) 691 if (result.success) { 692 that.weatherData = result.data 693 } 694 } 695 }); 696 } 697 else { 698 that.weatherData = {} 699 } 700 701 }, 702 selectTreeById(id) { 703 var tree = this.data1; 704 for (var i in tree) { 705 var treeItem = findNode(tree[i], id); 706 if (treeItem) { 707 if (this.selectedItem) { 708 Vue.set(this.selectedItem, 'selected', false); 709 } 710 this.selectedItem = treeItem; 711 712 //item.selected = true; 713 if (treeItem != null) { 714 Vue.set(treeItem, 'selected', true); 715 } 716 717 var filterModel = { 718 Family: null, 719 Genus: null, 720 Species: null, 721 } 722 723 filterModel.Family = [treeItem.subjectName]; 724 filterModel.Genus = [treeItem.genus]; 725 filterModel.Species = [treeItem.title]; 726 this.getLocationList(filterModel) 727 728 break; 729 } 730 731 } 732 }, 733 734 tabsClick: function (key) { 735 // //console.log('tabsClick', key); 736 this.activeKey = key; 737 738 //this.resizePlantsMapEcharts(); 739 if (this.showEchartsMap == true) { 740 var that = this; 741 742 setTimeout(() => { 743 that.plantsMap(); 744 }, 300) 745 } 746 747 }, 748 getAnimalInfo: function (id) { 749 var url = '@Url.Action("Plants2Details", "Construct")'; 750 $.ajax({ 751 url: url, 752 data: { id: id }, 753 success: function (result) { 754 // //console.log('getInfo', result.rows); 755 if (result.success) { 756 vm.setAinmalInfo(result.rows); 757 } 758 } 759 }); 760 }, 761 setAinmalInfo(info) { 762 this.formModel = info; 763 }, 764 showDetails: function (params) { 765 // //console.log('showDetails', params.row); 766 this.showSecond = true; 767 //this.activeKey = 'key2'; 768 769 this.getAnimalInfo(params.row.PlantID); 770 this.selectTreeById(params.row.PlantID) 771 //vm.show2 = true; 772 this.getImageListByPlotID(params.row.PlantID); 773 774 }, 775 handleMapDataClick: function (data) { 776 777 //this.$emit('data-click', data.id.getValue()) 778 if (data) { 779 this.selectPoint = data.id.getValue() 780 this.getPlantQuadratsInfo() 781 } 782 else { 783 this.selectPoint = null 784 } 785 }, 786 787 treeClick: function (dataArray) { 788 console.log('dataArray', dataArray) 789 this.selectedItem = dataArray[0] 790 //console.log('dataArray', dataArray); 791 var filters = []; 792 //将datagrid中this.filters 对应字段设置为null,url就不会包含该项 793 var filterModel = { 794 //Class: null, 795 ChineseOrder: null, 796 Family: null, 797 Genus: null, 798 Species: null, 799 } 800 //this.showEchartsMap = true; 801 //vm.show2 = false; 802 //this.activeKey = 'key1'; 803 if (dataArray != null && dataArray.length > 0) { 804 if (dataArray[0].title != null && dataArray[0].title.length > 0) { 805 var title = (dataArray[0].title.split("("))[0]; 806 // //console.log('title', title); 807 if (title != null && title != "") { 808 //单项过滤 809 switch (dataArray[0].key) { 810 case '全部': 811 812 break; 813 //case '纲': 814 // filterModel.Class = [title]; 815 // break; 816 case '目': 817 //filterModel.Class = [dataArray[0].typeName]; 818 filterModel.ChineseOrder = [title]; 819 820 break; 821 case '科': 822 //filterModel.Class = [dataArray[0].typeName]; 823 filterModel.ChineseOrder = [dataArray[0].catalogueName]; 824 filterModel.Family = [title]; 825 826 break; 827 case '属': 828 //filterModel.Class = [dataArray[0].typeName]; 829 filterModel.ChineseOrder = [dataArray[0].catalogueName]; 830 filterModel.Family = [dataArray[0].subjectName]; 831 filterModel.Genus = [title]; 832 833 break; 834 case '种': 835 //filterModel.Class = [dataArray[0].typeName]; 836 837 filterModel.ChineseOrder = [dataArray[0].catalogueName]; 838 filterModel.Family = [dataArray[0].subjectName]; 839 filterModel.Genus = [dataArray[0].genus]; 840 filterModel.Species = [title]; 841 //vm.show2 = true; 842 //console.log('treeClick-showMap', this.showMap, this.activeKey) 843 //if (this.showMap == false && this.activeKey == 'key4') { 844 // this.activeKey == 'key1' 845 //} 846 var id = dataArray[0].id; 847 if (id != null && id > 0) { 848 this.getAnimalInfo(id); 849 this.getImageListByPlotID(id); 850 //this.$nextTick(function () { 851 // viewer = new Viewer(document.getElementById('dowebok')); 852 //}) 853 } 854 855 break; 856 default: 857 } 858 859 } 860 } 861 862 } 863 864 //filters.push({ 'row': 'Class', 'op': 'equal', 'value': filterModel.Class }); 865 filters.push({ 'row': 'ChineseOrder', 'op': 'equal', 'value': filterModel.ChineseOrder }); 866 filters.push({ 'row': 'Family', 'op': 'equal', 'value': filterModel.Family }); 867 filters.push({ 'row': 'Genus', 'op': 'equal', 'value': filterModel.Genus }); 868 filters.push({ 'row': 'Species', 'op': 'equal', 'value': filterModel.Species }); 869 ////console.log('filters', filters); 870 871 this.$refs.gv.queryinfo = trim(this.formFilter.DValue); 872 this.$refs.gv.setFilter(filters); 873 874 //this.getLocationList(filterModel) 875 876 if (this.showEchartsMap == true) { 877 var that = this; 878 879 setTimeout(() => { 880 that.plantsMap(); 881 }, 300) 882 } 883 884 }, 885 886 getLocationList: function (filterModel) { 887 var that = this 888 var filter = null 889 if (filterModel) { 890 filter = {} 891 if (filterModel.Class) { 892 filter.ClassName = filterModel.Class[0] 893 } 894 if (filterModel.OrderName) { 895 filter.OrderName = filterModel.OrderName[0] 896 } 897 if (filterModel.Family) { 898 filter.FamilyName = filterModel.Family[0] 899 } 900 if (filterModel.Genus) { 901 filter.GenusName = filterModel.Genus[0] 902 } 903 if (filterModel.Species) { 904 filter.SpeciesName = filterModel.Species[0] 905 } 906 filter.locationType = locationType; 907 //filter.coastalZone = coastalZone; 908 } 909 910 911 if (filter && filter.SpeciesName) { 912 var url = '@Url.Action("PlantQuadratsLocationList", "Construct")'; 913 $.ajax({ 914 url: url, 915 data: filter, 916 success: function (result) { 917 918 //console.log('PlantQuadratsLocationList', result); 919 if (result.success && result.rows != null && result.rows.length>0) { 920 var list = result.rows; 921 var pointList = []; 922 for(var item of list) { 923 var num = getNumByQuantity(locationType, item.Quantity) 924 var p = { 925 id: item.PlantQuadratID, 926 name: item.Species, 927 label: item.SamplePlotAddress, 928 lon: item.Longitude, 929 lat: item.Latitude, 930 num: num, 931 932 } 933 pointList.push(p) 934 } 935 that.showMap = true; 936 that.locationList = pointList; 937 that.selectInfo = {}; 938 that.selectPoint = null 939 that.$nextTick(function () { 940 if (that.$refs.cesiumMap) { 941 that.$refs.cesiumMap.initData(pointList); 942 } 943 }) 944 } else { 945 that.showMap = false; 946 947 if (that.showMap == false && that.activeKeySecond == 'key4') { 948 that.activeKeySecond = 'key3' 949 } 950 951 that.locationList = []; 952 that.selectInfo = {}; 953 that.selectPoint = null 954 that.$nextTick(function () { 955 if (that.$refs.cesiumMap) { 956 that.$refs.cesiumMap.initData([]); 957 } 958 }) 959 } 960 } 961 }); 962 } 963 else { 964 that.showMap = false; 965 that.locationList = []; 966 that.selectInfo = {}; 967 that.selectPoint = null 968 that.$nextTick(function () { 969 if (that.$refs.cesiumMap) { 970 that.$refs.cesiumMap.initData([]); 971 } 972 }) 973 } 974 }, 975 getPlantQuadratsInfo: function () { 976 977 var that = this 978 var url = '@Url.Action("PlantQuadratsInfo", "Construct")'; 979 $.ajax({ 980 url: url, 981 data: { id: that.selectPoint }, 982 success: function (result) { 983 //console.log('PlantQuadratsInfo', result); 984 if (result.success) { 985 var data = result.data; 986 that.selectInfo = data; 987 var strLonAndLat = getLonAndLat(data.Longitude, data.Latitude); 988 that.selectInfo.LonAndLat = strLonAndLat 989 990 } 991 } 992 }); 993 994 }, 995 //查询点击事件 996 filterClick: function (dataf) { 997 var queryData = ''; 998 if (this.formFilter.DValue != null && this.formFilter.DValue.length > 0) { 999 queryData = trim(this.formFilter.DValue); 1000 } 1001 this.query = queryData; 1002 //this.initTree(); 1003 // //console.log('queryData', queryData); 1004 //this.$refs.gv.setQuery(queryData); 1005 this.initTree(); 1006 this.$refs.gv.filters = []; 1007 //this.$refs.gv.queryinfo = null; 1008 this.columns1 = arrayDeepCopy(this.columns1);//去掉界面选中状态,深拷贝而不是引用。 1009 1010 this.$refs.gv.currentPage = 1; 1011 this.url = '@Url.Action("Plants2List", "Construct")' + '?locationType=' + locationType + '&coastalZone=' + coastalZone + '&query=' + this.query; 1012 this.showSecond = false; 1013 if ( this.showEchartsMap == true) { 1014 var that = this; 1015 setTimeout(() => { 1016 that.plantsMap(); 1017 }, 300) 1018 } 1019 //this.showEchartsMap = false; 1020 //this.activeKey = 'key1'; 1021 1022 1023 }, 1024 resizePlantsMapEcharts() { 1025 1026 var that = this; 1027 setTimeout(() => { 1028 var plantsMapEcharts = that.plantsMapEcharts; 1029 if (plantsMapEcharts) { 1030 plantsMapEcharts.resize() 1031 } 1032 }, 300) 1033 }, 1034 plantsMap: function () { 1035 var that = this; 1036 var filtersPms = that.$refs.gv.filters; 1037 var filters = []; 1038 var key = ""; 1039 if (filtersPms != null) { 1040 for (var i in filtersPms) { 1041 if (filtersPms[i].value && filtersPms[i].value.length > 0) { 1042 filters.push({ 'field': filtersPms[i].row, 'op': filtersPms[i].op, 'value': filtersPms[i].value }) 1043 if (filtersPms[i].row == "Species") { 1044 key = "种"; 1045 } 1046 } 1047 } 1048 if (filters.length > 0) { 1049 filters = JSON.stringify(filters); 1050 } 1051 } else { 1052 filters = null; 1053 } 1054 1055 //console.log('filters', filters) 1056 var query = vm.query; 1057 console.log('query', query); 1058 console.log('coastalZone1', coastalZone); 1059 var coastalZoneTemp = coastalZone.toString(); 1060 console.log("coastalZoneTemp", coastalZoneTemp); 1061 1062 var url = '@Url.Action("PlantsMap", "Construct")'; 1063 $.get(url, { locationType: locationType, coastalZone: coastalZoneTemp, filters: filters, query: query }, function (result) { 1064 console.log('PlantsMap', result); 1065 if (result.mapList != null && result.mapList != undefined) { 1066 var id = "plantsMapEchartsID"; 1067 that.plantsMapEchart(result.mapList,id) 1068 } 1069 }); 1070 1071 }, 1072 plantsMapEchart: function (list,id) { 1073 // console.log('filtersPms', filtersPms) 1074 if (list != undefined && list != null) { 1075 var convertDataTest = list; 1076 console.log('plantsMapEcharts', this.plantsMapEcharts) 1077 //if (this.plantsMapEcharts) { 1078 // this.plantsMapEcharts.dispose() 1079 //} else { 1080 // this.plantsMapEcharts = null; 1081 //} 1082 var element = this.$refs[id]; 1083 console.log('element', element) 1084 var chart = echarts.init(element); 1085 this.plantsMapEcharts = chart; 1086 1087 1088 var myseriesName = "物种数量"; 1089 var mytitle = "物种分布"; 1090 if (key == "种") { 1091 mytitle = "种群数量分布"; 1092 myseriesName = "种群量"; 1093 } 1094 1095 var option = { 1096 title: { 1097 text: mytitle, 1098 left: 'center', 1099 top: 15, 1100 }, 1101 1102 tooltip: { 1103 trigger: 'item', 1104 formatter: function (dataTemp) { 1105 //种群量 1106 //console.log(dataTemp); 1107 //console.log(dataTemp.seriesName); 1108 var numAdd = ""; 1109 if (dataTemp.seriesName == "种群量") { 1110 if (dataTemp != null && dataTemp.value[2] != null && dataTemp.value[2] != 0) { 1111 for (var j = 0; j < dataTemp.value[2]; j++) { 1112 numAdd += "+"; 1113 } 1114 } 1115 1116 } else { 1117 numAdd = dataTemp.value[2]; 1118 } 1119 1120 1121 var formateStrings = []; 1122 formateStrings.push(dataTemp.value[3] + dataTemp.seriesName + "<br/>" + dataTemp.marker + dataTemp.name + ":" + numAdd + "<br/>"); 1123 1124 return formateStrings; 1125 } 1126 }, 1127 bmap: { 1128 center: [114.214336, 22.628779],//地图中心点经纬度 1129 zoom: 11, //地图缩放程度 1130 roam: true, 1131 mapStyle: { 1132 styleJson: [{ 1133 'featureType': 'water', 1134 'elementType': 'all', 1135 'stylers': { 1136 'color': '#d1d1d1' 1137 } 1138 }, 1139 { 1140 'featureType': 'land', 1141 'elementType': 'all', 1142 'stylers': { 1143 'color': '#f3f3f3' 1144 } 1145 }, { 1146 'featureType': 'railway', 1147 'elementType': 'all', 1148 'stylers': { 1149 'visibility': 'off' 1150 } 1151 }, { 1152 'featureType': 'highway', 1153 'elementType': 'all', 1154 'stylers': { 1155 'color': '#fdfdfd' 1156 } 1157 }, { 1158 'featureType': 'highway', 1159 'elementType': 'labels', 1160 'stylers': { 1161 'visibility': 'off' 1162 } 1163 }, 1164 { 1165 'featureType': 'arterial', 1166 'elementType': 'geometry', 1167 'stylers': { 1168 'color': '#fefefe' 1169 } 1170 }, { 1171 'featureType': 'arterial', 1172 'elementType': 'geometry.fill', 1173 'stylers': { 1174 'color': '#fefefe' 1175 } 1176 }, { 1177 'featureType': 'poi', 1178 'elementType': 'all', 1179 'stylers': { 1180 'visibility': 'off' 1181 } 1182 }, { 1183 'featureType': 'green', 1184 'elementType': 'all', 1185 'stylers': { 1186 'visibility': 'off' 1187 } 1188 }, { 1189 'featureType': 'subway', 1190 'elementType': 'all', 1191 'stylers': { 1192 'visibility': 'off' 1193 } 1194 }, 1195 { 1196 'featureType': 'manmade', 1197 'elementType': 'all', 1198 'stylers': { 1199 'color': '#d1d1d1' 1200 } 1201 }, 1202 { 1203 'featureType': 'local', 1204 'elementType': 'all', 1205 'stylers': { 1206 'color': '#d1d1d1' 1207 } 1208 }, 1209 { 1210 'featureType': 'arterial', 1211 'elementType': 'labels', 1212 'stylers': { 1213 'visibility': 'off' 1214 } 1215 }, { 1216 'featureType': 'boundary', 1217 'elementType': 'all', 1218 'stylers': { 1219 'color': '#fefefe' 1220 } 1221 }, 1222 { 1223 'featureType': 'building', 1224 'elementType': 'all', 1225 'stylers': { 1226 'color': '#d1d1d1' 1227 } 1228 }, 1229 { 1230 'featureType': 'label', 1231 'elementType': 'labels.text.fill', 1232 'stylers': { 1233 'color': '#d1d1d1'//'#D8BFD8'// '#999999' 1234 } 1235 } 1236 ] 1237 } 1238 1239 }, 1240 series: [ 1241 { 1242 name: myseriesName, 1243 type: 'scatter', //散点图 1244 coordinateSystem: 'bmap', //坐标系 1245 data: convertDataTest, 1246 symbolSize: function (val, params) { 1247 var value = val[2] * 2 + 7; 1248 if (value > 40) { 1249 value = 40; 1250 } 1251 return value; 1252 }, 1253 label: { 1254 normal: { 1255 formatter: function (params) { 1256 1257 return params.value[3]; 1258 }, 1259 position: 'right', 1260 show: true 1261 }, 1262 emphasis: { 1263 show: false 1264 } 1265 }, 1266 itemStyle: { 1267 normal: { 1268 color: 'green' 1269 } 1270 } 1271 }, 1272 1273 ] 1274 } 1275 chart.setOption(option); 1276 console.log('chart',chart); 1277 element.style.width = 100 + '%'; 1278 element.style.height = 100 + '%'; 1279 this.resizePlantsMapEcharts(); 1280 1281 1282 } else { 1283 //var element = this.$refs[id]; 1284 ////console.log('element', element) 1285 //var myChart = echarts.init(element); 1286 //myChart.clear(); 1287 } 1288 1289 }, 1290 1291 1292 1293 1294 }, 1295 mounted: function () { 1296 var that = this; 1297 // 设置表格高度 1298 that.tableHeight = window.innerHeight - 60 - 40 - 39 - 37 - 10 - 10;//- 168 - 37; 1299 that.tabsHeight_yd = window.innerHeight -207;//- 168 - 37; 1300 that.imgHeight = window.innerHeight - 450; 1301 window.onresize = function temp() { 1302 that.tableHeight = window.innerHeight - 60 - 40 - 39 - 37 - 10-10; 1303 that.imgHeight = window.innerHeight - 450;// 1304 that.tabsHeight_yd = window.innerHeight - 207;//- 168 - 37; 1305 1306 that.resizePlantsMapEcharts(); 1307 } 1308 1309 1310 that.$nextTick(() => { 1311 if (this.showEchartsMap == true) { 1312 var that = this; 1313 1314 setTimeout(() => { 1315 that.plantsMap(); 1316 }, 300) 1317 } 1318 var btn = document.getElementById('btn'); 1319 btn.addEventListener('click', function () { 1320 that.showSecond = false; 1321 1322 }, false); 1323 1324 }); 1325 1326 1327 1328 1329 1330 }, 1331 1332 }); 1333 1334 1335 1336 1337 1338 1339 1340 1341 </script>
树立目标,保持活力,gogogo!