1a83723d14de573b9280be948474ef0f3e37dee3.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  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" :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 draagable from '../../../widgets/draggable.vue'
  46. import { Notification } from 'element-ui' //引入elementui中的notificaton组件,提示结果
  47. export default {
  48. props:["result",'viewObj','mapObj','mapPointObj','layerList','bufferDistance'],
  49. components:{
  50. draagable,
  51. },
  52. data(){
  53. return{
  54. activeName: '',
  55. viewObject:null,
  56. mapObject:null,
  57. pointsArrStr:null,
  58. middleTypeListStr:null,
  59. mapBounds:null,
  60. scale:null,
  61. draagableTitle:"一张图信息查询",
  62. result1_1:[],//第一个接口 list
  63. result1_2:[],//第一个接口 header
  64. resultList2:[],//第二个接口请求 列表
  65. resultHeader2:[],//第二个接口请求 header
  66. currentShowList:[],
  67. showTableList:false,
  68. // bufferDistance:10,
  69. detail:[],//详细信息
  70. showRealTimeData:false,
  71. stcd:'',
  72. sttp:'',
  73. stnm:'',
  74. sTime:'',//开始时间
  75. eTime:'',//结束时间
  76. pageIndex:1,
  77. pageSize:10,
  78. pagerCount:5,
  79. total:0,
  80. myloading:true,
  81. loadingAll:true,
  82. currentItem:null,
  83. }
  84. },
  85. watch:{
  86. mapPointObj:function(newValue){
  87. this.spatialQuery_webService();
  88. }
  89. },
  90. mounted:function(){
  91. var date = new Date();
  92. this.sTime = dateFormat(date,"yyyy-MM-dd hh:mm:ss");
  93. var dateStr = new Date(date.getTime() - 15*24*60*60*1000);
  94. this.eTime = dateFormat(dateStr,"yyyy-MM-dd hh:mm:ss");
  95. this.spatialQuery_webService();
  96. },
  97. methods:{
  98. initHtml:function(){
  99. var _self = this;
  100. var templateStr = '';
  101. templateStr = templateStr + '<div id="edituser">'+
  102. '<div style="height: 137px;overflow-y: auto;">'+
  103. '<span style="font-weight:700">'+_self.detail[1].name+':</span>&nbsp;&nbsp;'+_self.detail[1].value+'<br>'+
  104. '<span style="font-weight:700">'+_self.detail[2].name+':</span>&nbsp;&nbsp;'+_self.detail[2].value+'<br>'+
  105. '<span style="font-weight:700">'+_self.detail[3].name+':</span>&nbsp;&nbsp;'+_self.detail[3].value+'<br>'+
  106. '<span style="font-weight:700">'+_self.detail[4].name+':</span>&nbsp;&nbsp;'+_self.detail[4].value+'<br>'+
  107. '<span style="font-weight:700">'+_self.detail[5].name+':</span>&nbsp;&nbsp;'+_self.detail[5].value+'<br>'+
  108. '<span style="font-weight:700">'+_self.detail[6].name+':</span>&nbsp;&nbsp;'+_self.detail[6].value+'<br>';
  109. if(_self.detail[7]){
  110. templateStr += '<span style="font-weight:700">'+_self.detail[7].name+':</span>&nbsp;&nbsp;'+_self.detail[7].value+'<br>';
  111. }if(_self.detail[8]){
  112. templateStr += '<span style="font-weight:700">'+_self.detail[8].name+':</span>&nbsp;&nbsp;'+_self.detail[8].value+'<br>';
  113. }if(_self.detail[9]){
  114. templateStr += '<span style="font-weight:700">'+_self.detail[9].name+':</span>&nbsp;&nbsp;'+_self.detail[9].value+'<br>';
  115. }if(_self.detail[10]){
  116. templateStr += '<span style="font-weight:700">'+_self.detail[10].name+':</span>&nbsp;&nbsp;'+_self.detail[10].value+'<br>';
  117. }if(_self.detail[11]){
  118. templateStr += '<span style="font-weight:700">'+_self.detail[11].name+':</span>&nbsp;&nbsp;'+_self.detail[11].value+'<br>';
  119. }if(_self.detail[12]){
  120. templateStr += '<span style="font-weight:700">'+_self.detail[12].name+':</span>&nbsp;&nbsp;'+_self.detail[12].value+'<br>';
  121. }if(_self.detail[13]){
  122. templateStr += '<span style="font-weight:700">'+_self.detail[13].name+':</span>&nbsp;&nbsp;'+_self.detail[13].value+'<br>';
  123. }if(_self.detail[14]){
  124. templateStr += '<span style="font-weight:700">'+_self.detail[14].name+':</span>&nbsp;&nbsp;'+_self.detail[14].value+'<br>';
  125. }if(_self.detail[15]){
  126. templateStr += '<span style="font-weight:700">'+_self.detail[15].name+':</span>&nbsp;&nbsp;'+_self.detail[15].value+'<br>';
  127. }if(_self.detail[16]){
  128. templateStr += '<span style="font-weight:700">'+_self.detail[16].name+':</span>&nbsp;&nbsp;'+_self.detail[16].value+'<br>';
  129. }
  130. templateStr += '</div><div style="display: flex;flex-direction: row;">';
  131. if(_self.showRealTimeData){
  132. templateStr = templateStr + '<div style="width:70px;cursor:pointer;color: #001fff;padding-right: 10px;">'+
  133. '<span @click="queryRealTimeData()" style="border-bottom: 1px solid blue;">实时信息</span></div><br>'+
  134. '</div>'+
  135. '</div>';
  136. }else{
  137. templateStr = templateStr + '</div>'+
  138. '</div>';
  139. }
  140. var myComponent = Vue.extend({
  141. template:templateStr,
  142. methods:{
  143. //popup 实时数据
  144. queryRealTimeData:function(){
  145. _self.viewObject.popup.close();
  146. _self.timeDataQuery();
  147. },
  148. }
  149. });
  150. var component = new myComponent().$mount();
  151. return component.$el;
  152. // document.getElementById('edituser').appendChild(component.$el);
  153. },
  154. //空间查询 统计数字
  155. spatialQuery_webService:function(){
  156. var _self = this;
  157. _self.loadingAll = true;
  158. _self.viewObject = _self.viewObj;
  159. _self.mapObject = _self.mapObj;
  160. esriLoader.loadModules(["esri/Graphic","esri/geometry/Point","esri/geometry/SpatialReference",
  161. "esri/geometry/geometryEngine","esri/layers/GraphicsLayer",],options).then(
  162. ([Graphic,Point,SpatialReference,geometryEngine,GraphicsLayer])=>{
  163. var ptBuffer = geometryEngine.geodesicBuffer(_self.mapPointObj,_self.bufferDistance,"kilometers");
  164. var xmin = _getLng(ptBuffer.extent.xmin);
  165. var xmax = _getLng(ptBuffer.extent.xmax);
  166. var ymin = _getLat(ptBuffer.extent.ymin);
  167. var ymax = _getLat(ptBuffer.extent.ymax);
  168. var pointsArr1 = [];
  169. for(var i=0;i<ptBuffer.rings[0].length;i++){
  170. if(i%5 == 0){
  171. var obj = {};
  172. obj.x = _getLng(ptBuffer.rings[0][i][0]);
  173. obj.y = _getLat(ptBuffer.rings[0][i][1]);
  174. obj.tag = null;
  175. pointsArr1.push(obj);
  176. }
  177. };
  178. var searchOneMapGraphicLayer = _self.mapObject.findLayerById("searchOneMapGraphicLayer");
  179. if(searchOneMapGraphicLayer){
  180. searchOneMapGraphicLayer.removeAll();
  181. }else{
  182. var searchOneMapGraphicLayer = new GraphicsLayer({id:"searchOneMapGraphicLayer"});
  183. _self.mapObject.add(searchOneMapGraphicLayer);
  184. }
  185. var symbolPolygon = {type: "simple-fill",color: [ 110,115,84, 0.1 ],outline: {
  186. color: "yellow",width: "2px"},style: "solid"};
  187. var gra = new Graphic({
  188. geometry:ptBuffer,
  189. symbol:symbolPolygon,
  190. attributes:null
  191. });
  192. searchOneMapGraphicLayer.add(gra);
  193. _self.viewObject.extent = searchOneMapGraphicLayer.graphics.items[0].geometry.extent;
  194. // var lod = _self.viewObject.zoom;
  195. // _self.viewObject.zoom = Number(lod - 1);
  196. // _self.viewObject.goTo({
  197. // target:gra
  198. // });
  199. // var xmin = mapPoint.x - 1;
  200. // var xmax = mapPoint.x + 1;
  201. // var ymin = mapPoint.y - 1;
  202. // var ymax = mapPoint.y + 1;
  203. // var pointsArr = [
  204. // {"x":xmin,"tag":null,"y":ymax},
  205. // {"x":xmax,"tag":null,"y":ymax},
  206. // {"x":xmax,"tag":null,"y":ymin},
  207. // {"x":xmin,"tag":null,"y":ymin},
  208. // ];
  209. _self.pointsArrStr = JSON.stringify(pointsArr1);
  210. var arr = ["P102","P201","P202","P203"];
  211. _self.middleTypeListStr = JSON.stringify(_self.layerList);
  212. _self.mapBounds = xmin+","+ymin+","+xmax+","+ymax;
  213. _self.scale = _self.viewObject.zoom;
  214. var params = {
  215. 'pointsArray':_self.pointsArrStr,
  216. 'pageIndex':'1',
  217. 'pageSize':'30',
  218. 'middleTypeList':_self.middleTypeListStr,
  219. 'mapBounds':_self.mapBounds,
  220. 'scale':_self.scale,
  221. "timeStamp":"2018-08-03 10:38:01",
  222. "spatialQueryType":"1",
  223. "fitchResultType":"2",
  224. };
  225. request({
  226. url:"/webService/spaceDot",
  227. method:'get',
  228. responseType:'json',
  229. params:params
  230. }).then((response)=>{
  231. console.log("空间查询获取统计数字");
  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.loadingAll = false;
  238. _self.staticNumCLick(_self.result1_1[0][1]);
  239. }else if(data.totalCount == 0){
  240. _self.loadingAll = false;
  241. }
  242. },(err)=>{
  243. });
  244. });
  245. },
  246. tabClickHandler:function(params){
  247. var _self = this;
  248. var str = params.label;
  249. for(var i=0;i<_self.result1_2.length;i++){
  250. if(str == _self.result1_2[i].showValue){
  251. for(var j=0;j<_self.result1_1[0].length;j++){
  252. if(_self.result1_1[0][j].code == _self.result1_2[i].code){
  253. _self.staticNumCLick(_self.result1_1[0][j]);
  254. }
  255. }
  256. }
  257. }
  258. },
  259. //查询数据列表
  260. staticNumCLick:function(item){
  261. var _self = this;
  262. this.myloading =true;
  263. this.currentItem = item;//分页查询 保存item
  264. _self.showTableList = true;
  265. var params_list = {
  266. "timeStamp": "2018-08-09 11:10:20",
  267. "pageIndex": _self.pageIndex,
  268. "mapBounds": _self.mapBounds,
  269. "queryStatisticData": {
  270. "areaType": "1",
  271. "areaCode": item.areaCode,
  272. "queryType": item.queryType,
  273. "middleType": item.code,
  274. "areaLevel": "1"
  275. },
  276. "spatialQueryType": "1",
  277. "pointsArray": _self.pointsArrStr,
  278. "pageSize": 10,
  279. "queryShowItemsOnly": "1",
  280. "scale": _self.scale,
  281. "queryType": "2"
  282. };
  283. request({
  284. url:"/webService/statistics",
  285. method:'get',
  286. responseType:'json',
  287. params:params_list
  288. }).then((response)=>{
  289. console.log("查询数据列表");
  290. var data = response.data;
  291. _self.total = Number(data.totalCount);
  292. _self.resultList2 = data.resultDetailList;
  293. _self.resultHeader2 = data.resultHeaderList;
  294. this.myloading =false;
  295. // _self.refreshCurrentShow();
  296. },(err)=>{
  297. });
  298. },
  299. tableRowClickHandler:function(row, event, column){
  300. var _self = this;
  301. console.log("tableClick");
  302. var arr1 = [row.MIDDLE_TYPE];
  303. var arr1Str = JSON.stringify(arr1);
  304. var params2 = {
  305. "middleTypeList":arr1Str,
  306. "objectCode": row.OBJ_CODE,
  307. "timeStamp": "2018-08-09 11:15:35",
  308. "pageIndex": 0,
  309. "pageSize": 30,
  310. };
  311. request({
  312. url:"/webService/detailedInfo",
  313. method:'get',
  314. responseType:'json',
  315. params:params2
  316. }).then((response)=>{
  317. console.log("获取对象详细信息");
  318. if(response.data.surveyData){
  319. var data = response.data.surveyData;
  320. _self.detail = data[0].resultInfoDetailList;
  321. _self.showRealTimeData = false;
  322. for(var i=0;i<data.length;i++){
  323. if(data[i].label == "实时信息"){
  324. _self.showRealTimeData = true;
  325. _self.stcd = data[i].resultInfoDetailList[0].STCD;
  326. _self.sttp = data[i].resultInfoDetailList[0].STTP;
  327. _self.stnm = data[i].resultInfoDetailList[0].STNM;
  328. }
  329. }
  330. esriLoader.loadModules(["esri/geometry/Point","esri/geometry/SpatialReference"],options).then(
  331. ([Point,SpatialReference])=>{
  332. var pt = new Point(row.CENTER_X,row.CENTER_Y,new SpatialReference(4326));
  333. _self.viewObject.goTo(pt);
  334. _self.viewObject.popup.open({
  335. title:_self.detail[0].value,
  336. content:_self.initHtml(),
  337. location:pt
  338. });
  339. });
  340. }else{
  341. Notification(
  342. {
  343. title: '定位失败',
  344. message: '暂无详细信息'
  345. }
  346. );
  347. }
  348. },(err)=>{
  349. });
  350. },
  351. timeDataQuery:function(){
  352. var _self = this;
  353. var params1 = {
  354. 'pageIndex':'1',
  355. 'pageSize':'30',
  356. "tms":"",
  357. "tme":"",
  358. "stnm":_self.stnm,
  359. "sttp":_self.sttp,
  360. "stcd":_self.stcd,
  361. };
  362. request({
  363. url:"/webService/actualData",
  364. method:'get',
  365. responseType:'json',
  366. params:params1
  367. }).then((response)=>{
  368. console.log("实时数据查询");
  369. var data = response.data;
  370. var header = data.resultHeaderList;
  371. var resultList = data.resultList;
  372. if(resultList.length == 0){
  373. Notification(
  374. {
  375. title: '实时数据为空',
  376. message: '当前时段暂无实时数据'
  377. }
  378. );
  379. }else{
  380. var result = resultList[resultList.length-1];
  381. var tempHeaderArr = [];
  382. for(var i=0;i<header.length;i++){
  383. var tmp = header[i].code;
  384. if(result.hasOwnProperty(tmp)){
  385. tempHeaderArr.push(header[i]);
  386. }
  387. }
  388. _self.$emit('emit_searchOneMapTimeData',tempHeaderArr,resultList);
  389. }
  390. },(err)=>{
  391. });
  392. },
  393. handleCurrentChange(val) {
  394. console.log(`当前页: ${val}`);
  395. this.staticNumCLick(this.currentItem);
  396. // this.refreshCurrentShow();
  397. },
  398. refreshCurrentShow:function(){
  399. this.myloading =false;
  400. var begin = (this.pageIndex-1) * this.pageSize;
  401. var end = begin+this.pageSize;
  402. this.currentShowList = this.resultList2.slice(begin,end);
  403. },
  404. closeDraggable:function(){
  405. if(this.mapObject){
  406. var lyr = this.mapObject.findLayerById("searchOneMapGraphicLayer");
  407. if(lyr){
  408. this.mapObject.remove(lyr);
  409. }
  410. this.viewObject.popup.close();
  411. }
  412. this.$emit("closeDraggable","searchOneMap");
  413. },
  414. }
  415. }
  416. </script>
  417. <style>
  418. .searchOneMapClass{
  419. position: fixed;
  420. right: 15px;
  421. top: 119px;
  422. width: 322px;
  423. max-height: 490px;
  424. z-index: 5;
  425. }
  426. #searchOneMapContainer .el-table{
  427. color:#928f8f;
  428. }
  429. #searchOneMapContainer .el-table thead{
  430. color: #a29a9a;
  431. }
  432. #searchOneMapContainer .el-table tr{
  433. background-color: #f9f9f9;
  434. }
  435. #searchOneMapContainer .el-table__body-wrapper{
  436. overflow-x: hidden;
  437. /* max-height: 336px; */
  438. }
  439. #searchOneMapContainer .slotClass{
  440. min-height: 67px;
  441. background-color: white;
  442. }
  443. #searchOneMapContainer .el-tabs__item{
  444. padding: 0 10px;
  445. }
  446. #searchOneMapContainer .el-tabs--left .el-tabs__header{
  447. margin-right:0px;
  448. }
  449. #searchOneMapContainer .el-tabs--border-card>.el-tabs__content{
  450. padding: 5px;
  451. }
  452. </style>