e7e4db72d8f94985fcb70f72cdf514472ce10f1b.svn-base 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. <template>
  2. <div id="ddmbContainer" style="height: 100%;width: 100%;background-color: white;">
  3. <div style="height:60px;width:100%;">
  4. <el-breadcrumb separator-class="el-icon-arrow-right" style="padding-top: 30px;margin-left:10px;">
  5. <el-breadcrumb-item>2019年第一次督查</el-breadcrumb-item>
  6. <el-breadcrumb-item>
  7. <template>
  8. <el-select v-model="value" placeholder="长江水利委员会">
  9. <el-option
  10. v-for="item in options"
  11. :key="item.value"
  12. :label="item.label"
  13. :value="item.value">
  14. </el-option>
  15. </el-select>
  16. </template>
  17. </el-breadcrumb-item>
  18. <el-breadcrumb-item>
  19. <template>
  20. <el-select v-model="value" placeholder="北京">
  21. <el-option
  22. v-for="item in options2"
  23. :key="item.value"
  24. :label="item.label"
  25. :value="item.value">
  26. </el-option>
  27. </el-select>
  28. </template>
  29. </el-breadcrumb-item>
  30. <el-breadcrumb-item>目标设置</el-breadcrumb-item>
  31. </el-breadcrumb>
  32. </div>
  33. <div style="width:100%;display: flex;" :style="{'height':tableHeight+'px'}">
  34. <div style="height:100%;width:25%;border: 1px solid #d5d5d5;">
  35. <div style="width:100%;height:30px;background-color:#ededed;display: flex;align-items: center;">
  36. <p style="font-size: 14px;padding-left: 30px;font-weight: bolder;">小水库</p>
  37. </div>
  38. <div style="height: 100%;display: flex;flex-direction:column">
  39. <div style="height:91%;overflow-y:auto;">
  40. <div v-for="item in arrList" :key="item.id" style="padding:4px;">
  41. <el-checkbox @change="checkBoxChange(item)" v-model="item.checked"></el-checkbox>
  42. <span style="color: #0069d5;">{{item.engName}}</span>
  43. <span style="float:right;padding-right: 20px;color:#bebaba">{{item.resLoc}}</span>
  44. </div>
  45. </div>
  46. <div style="display: flex;justify-content:space-around;">
  47. <el-pagination
  48. class="paginationCenterTabs"
  49. style="text-align: center; width:50%;"
  50. @current-change="search"
  51. :current-page.sync="pageIndex"
  52. layout="prev, pager, next"
  53. :page-size="20"
  54. :total="total"
  55. :pager-count="7"
  56. small
  57. >
  58. </el-pagination>
  59. <p>已选{{checkedLength}}/{{total}}个,占比{{Number(checkedLength/total).toFixed(2)*100}}%</p>
  60. <!-- <p></p> -->
  61. </div>
  62. </div>
  63. </div>
  64. <div style="width:75%;margin-left: 10px;border: 1px solid #d5d5d5;" :style="{'height':tableHeight+'px'}">
  65. <div style="width:100%;height:30px;background-color:#ededed;display: flex;align-items: center;">
  66. <p style="font-size: 14px;padding-left: 30px;font-weight: bolder;">地图分布</p>
  67. </div>
  68. <div id="mapContainer" style="height:100%;width:100%;" :style="{'height':mapHeight+'px'}"></div>
  69. </div>
  70. </div>
  71. </div>
  72. </template>
  73. <script>
  74. const options = {
  75. url: "/arcgisApi/4.7/init.js"
  76. };
  77. import Vue from 'vue'
  78. import * as esriLoader from 'esri-loader'
  79. import {layerOptions,baseLayerOption} from '../lyrConfig/lyrConfig.js'
  80. import {getSkResult} from '../../api/getSKResult.js'
  81. export default {
  82. components:{
  83. },
  84. props:[],
  85. computed:{
  86. },
  87. data () {
  88. return {
  89. loading:true,
  90. initOptions:null,//各图层option
  91. mapObject:null,
  92. viewObject:null,
  93. tableHeight:0,
  94. mapHeight:0,
  95. checkList:[],
  96. checkedLength:0,
  97. currentAdCode:'000000000000',
  98. arrList:[],
  99. options: [{
  100. value: '选项1',
  101. label: '长江水利委员会'
  102. }, {
  103. value: '选项2',
  104. label: '黄河水利委员会'
  105. }],
  106. options2: [{
  107. value: '选项1',
  108. label: '北京'
  109. }, {
  110. value: '选项2',
  111. label: '天津'
  112. }],
  113. value: '',
  114. pageIndex:1,
  115. pageSize:20,
  116. total:0
  117. }
  118. },
  119. watch:{
  120. checkList(){
  121. console.log(this.checkList);
  122. }
  123. },
  124. mounted:function(){
  125. this.initOptions = layerOptions;
  126. let stepIndexMainContainer = document.getElementById('stepIndexMainContainer');
  127. let simcHeight = 0;
  128. if(stepIndexMainContainer){
  129. simcHeight = stepIndexMainContainer.offsetHeight;
  130. this.tableHeight = simcHeight - 120;
  131. this.mapHeight = simcHeight - 150;
  132. }else{
  133. this.tableHeight = window.parent.innerHeight - 160;
  134. this.mapHeight = this.tableHeight - 30;
  135. }
  136. // this.currentAdCode = localStorage.getItem("adCode")? localStorage.getItem("adCode"): "110000000000";
  137. this.currentAdCode = "110000000000";
  138. this.getUserInfo();
  139. // this.getSkList();
  140. },
  141. methods:{
  142. getUserInfo: function() {
  143. var _self = this;
  144. esriLoader.loadModules(["esri/tasks/QueryTask","esri/tasks/support/Query","esri/geometry/Polygon",
  145. "dojo/domReady!"],options).then(([QueryTask, Query, Polygon]) => {
  146. //获取当前用户所属行政区 定位
  147. // var adCode = localStorage.getItem("adCode")? localStorage.getItem("adCode"): "110000000000";
  148. var adCode = _self.currentAdCode;
  149. var url = "";
  150. if (adCode.substring(2, 12) == "0000000000") {
  151. //省级
  152. url = 'http://106.15.207.106:6080/arcgis/rest/services/xzqh/MapServer/0';
  153. }
  154. if(url){
  155. var queryTask = new QueryTask({
  156. url: url
  157. });
  158. var query = new Query({
  159. outFields: ["NAME"],
  160. where: "XZQDM ='" + adCode.substring(0, 6) + "'",
  161. returnGeometry: true
  162. });
  163. queryTask.execute(query).then(function(result) {
  164. _self.initMap(result.features);
  165. });
  166. }else{
  167. _self.initMap('000000000000');
  168. }
  169. }).catch(err => {
  170. // handle any script or module loading errors
  171. console.error(err);
  172. });
  173. },
  174. initMap:function(item){
  175. var _self = this;
  176. esriLoader.loadModules(["esri/Map","esri/views/MapView","esri/geometry/SpatialReference",
  177. "esri/geometry/Extent","esri/layers/MapImageLayer","esri/Basemap","esri/layers/tdtLayer",
  178. "esri/layers/waterRSLayer","esri/layers/TimeImageLayer","esri/layers/superMapLayer",
  179. "esri/geometry/Point","esri/config","dojo/domReady!"],options).then( (
  180. [Map,MapView,SpatialReference,Extent,MapImageLayer,Basemap,tdtLayer,waterRSLayer,TimeImageLayer,
  181. superMapLayer,Point,esriConfig,]) => {
  182. //初始化layers
  183. var tianditu_shiliang = new tdtLayer(_self.initOptions.options_shiliang);
  184. var supermap_yingxiangzhuji = new superMapLayer(_self.initOptions.options_supermap_yingxiangzhuji);
  185. var supermap_river_r = new superMapLayer(_self.initOptions.options_river_r);
  186. _self.mapObject = new Map({});
  187. _self.mapObject.add(tianditu_shiliang);
  188. _self.mapObject.add(supermap_yingxiangzhuji);
  189. _self.mapObject.add(supermap_river_r);
  190. _self.viewObject = new MapView({
  191. container: "mapContainer",
  192. map: _self.mapObject,
  193. viewingMode: "global",
  194. constraints:{
  195. rotationEnabled: false
  196. }
  197. });
  198. _self.viewObject.ui.move([ "zoom" ], "top-left");
  199. _self.viewObject.when(function(){
  200. var ext;
  201. if(item == '000000000000'){
  202. ext = new Extent({
  203. xmax: 152.9078025022252,
  204. xmin: 58.319302894812985,
  205. ymax: 64.05621182715913,
  206. ymin: 3.959518588217229,
  207. spatialReference: new SpatialReference({
  208. wkid: 4326
  209. })
  210. });
  211. }else{
  212. ext = item[0].geometry.extent;
  213. }
  214. _self.viewObject.extent = ext;
  215. _self.loading = false;
  216. _self.getSkList();
  217. },function(error){
  218. console.log("The view's resources failed to load: ", error);
  219. });
  220. _self.viewObject.on("click",_self.viewClickHandler);
  221. }).catch(err => {
  222. // handle any script or module loading errors
  223. console.error(err);
  224. });
  225. },
  226. //鼠标点击弹出单站信息
  227. viewClickHandler: function (event) {
  228. var _self = this;
  229. console.log(event.mapPoint.x, event.mapPoint.y);
  230. _self.viewObject.popup.close();
  231. if (event.button == 2) {} //右键
  232. else if (event.button == 1) {} //middle click
  233. else {
  234. //左键
  235. var screenPoint = {
  236. x: event.x,
  237. y: event.y
  238. };
  239. var mapPoint = _self.viewObject.toMap(screenPoint);
  240. _self.viewObject.hitTest(screenPoint).then(function (response) {
  241. var result = response.results;
  242. if(result){
  243. if(result[0].graphic.layer.id == "skGraphicLayer" || result[0].graphic.layer.id == "skGraphicLayer_checked"){
  244. var att = result[0].graphic.attributes;
  245. att.checked = !att.checked;
  246. _self.checkBoxChange(att);
  247. }
  248. }
  249. });
  250. }
  251. },
  252. getSkList(){
  253. var _self = this;
  254. esriLoader.loadModules(["esri/Graphic","esri/geometry/SpatialReference",
  255. "esri/layers/GraphicsLayer","esri/geometry/Point","dojo/domReady!"],options).then( (
  256. [Graphic,SpatialReference,GraphicsLayer,Point]) => {
  257. var skGraphicLayer;
  258. skGraphicLayer = _self.mapObject.findLayerById("skGraphicLayer");
  259. if(skGraphicLayer){
  260. skGraphicLayer.removeAll();
  261. }else{
  262. skGraphicLayer = new GraphicsLayer({id:"skGraphicLayer"});
  263. _self.mapObject.add(skGraphicLayer);
  264. }
  265. var gra,pt;
  266. var symbol = {
  267. type: "picture-marker", // autocasts as new PictureMarkerSymbol()
  268. url: "/src/assets/img/sk.png",
  269. width: "16px",
  270. height: "16px"
  271. };
  272. getSkResult(_self.currentAdCode,_self.pageIndex,20).then((response) => {
  273. var res = response.data;
  274. _self.total = res.total;
  275. var result = res.list;
  276. result.forEach(resultItem =>{
  277. resultItem['checked'] = false;
  278. });
  279. _self.arrList = result;
  280. });
  281. getSkResult(_self.currentAdCode,_self.pageIndex,10000).then((response) => {
  282. var result = response.data.list;
  283. for(var i=0;i<result.length;i++){
  284. if(result[i].cenLong && result[i].cenLat){
  285. pt = new Point(Number(result[i].cenLong),Number(result[i].cenLat),new SpatialReference({wkid:4326}));
  286. gra = new Graphic({
  287. geometry:pt,
  288. symbol:symbol,
  289. attributes:result[i]
  290. });
  291. skGraphicLayer.add(gra);
  292. }
  293. }
  294. });
  295. }).catch(err => {
  296. console.error(err);
  297. });
  298. },
  299. search(){
  300. var _self = this;
  301. getSkResult(_self.currentAdCode,_self.pageIndex,20).then((response) => {
  302. var res = response.data;
  303. var result = res.list;
  304. result.forEach(resultItem =>{
  305. resultItem['checked'] = false;
  306. });
  307. _self.arrList = result;
  308. });
  309. },
  310. checkBoxChange(item){
  311. console.log(item);
  312. var _self = this;
  313. esriLoader.loadModules(["esri/Graphic","esri/geometry/SpatialReference",
  314. "esri/layers/GraphicsLayer","esri/geometry/Point","dojo/domReady!"],options).then( (
  315. [Graphic,SpatialReference,GraphicsLayer,Point]) => {
  316. var skGraphicLayer_checked;
  317. let graArr = [];
  318. skGraphicLayer_checked = _self.mapObject.findLayerById("skGraphicLayer_checked");
  319. if(skGraphicLayer_checked){
  320. graArr = skGraphicLayer_checked.graphics.items;
  321. }else{
  322. skGraphicLayer_checked = new GraphicsLayer({id:"skGraphicLayer_checked"});
  323. _self.mapObject.add(skGraphicLayer_checked);
  324. }
  325. var gra,gra1,pt;
  326. var symbol = {
  327. type: "picture-marker", // autocasts as new PictureMarkerSymbol()
  328. url: "/src/assets/img/sk_checked.png",
  329. width: "20px",
  330. height: "20px"
  331. };
  332. if(graArr.length ==0){
  333. _self.checkedLength++;
  334. if(item.cenLong && item.cenLat){
  335. pt = new Point(Number(item.cenLong),Number(item.cenLat),new SpatialReference({wkid:4326}));
  336. gra = new Graphic({
  337. geometry:pt,
  338. symbol:symbol,
  339. attributes:item
  340. });
  341. skGraphicLayer_checked.add(gra);
  342. }
  343. }else{
  344. if(item.checked == true){
  345. _self.checkedLength++;
  346. if(item.cenLong && item.cenLat){
  347. pt = new Point(Number(item.cenLong),Number(item.cenLat),new SpatialReference({wkid:4326}));
  348. gra1 = new Graphic({
  349. geometry:pt,
  350. symbol:symbol,
  351. attributes:item
  352. });
  353. skGraphicLayer_checked.add(gra1);
  354. }
  355. }else{
  356. _self.checkedLength--;
  357. for(var i=0;i<graArr.length;i++){
  358. if(item.engGuid == graArr[i].attributes.engGuid){
  359. skGraphicLayer_checked.remove(graArr[i]);
  360. }
  361. }
  362. }
  363. }
  364. // _self.checkedLength = skGraphicLayer_checked.graphics.length;
  365. }).catch(err => {
  366. console.error(err);
  367. });
  368. },
  369. nextStepFunction:function(){
  370. //@wxcwater 留作内外交互用
  371. this.$emit('nextStep',{
  372. status:'ok',
  373. toStep:'next',
  374. })
  375. }
  376. },
  377. }
  378. </script>
  379. <style>
  380. /* @import url('/src/arcgisAPI/esri/css/main.css'); */
  381. .esri-ui .esri-attribution {
  382. display: none;
  383. }
  384. #ddmbContainer .el-checkbox-group{
  385. display: flex;
  386. flex-direction: column;
  387. }
  388. #ddmbContainer .el-checkbox{
  389. margin-left: 30px;
  390. }
  391. #ddmbContainer .el-input--medium .el-input__inner{
  392. height: 25px;
  393. }
  394. #ddmbContainer .el-select{
  395. height: 30px;
  396. width: 135px;
  397. margin-top: -6px;
  398. }
  399. #ddmbContainer .el-input__inner{
  400. font-size: 14px;
  401. }
  402. </style>