ab6f736ee0e79dee6de695f50e4d78570d6f0e6a.svn-base 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. <template>
  2. <div id="searchOneMapContainer" class="searchOneMapClass">
  3. <draagable :title="draagableTitle" @closeDraggable="closeDraggable" initTop=-8
  4. initLeft=-10 initWidth=340 initHeight="510">
  5. <el-tabs @tab-click="tabClickHandler" v-loading="loadingAll" v-model="activeName" tab-position="left" type="border-card" style="height: 470px;margin-left:5px;padding-top: 5px;">
  6. <!-- <div v-for="(item,index) in result1_1" v-if="index == 0" :key="item[0].showValue" style="display: flex;
  7. flex-direction: row;border-bottom: 1px solid #b7b7d0;flex-wrap: wrap;">
  8. <div v-for="(item1,index1) in item" :key="item1.code" v-if="index1 != 0"> -->
  9. <el-tab-pane v-for="(item,index) in result1_2" v-if="index != 0" :key="index" :label="item.showValue" :name="item.showValue">
  10. <el-table :data="resultList2" v-loading='myloading' :height="426" style="width:100%;" :stripe=true @row-click="tableRowClickHandler">
  11. <el-table-column v-for="(item2,index2) in resultHeader2" v-if="index2 != 0" :key="item2.code" :prop="item2.code"
  12. :label="item2.showValue" show-overflow-tooltip>
  13. </el-table-column>
  14. </el-table>
  15. <div class="block" style="display:flex;flex-direction:row;justify-content:center;align-items:center;padding-top: 5px;background-color: #fff;">
  16. <el-pagination
  17. small
  18. @current-change="handleCurrentChange"
  19. :current-page.sync="pageIndex"
  20. :page-size="pageSize"
  21. :pager-count="5"
  22. layout="total, prev, pager, next"
  23. :total="total">
  24. </el-pagination>
  25. </div>
  26. </el-tab-pane>
  27. <div v-if="result1_2.length == 0" style="text-align:center;">
  28. <P>暂无数据!</P>
  29. </div>
  30. <!-- </div>
  31. </div> -->
  32. </el-tabs>
  33. </draagable>
  34. </div>
  35. </template>
  36. <script>
  37. const options = {
  38. url: '/src/arcgisAPI/init.js'
  39. };
  40. import _default,* as esriLoader from "esri-loader";
  41. import Vue from 'vue'
  42. import request from "../../../utils/gw_ajax_request.js"
  43. import {dateFormat,dbDateToDate} from "../../../utils/gw_date.js"
  44. import {_getLng,_getLat} from '../js/mercatorToLngLat.js'
  45. import {removeLayerById} from '../js/removeLayerById.js'
  46. import draagable from '../../../widgets/draggable.vue'
  47. import { Notification } from 'element-ui' //引入elementui中的notificaton组件,提示结果
  48. export default {
  49. props:['viewObj','mapObj','mapPointObj','layerList','bufferDistance'],
  50. components:{
  51. draagable,
  52. },
  53. data(){
  54. return{
  55. activeName: '',
  56. viewObject:null,
  57. mapObject:null,
  58. pointsArrStr:null,
  59. middleTypeListStr:null,
  60. mapBounds:null,
  61. scale:null,
  62. draagableTitle:"一张图信息查询",
  63. result1_1:[],//第一个接口 list
  64. result1_2:[],//第一个接口 header
  65. resultList2:[],//第二个接口请求 列表
  66. resultHeader2:[],//第二个接口请求 header
  67. currentShowList:[],
  68. showTableList:false,
  69. // bufferDistance:10,
  70. detail:[],//详细信息
  71. showRealTimeData:false,
  72. stcd:'',
  73. sttp:'',
  74. stnm:'',
  75. sTime:'',//开始时间
  76. eTime:'',//结束时间
  77. pageIndex:1,
  78. pageSize:10,
  79. pagerCount:5,
  80. total:0,
  81. myloading:true,
  82. loadingAll:true,
  83. currentItem:null,
  84. }
  85. },
  86. watch:{
  87. mapPointObj:function(newValue){
  88. this.spatialQuery_webService();
  89. }
  90. },
  91. mounted:function(){
  92. var date = new Date();
  93. this.sTime = dateFormat(date,"yyyy-MM-dd hh:mm:ss");
  94. var dateStr = new Date(date.getTime() - 15*24*60*60*1000);
  95. this.eTime = dateFormat(dateStr,"yyyy-MM-dd hh:mm:ss");
  96. this.spatialQuery_webService();
  97. },
  98. methods:{
  99. initHtml:function(){
  100. var _self = this;
  101. var templateStr = '';
  102. templateStr = templateStr + '<div id="edituser" style="height: 215px;min-width: 270px;text-align: left;">'+
  103. '<div style="height: 190px;overflow-y: auto;">'+
  104. '<div style="padding:5px;"><span style="color: #2C9EFF;">'+_self.detail[1].name+':</span>&nbsp;&nbsp;'+_self.detail[1].value+'</div>'+
  105. '<div style="padding:5px;"><span style="color: #2C9EFF;">'+_self.detail[2].name+':</span>&nbsp;&nbsp;'+_self.detail[2].value+'</div>'+
  106. '<div style="padding:5px;"><span style="color: #2C9EFF;">'+_self.detail[3].name+':</span>&nbsp;&nbsp;'+_self.detail[3].value+'</div>'+
  107. '<div style="padding:5px;"><span style="color: #2C9EFF;">'+_self.detail[4].name+':</span>&nbsp;&nbsp;'+_self.detail[4].value+'</div>'+
  108. '<div style="padding:5px;"><span style="color: #2C9EFF;">'+_self.detail[5].name+':</span>&nbsp;&nbsp;'+_self.detail[5].value+'</div>'+
  109. '<div style="padding:5px;"><span style="color: #2C9EFF;">'+_self.detail[6].name+':</span>&nbsp;&nbsp;'+_self.detail[6].value+'</div>';
  110. // if(_self.detail[7]){
  111. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[7].name+':</span>&nbsp;&nbsp;'+_self.detail[7].value+'<br>';
  112. // }if(_self.detail[8]){
  113. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[8].name+':</span>&nbsp;&nbsp;'+_self.detail[8].value+'<br>';
  114. // }if(_self.detail[9]){
  115. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[9].name+':</span>&nbsp;&nbsp;'+_self.detail[9].value+'<br>';
  116. // }if(_self.detail[10]){
  117. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[10].name+':</span>&nbsp;&nbsp;'+_self.detail[10].value+'<br>';
  118. // }if(_self.detail[11]){
  119. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[11].name+':</span>&nbsp;&nbsp;'+_self.detail[11].value+'<br>';
  120. // }if(_self.detail[12]){
  121. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[12].name+':</span>&nbsp;&nbsp;'+_self.detail[12].value+'<br>';
  122. // }if(_self.detail[13]){
  123. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[13].name+':</span>&nbsp;&nbsp;'+_self.detail[13].value+'<br>';
  124. // }if(_self.detail[14]){
  125. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[14].name+':</span>&nbsp;&nbsp;'+_self.detail[14].value+'<br>';
  126. // }if(_self.detail[15]){
  127. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[15].name+':</span>&nbsp;&nbsp;'+_self.detail[15].value+'<br>';
  128. // }if(_self.detail[16]){
  129. // templateStr += '<span style="color: #2C9EFF;">'+_self.detail[16].name+':</span>&nbsp;&nbsp;'+_self.detail[16].value+'<br>';
  130. // }
  131. templateStr += '</div><div style="display: flex;flex-direction: row;">';
  132. if(_self.showRealTimeData){
  133. templateStr = templateStr + '<div style="width:70px;cursor:pointer;color: #001fff;padding-right: 10px;">'+
  134. '<span id="timeInfoId" @click="queryRealTimeData()" style="border-bottom: 1px solid blue;">实时信息</span></div><br>'+
  135. '</div>'+
  136. '</div>';
  137. }else{
  138. templateStr = templateStr + '</div>'+
  139. '</div>';
  140. }
  141. return templateStr;
  142. // var myComponent = Vue.extend({
  143. // template:templateStr,
  144. // methods:{
  145. // //popup 实时数据
  146. // queryRealTimeData:function(){
  147. // _self.viewObject.popup.close();
  148. // _self.timeDataQuery();
  149. // },
  150. // }
  151. // });
  152. // var component = new myComponent().$mount();
  153. // return component.$el;
  154. // document.getElementById('edituser').appendChild(component.$el);
  155. },
  156. //空间查询 统计数字
  157. spatialQuery_webService:function(){
  158. var _self = this;
  159. var ol = _self.$ol;
  160. _self.loadingAll = true;
  161. _self.viewObject = _self.viewObj;
  162. _self.mapObject = _self.mapObj;
  163. document.getElementById("mapNode").style.cursor = "default";
  164. var coordinate = [_self.mapPointObj[0],_self.mapPointObj[1]]
  165. // var pt = new ol.geom.Point(ol.proj.transform(coordinate, "EPSG:4326", "EPSG:3857"));
  166. var circle = new ol.geom.Circle(coordinate,_self.bufferDistance*1000)
  167. var extent = circle.getExtent();
  168. var ptMin = ol.proj.transform([extent[0],extent[1]], "EPSG:3857","EPSG:4326" )
  169. var ptMax = ol.proj.transform([extent[2],extent[3]], "EPSG:3857", "EPSG:4326")
  170. var xmin = ptMin[0];
  171. var xmax = ptMax[0];
  172. var ymin = ptMin[1];
  173. var ymax = ptMax[1];
  174. var obj = {};
  175. obj.x = xmin;
  176. obj.y = ymin;
  177. var obj1 = {};
  178. obj1.x = xmin;
  179. obj1.y = ymax;
  180. var obj2 = {};
  181. obj2.x = xmax;
  182. obj2.y = ymax;
  183. var obj3 = {};
  184. obj3.x = xmax;
  185. obj3.y = ymin;
  186. var pointsArr1 = [obj,obj1,obj2,obj3];
  187. removeLayerById(_self,'ls_chaXunGraphicLayer');
  188. var style = new ol.style.Style({
  189. stroke: new ol.style.Stroke({
  190. color: '#ffcc33',
  191. width: 2
  192. }),
  193. })
  194. var feature = new ol.Feature({
  195. geometry:circle
  196. });
  197. feature.setStyle(style);
  198. var vectorSource = new ol.source.Vector({
  199. features: [feature]
  200. });
  201. var vectorLayer = new ol.layer.Vector({
  202. source: vectorSource,
  203. id:'ls_chaXunGraphicLayer'
  204. });
  205. _self.mapObject.addLayer(vectorLayer)
  206. _self.mapObject.getView().fit(feature.getGeometry().getExtent())
  207. _self.pointsArrStr = JSON.stringify(pointsArr1);
  208. var arr = ["P102","P201","P202","P203"];
  209. _self.middleTypeListStr = JSON.stringify(_self.layerList);
  210. _self.mapBounds = xmin+","+ymin+","+xmax+","+ymax;
  211. _self.scale = _self.mapObject.getView().getZoom() - 3;
  212. // _self.scale = 9;
  213. var params = {
  214. 'pointsArray':_self.pointsArrStr,
  215. 'pageIndex':'1',
  216. 'pageSize':'30',
  217. 'middleTypeList':_self.middleTypeListStr,
  218. 'mapBounds':_self.mapBounds,
  219. 'scale':_self.scale,
  220. "timeStamp":"2018-08-03 10:38:01",
  221. "spatialQueryType":"1",
  222. "fitchResultType":"2",
  223. };
  224. request({
  225. url:"/webService/spaceDot",
  226. method:'get',
  227. responseType:'json',
  228. params:params
  229. }).then((response)=>{
  230. console.log("空间查询获取统计数字");
  231. _self.loadingAll = false;
  232. var data = response.data;
  233. if(data.totalCount > 0){
  234. _self.result1_1 = data.statisticDetailList;
  235. _self.result1_2 = data.statisticHeaderList;
  236. _self.activeName = _self.result1_2[1].showValue;
  237. _self.staticNumCLick(_self.result1_1[0][1]);
  238. }
  239. },(err)=>{
  240. });
  241. },
  242. tabClickHandler:function(params){
  243. var _self = this;
  244. var str = params.label;
  245. for(var i=0;i<_self.result1_2.length;i++){
  246. if(str == _self.result1_2[i].showValue){
  247. for(var j=0;j<_self.result1_1[0].length;j++){
  248. if(_self.result1_1[0][j].code == _self.result1_2[i].code){
  249. _self.staticNumCLick(_self.result1_1[0][j]);
  250. }
  251. }
  252. }
  253. }
  254. },
  255. //查询数据列表
  256. staticNumCLick:function(item){
  257. var _self = this;
  258. this.myloading =true;
  259. this.currentItem = item;//分页查询 保存item
  260. _self.showTableList = true;
  261. var params_list = {
  262. "timeStamp": "2018-08-09 11:10:20",
  263. "pageIndex": _self.pageIndex,
  264. "mapBounds": _self.mapBounds,
  265. "queryStatisticData": {
  266. "areaType": "1",
  267. "areaCode": item.areaCode,
  268. "queryType": item.queryType,
  269. "middleType": item.code,
  270. "areaLevel": "1"
  271. },
  272. "spatialQueryType": "1",
  273. "pointsArray": _self.pointsArrStr,
  274. "pageSize": 10,
  275. "queryShowItemsOnly": "1",
  276. "scale": _self.scale,
  277. "queryType": "2"
  278. };
  279. request({
  280. url:"/webService/statistics",
  281. method:'get',
  282. responseType:'json',
  283. params:params_list
  284. }).then((response)=>{
  285. console.log("查询数据列表");
  286. var data = response.data;
  287. _self.total = Number(data.totalCount);
  288. _self.resultList2 = data.resultDetailList;
  289. _self.resultHeader2 = data.resultHeaderList;
  290. this.myloading =false;
  291. // _self.refreshCurrentShow();
  292. },(err)=>{
  293. });
  294. },
  295. tableRowClickHandler:function(row, event, column){
  296. var _self = this;
  297. var ol = _self.$ol;
  298. console.log("tableClick");
  299. var arr1 = [row.MIDDLE_TYPE];
  300. var arr1Str = JSON.stringify(arr1);
  301. var params2 = {
  302. "middleTypeList":arr1Str,
  303. "objectCode": row.OBJ_CODE,
  304. "timeStamp": "2018-08-09 11:15:35",
  305. "pageIndex": 0,
  306. "pageSize": 30,
  307. };
  308. request({
  309. url:"/webService/detailedInfo",
  310. method:'get',
  311. responseType:'json',
  312. params:params2
  313. }).then((response)=>{
  314. console.log("获取对象详细信息");
  315. if(response.data.surveyData){
  316. var data = response.data.surveyData;
  317. _self.detail = data[0].resultInfoDetailList;
  318. _self.showRealTimeData = false;
  319. for(var i=0;i<data.length;i++){
  320. if(data[i].label == "实时信息"){
  321. _self.showRealTimeData = true;
  322. _self.stcd = data[i].resultInfoDetailList[0].STCD;
  323. _self.sttp = data[i].resultInfoDetailList[0].STTP;
  324. _self.stnm = data[i].resultInfoDetailList[0].STNM;
  325. }
  326. }
  327. var coordinate = [Number(row.CENTER_X),Number(row.CENTER_Y)];
  328. if(document.getElementById('popupbj')){
  329. document.getElementById('popupbj').style.display = 'block'
  330. }
  331. var container = document.getElementById('popupbj');
  332. if(!container){
  333. return;
  334. }
  335. var content = document.getElementById('popup-contentbj');
  336. var closer = document.getElementById('popup-closerbj');
  337. closer.onclick = function() {
  338. overlay.setPosition(undefined);
  339. closer.blur();
  340. return false;
  341. };
  342. var overlay = new ol.Overlay({
  343. id:'bjOverlayId',
  344. element: container,
  345. autoPan: true,
  346. autoPanAnimation: {
  347. duration: 250
  348. }
  349. });
  350. var strHtml = _self.initHtml();
  351. if(strHtml && coordinate){
  352. content.innerHTML = strHtml;
  353. overlay.setPosition(ol.proj.transform(coordinate, "EPSG:4326", "EPSG:3857"));
  354. _self.mapObject.addOverlay(overlay);
  355. _self.mapObject.setView(
  356. new ol.View({
  357. center:ol.proj.transform(coordinate, "EPSG:4326", "EPSG:3857"),
  358. zoom:12
  359. })
  360. )
  361. }
  362. if(document.getElementById("timeInfoId")){
  363. document.getElementById("timeInfoId").onclick = function(){
  364. // _self.viewObject.popup.close();
  365. _self.timeDataQuery();
  366. }
  367. }
  368. }else{
  369. Notification(
  370. {
  371. title: '定位失败',
  372. message: '暂无详细信息'
  373. }
  374. );
  375. }
  376. },(err)=>{
  377. });
  378. },
  379. timeDataQuery:function(){
  380. var _self = this;
  381. var params1 = {
  382. 'pageIndex':'1',
  383. 'pageSize':'30',
  384. "tms":"",
  385. "tme":"",
  386. "stnm":_self.stnm,
  387. "sttp":_self.sttp,
  388. "stcd":_self.stcd,
  389. };
  390. request({
  391. url:"/webService/actualData",
  392. method:'get',
  393. responseType:'json',
  394. params:params1
  395. }).then((response)=>{
  396. console.log("实时数据查询");
  397. var data = response.data;
  398. var header = data.resultHeaderList;
  399. var resultList = data.resultList;
  400. if(resultList.length == 0){
  401. Notification(
  402. {
  403. title: '实时数据为空',
  404. message: '当前时段暂无实时数据'
  405. }
  406. );
  407. }else{
  408. var result = resultList[resultList.length-1];
  409. var tempHeaderArr = [];
  410. for(var i=0;i<header.length;i++){
  411. var tmp = header[i].code;
  412. if(result.hasOwnProperty(tmp)){
  413. tempHeaderArr.push(header[i]);
  414. }
  415. }
  416. _self.$emit('emit_searchOneMapTimeData',tempHeaderArr,resultList);
  417. }
  418. },(err)=>{
  419. });
  420. },
  421. handleCurrentChange(val) {
  422. console.log(`当前页: ${val}`);
  423. this.staticNumCLick(this.currentItem);
  424. // this.refreshCurrentShow();
  425. },
  426. refreshCurrentShow:function(){
  427. this.myloading =false;
  428. var begin = (this.pageIndex-1) * this.pageSize;
  429. var end = begin+this.pageSize;
  430. this.currentShowList = this.resultList2.slice(begin,end);
  431. },
  432. closeDraggable:function(){
  433. removeLayerById(this,'ls_chaXunGraphicLayer');
  434. this.$emit("closeDraggable","searchOneMap");
  435. },
  436. }
  437. }
  438. </script>
  439. <style>
  440. .searchOneMapClass{
  441. position: fixed;
  442. right: 15px;
  443. top: 119px;
  444. width: 322px;
  445. max-height: 490px;
  446. z-index: 5;
  447. }
  448. #searchOneMapContainer .el-table{
  449. color:#928f8f;
  450. }
  451. #searchOneMapContainer .el-table thead{
  452. color: #a29a9a;
  453. }
  454. #searchOneMapContainer .el-table tr{
  455. background-color: #f9f9f9;
  456. }
  457. #searchOneMapContainer .el-table__body-wrapper{
  458. overflow-x: hidden;
  459. /* max-height: 336px; */
  460. }
  461. #searchOneMapContainer .slotClass{
  462. min-height: 67px;
  463. background-color: white;
  464. }
  465. #searchOneMapContainer .el-tabs__item{
  466. padding: 0 10px;
  467. }
  468. #searchOneMapContainer .el-tabs--left .el-tabs__header{
  469. margin-right:0px;
  470. }
  471. #searchOneMapContainer .el-tabs--border-card>.el-tabs__content{
  472. padding: 5px;
  473. }
  474. </style>