userDraw.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. /**
  2. * @fileoverview 用户 地点记录 模块
  3. * @author Song.Huang
  4. * @version 1.0.0
  5. */
  6. define([
  7. 'html!templates/user/userDraw',
  8. 'css!styles/user/userDraw',
  9. 'modDir/tools/toolDraw_new'],
  10. function(tplLayout) {
  11. /**
  12. * 模块数据 用于数据存储和外部调用
  13. * @type {Object}
  14. * 数据存放
  15. */
  16. var modValue = {
  17. options: {
  18. page: 1,
  19. pageSize: onemapUrlConfig.showCollectNum
  20. },
  21. favData: null,
  22. bflist: [],
  23. showAllBf: false
  24. }
  25. /**
  26. * 模块状态,用于存储模块的状态 例如:收起,关闭
  27. * @type {Object}
  28. */
  29. var status = {
  30. initialized: false,
  31. addAllBiaohui: false
  32. }
  33. //分页
  34. var pageContainer,
  35. favPageBtnGroup,
  36. pageJump;
  37. /**
  38. * 初始化
  39. * @type {Function}
  40. */
  41. function init() {
  42. setLayout();
  43. subscribe();
  44. showPage({
  45. page:1
  46. });
  47. bindEvent();
  48. }
  49. function bindEvent(){
  50. $("#toolsBar").unbind("click").bind("click",function(){
  51. // remove()
  52. })
  53. }
  54. function showAllBf(pagenum){
  55. var list = modValue.favData.list;
  56. $("#userCenterContentWrap .showAllBf").unbind("click").bind("click",function(){
  57. getFavData(pagenum);
  58. // if(status.addAllBiaohui == false){
  59. status.addAllBiaohui = true;
  60. for(var i=0;i<modValue.bfData.length;i++){
  61. if(!modValue.bflist[list[i]._id].zhanshi){
  62. ONEMAP.M.toolDraw.showDraw(modValue.bfData[i]);
  63. modValue.bflist[list[i]._id].zhanshi = true;
  64. }
  65. }
  66. // }
  67. })
  68. }
  69. function showAllBfC(){
  70. var list = modValue.favData.list;
  71. $("#userCenterContentWrap .showAllBf").unbind("click").bind("click",function(){
  72. // getFavData(pagenum);
  73. // if(status.addAllBiaohui == false){
  74. status.addAllBiaohui = true;
  75. for(var i=0;i<modValue.bfData.length;i++){
  76. if(!modValue.bflist[list[i]._id].zhanshi){
  77. ONEMAP.M.toolDraw.showDraw(modValue.bfData[i]);
  78. modValue.bflist[list[i]._id].zhanshi = true;
  79. }
  80. }
  81. // }
  82. })
  83. }
  84. /**
  85. * 设置界面
  86. */
  87. function setLayout(){
  88. $("#usrCenterContent").empty().append(tplLayout);
  89. pageContainer = $('<div id="userFavPage"></div>').appendTo($("#usrCenterContent"));
  90. var showAllBf = $('<p class="showAllBf">展示当前页标注</p>');
  91. $("#userCenterContentWrap .showAllBf").remove();
  92. showAllBf.appendTo($("#userCenterContentWrap"));
  93. $("#userFav").mCustomScrollbar({
  94. scrollInertia: 1000
  95. });
  96. layoutResize();
  97. $(window).resize(function() {
  98. layoutResize();
  99. });
  100. }
  101. /**
  102. * 界面重置
  103. * @return {[type]} [description]
  104. */
  105. function layoutResize(){
  106. $("#userFav").css({height:$(window).height()-154});
  107. $("#userFav").mCustomScrollbar("update");
  108. }
  109. /**
  110. * 显示指定参数的列表
  111. * @type {Function}
  112. * @param options {Object} 参数
  113. * @see options
  114. * @private
  115. */
  116. function showPage(options){
  117. ONEMAP.T.objExtend(modValue.options,options,true);
  118. getFavData(options.page);
  119. }
  120. /**
  121. * 获取收藏数据
  122. * @type {Function}
  123. * @private
  124. */
  125. function getFavData(zhidingpage) {
  126. var zdpage = zhidingpage||modValue.options.page;
  127. ONEMAP.V.loading.load();
  128. $.ajax({
  129. type: "get",
  130. dataType: 'json',
  131. url: onemapUrlConfig.userCenterUrl+ '/draw/list'+
  132. '?page=' + zdpage +
  133. '&size=' + modValue.options.pageSize,
  134. success: function(data) {
  135. //console.log(data);
  136. ONEMAP.V.loading.loaded();
  137. if(data.code == 4){
  138. ONEMAP.T.noPermission('addFav',data.message);
  139. return false;
  140. }
  141. if(data.code == 500){
  142. ONEMAP.T.noPermission('addFav',data.message);
  143. return false;
  144. }
  145. if(data.code == 3){
  146. ONEMAP.T.logout('addFav');
  147. return false;
  148. }
  149. modValue.favData = data;
  150. var list = modValue.favData.list;
  151. for(var i=0;i<list.length;i++){
  152. modValue.bflist[list[i]._id] = list[i];
  153. modValue.bflist[list[i]._id].zhanshi = false;
  154. }
  155. if(data.total>0){
  156. setTimeout(function(){
  157. setFavItem();
  158. },100)
  159. } else {
  160. $("#userFavList").html("暂无数据");
  161. }
  162. //显示当前页全部标注
  163. var bfData = data.list;
  164. modValue.bfData = data.list;
  165. showAllBfC();
  166. // showAllBf();
  167. },
  168. error:function(errorData){
  169. ONEMAP.V.loading.loaded();
  170. }
  171. });
  172. }
  173. /**
  174. * 下载地图上路线数据
  175. * 格式为geojson
  176. */
  177. function downDrawGeojson(geodata){
  178. var geojson = {
  179. "type": "FeatureCollection",
  180. "features": []
  181. };
  182. if(geodata.shape == "Line"){
  183. var pointLatLng = [];
  184. for(var i=0;i<geodata.LatLngs.length;i++){
  185. pointLatLng.push([geodata.LatLngs[i].lng,geodata.LatLngs[i].lat]);
  186. }
  187. geojson.features.push({
  188. "type": "Feature",
  189. "properties": {
  190. },
  191. "geometry": {
  192. "type": "LineString",
  193. "coordinates": pointLatLng
  194. }
  195. })
  196. }else if(geodata.shape == "Marker"){
  197. var pointLatLng = [geodata.LatLngs.lng,geodata.LatLngs.lat];
  198. geojson.features.push({
  199. "type": "Feature",
  200. "properties": {
  201. name:geodata.zhuji
  202. },
  203. "geometry": {
  204. "type": "Point",
  205. "coordinates": pointLatLng
  206. }
  207. })
  208. }else if(geodata.shape == "Poly" || geodata.shape == "Rectangle"){
  209. var pointLatLng = [];
  210. for(var i=0;i<geodata.LatLngs[0].length;i++){
  211. var latlng = geodata.LatLngs[0][i];
  212. pointLatLng.push([latlng.lng,latlng.lat]);
  213. }
  214. pointLatLng.push([geodata.LatLngs[0][0].lng,geodata.LatLngs[0][0].lat]);
  215. geojson.features.push({
  216. "type": "Feature",
  217. "properties": {
  218. },
  219. "geometry": {
  220. "type": "Polygon",
  221. "coordinates": [pointLatLng]
  222. }
  223. })
  224. }
  225. var eleLink = document.createElement('a');
  226. var filename = 'exportRout.geojson';
  227. eleLink.download = filename;
  228. var content = JSON.stringify(geojson);
  229. var blob = new Blob([content]);
  230. var href = URL.createObjectURL(blob);
  231. eleLink.href = href;
  232. $(eleLink)[0].click();
  233. }
  234. /**
  235. * 设置收藏列表item
  236. * @type {Function}
  237. * @private
  238. */
  239. function setFavItem(){
  240. var count = 0;
  241. $("#userFavList").empty();
  242. if(modValue.favData['list'].length > 0){
  243. for(var i= 0,l=modValue.favData['list'].length; i<l; i++){
  244. var da = modValue.favData['list'][i];
  245. count++;
  246. var itemHtml;
  247. // //console.log(da);
  248. var nming = da.name.split(";")[0];
  249. var dming = '';
  250. if(JSON.parse(da.draw_data).smlInfo){
  251. itemHtml = $('<dt fid="'+da._id+'" class="'+da._id+'"><span class="num">'+count+'</span><span class="name red" title="'+nming+'">'+nming +'<span style="color:red">*</span></span>'+
  252. '<span class="option"><a class="del" title="删除">删除</a><a class="edit" title="编辑">编辑</a></span></dt>');
  253. } else if(da.info!='newdraw' && da.info){
  254. itemHtml = $('<dt fid="'+da._id+'" class="'+da._id+'"><p class="num">'+count+'</p><p class="name" title="'+nming+'">'+nming +'<p class="dmsj">'+da.info.split(";")[1]+'</p></p>'+
  255. '<p class="option"><a class="del" title="删除">删除</a><a class="edit" title="编辑">编辑</a><a class="export" title="导出">导出</a></p></dt>');
  256. } else{
  257. itemHtml = $('<dt fid="'+da._id+'" class="'+da._id+'"><span class="num">'+count+'</span><span class="name" title="'+nming+'">'+nming +'</span>'+
  258. '<span class="option"><a class="del" title="删除">删除</a><a class="edit" title="编辑">编辑</a></span></dt>');
  259. }
  260. itemHtml.bind('mouseenter',function(){
  261. $(this).addClass('hover');
  262. }).bind('mouseleave',function(){
  263. $(this).removeClass('hover');
  264. });
  265. itemHtml.find('.export').bind('click',{da:da},function(e){
  266. var drawData = JSON.parse(e.data.da.draw_data);
  267. downDrawGeojson(drawData);
  268. })
  269. itemHtml.find('.name').bind('click',{da:da},function(e){
  270. if($(this).hasClass("red")){
  271. // var jbdData = JSON.parse(e.data.da.draw_data);
  272. // require(['jbDir/draw/js/jbDraw'], function(jbDraw) {
  273. // jbDraw.openSymbolData(jbdData);
  274. // });
  275. // ONEMAP.M.jbDraw.openSymbolData(jbdData);
  276. require(['modDir/tools/toolSPDraw'], function(toolSPDraw) {
  277. toolSPDraw.init(e.data.da._id);
  278. });
  279. }else if(e.data.da.info.indexOf('newdraw')>-1){
  280. if(!modValue.bflist[e.data.da._id].zhanshi){
  281. ONEMAP.M.toolDraw.showDraw(e.data.da);
  282. modValue.bflist[e.data.da._id].zhanshi = true;
  283. }
  284. } else{
  285. ONEMAP.M.toolDraw.showDrawRecord(e.data.da);
  286. }
  287. map23DControl.setView({
  288. center: {
  289. lat: e.data.da.center_lat,
  290. lng: e.data.da.center_lon
  291. },
  292. zoom: e.data.da.zoomleve
  293. })
  294. });
  295. itemHtml.find('.del').bind('click',{da:da},function(e){
  296. delForm(e.data.da,$(this));
  297. });
  298. itemHtml.find('.edit').bind('click',{da:da},function(e){
  299. editForm(e.data.da,$(this));
  300. });
  301. $("#userFavList").append(itemHtml);
  302. }
  303. //分页
  304. pageContainer.empty();
  305. var countPages = (parseInt(modValue.favData.total % modValue.favData.size)>0?parseInt(modValue.favData.total / modValue.favData.size + 1):parseInt(modValue.favData.total / modValue.favData.size));
  306. if(countPages==0){
  307. countPages = 1;
  308. }
  309. // pageJump = $('<div id="userFavPageJump" class="count"><span>第</span><input class="page_num input input-small" value="'+modValue.favData.current_page+'" type="text" /><span>/'+countPages+'页</span></div>');
  310. pageJump = $('<div id="userFavPageJump" class="count"><div class="firstpage"></div><div class="uppage"></div>'+
  311. '<div class="fg"></div><div id="thematicPageJump" class="count"><span>'+modValue.favData.current_page+'/'+countPages+'页</span>'+
  312. '</div><div class="fg"></div><div class="nextpage"></div><div class="endpage"></div><div class="btn-group"></div></div>');
  313. pageJump.appendTo(pageContainer);
  314. if (modValue.favData.size < modValue.favData.total) {
  315. $("#userFavPageJump .firstpage").bind('click',function(){
  316. showPage({page:1});
  317. //显示当前页全部标注
  318. var bfData = modValue.favData.list;
  319. modValue.bfData = bfData;
  320. // modValue.options.page = modValue.favData.current_page;
  321. showAllBf(1);
  322. setTimeout(function(){
  323. showPage({page:1});
  324. },200)
  325. })
  326. $("#userFavPageJump .uppage").bind('click',function(){
  327. var sanum = modValue.favData.current_page;
  328. if(modValue.favData.current_page == 1){
  329. // return false;
  330. showPage({page:1});
  331. }else{
  332. modValue.favData.current_page = modValue.favData.current_page-1;
  333. sanum-=1;
  334. showPage({page:modValue.favData.current_page});
  335. }
  336. //显示当前页全部标注
  337. var bfData = modValue.favData.list;
  338. modValue.bfData = bfData;
  339. // modValue.options.page = modValue.favData.current_page;
  340. showAllBf(sanum);
  341. setTimeout(function(){
  342. showPage({page:modValue.favData.current_page});
  343. },200)
  344. if(status.addAllBiaohui){
  345. ONEMAP.M.myLayerActions.clearLayer();
  346. ONEMAP.C.publisher.publish('', 'cleanMap');
  347. ONEMAP.C.publisher.publish({
  348. modName: 'cleanMap',
  349. }, 'tools:active');
  350. $("#cleanMap").click();
  351. }
  352. })
  353. $("#userFavPageJump .nextpage").bind('click',function(){
  354. var sanum = modValue.favData.current_page;
  355. if(modValue.favData.current_page == countPages){
  356. return false;
  357. }else{
  358. modValue.favData.current_page = modValue.favData.current_page+1;
  359. sanum+=1;
  360. showPage({page:modValue.favData.current_page});
  361. }
  362. // remove();
  363. //显示当前页全部标注
  364. var bfData = modValue.favData.list;
  365. modValue.bfData = bfData;
  366. // modValue.options.page = modValue.favData.current_page;
  367. showAllBf(sanum);
  368. setTimeout(function(){
  369. showPage({page:modValue.favData.current_page});
  370. },200)
  371. if(status.addAllBiaohui){
  372. ONEMAP.M.myLayerActions.clearLayer();
  373. ONEMAP.C.publisher.publish('', 'cleanMap');
  374. ONEMAP.C.publisher.publish({
  375. modName: 'cleanMap',
  376. }, 'tools:active');
  377. $("#cleanMap").click();
  378. }
  379. })
  380. $("#userFavPageJump .endpage").bind('click',function(){
  381. showPage({page:countPages});
  382. //显示当前页全部标注
  383. var bfData = modValue.favData.list;
  384. modValue.bfData = bfData;
  385. // modValue.options.page = modValue.favData.current_page;
  386. showAllBf(countPages);
  387. })
  388. }
  389. }else {
  390. pageContainer.empty();
  391. $("#userFavList").append('<p class="not-result">暂无数据!</p>');
  392. }
  393. $("#userFav").mCustomScrollbar("update");
  394. }
  395. /**
  396. * 显示标注信息
  397. * @param options
  398. * @private
  399. */
  400. function showDraw(drawData){
  401. //添加编辑器
  402. require(['modDir/tools/toolDraw'],function(toolDraw){
  403. toolDraw.init();
  404. setTimeout(function(){
  405. ONEMAP.M.toolDraw.showDrawRecord(drawData,true);
  406. },200);
  407. });
  408. }
  409. /**
  410. * 编辑表单
  411. * @type {Function}
  412. * @param data {Object} 表单数据
  413. * @param self {Object} 父类
  414. * @private
  415. */
  416. function editForm(data,self){
  417. var parent = self.parent().parent();
  418. if(data.name.indexOf(";")>-1){ data.name = data.name.split(";")[0] }
  419. var formHtml = $('<div class="form">' +
  420. '<input type="text" class="input input-small" maxlength="20" value="'+data.name+'" />' +
  421. '<button class="btn sure btn2 btn-small">确定</button>' +
  422. '<button class="btn cancel btn2 btn-small">取消</button>' +
  423. '</div> ');
  424. formHtml.find('.cancel').bind('click',function(){
  425. formHtml.remove();
  426. });
  427. parent.append(formHtml);
  428. formHtml.find('.sure').bind('click',{da:data,self:parent},function(e){
  429. updateFav(e);
  430. });
  431. }
  432. /**
  433. * 更新收藏
  434. * @type {Function}
  435. * @param e
  436. * @returns {boolean}
  437. * @private
  438. */
  439. function updateFav(e){
  440. var name = e.data.self.find('.input').val();
  441. if(name==''){
  442. ONEMAP.C.publisher.publish({ type: 'warning', message: '标注名称不能为空' }, 'noteBar::add');
  443. e.data.self.find('.input').focus();
  444. return false;
  445. }
  446. // if((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s]/g).test(name)){
  447. // ONEMAP.C.publisher.publish({ type: 'warning', message: '名称只能包含英文、数字、中文' }, 'noteBar::add');
  448. // e.data.self.find('.input').focus();
  449. // return false;
  450. // }
  451. e.data.self.find('.name').text(name);
  452. var fId = e.data.da._id;
  453. var ajaxData = {_id:fId,name:name};
  454. e.data.self.find('.form').remove();
  455. ONEMAP.V.loading.load();
  456. $.ajax({
  457. type:"get",
  458. dataType:'json',
  459. url:onemapUrlConfig.userCenterUrl+'/draw/update',
  460. data:ajaxData,
  461. success:function(data){
  462. ONEMAP.V.loading.loaded();
  463. if(data.code == 4){
  464. ONEMAP.T.noPermission('updateFav');
  465. }
  466. if(data.code == 3){
  467. ONEMAP.T.logout('updateFav');
  468. }
  469. if(data.success){
  470. ONEMAP.C.publisher.publish({type:'success',message:'更新标注('+name+')成功'},'noteBar::add');
  471. getFavData();
  472. }else if(data.hasOwnProperty('success') && !data.success) {
  473. ONEMAP.C.publisher.publish({type:'error',message:'更新标注('+name+')失败,'+data.msg},'noteBar::add');
  474. }else{
  475. ONEMAP.C.publisher.publish({type:'error',message:'更新标注('+name+')失败'},'noteBar::add');
  476. }
  477. },
  478. error:function(errorData){
  479. ONEMAP.V.loading.loaded();
  480. }
  481. });
  482. }
  483. /**
  484. * 删除表单
  485. * @param {[type]} data [description]
  486. * @param {[type]} self [description]
  487. * @return {[type]} [description]
  488. */
  489. function delForm(data,self){
  490. var parent = self.parent().parent();
  491. var formHtml = $('<div class="form">' +
  492. '<button class="btn cancel btn2 btn-small" style="float:right;margin-right:18px;">取消</button>' +
  493. '<button class="btn sure btn2 btn-small" style="float:right">确定</button>' +
  494. '</div> ');
  495. formHtml.find('.cancel').bind('click',function(){
  496. formHtml.remove();
  497. });
  498. parent.append(formHtml);
  499. formHtml.find('.sure').bind('click',{da:data,self:parent},function(e){
  500. delFav(e.data.da._id);
  501. $(".leaflet-marker-icon."+data._id).remove();
  502. // ONEMAP.M.toolDraw.delPoint(ONEMAP.D.transArr[data._id]);
  503. });
  504. }
  505. /**
  506. * 删除收藏
  507. * @type {Function}
  508. * @param id {Number}
  509. * @private
  510. */
  511. function delFav(id){
  512. var ajaxData = {_id:id};
  513. ONEMAP.V.loading.load();
  514. $.ajax({
  515. type:"get",
  516. dataType:'json',
  517. url:onemapUrlConfig.userCenterUrl+'/draw/del',
  518. data:ajaxData,
  519. success:function(data){
  520. ONEMAP.V.loading.loaded();
  521. if(data.code == 4){
  522. ONEMAP.T.noPermission('delFav');
  523. }
  524. if(data.code == 3){
  525. ONEMAP.T.logout('delFav');
  526. }
  527. if(data.success){
  528. ONEMAP.C.publisher.publish({type:'success',message:'删除标注成功'},'noteBar::add');
  529. getFavData();
  530. }else if(data.hasOwnProperty('success') && !data.success) {
  531. ONEMAP.C.publisher.publish({type:'error',message:'删除标注失败,'+data.msg},'noteBar::add');
  532. }else{
  533. ONEMAP.C.publisher.publish({type:'error',message:'删除标注失败'},'noteBar::add');
  534. }
  535. },
  536. error:function(errorData){
  537. ONEMAP.V.loading.loaded();
  538. }
  539. });
  540. }
  541. /**
  542. * 注册订阅
  543. * @type {Function}
  544. * 推送:ONEMAP.C.publisher.publish(options,'userFavuleName::type');
  545. * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange');
  546. */
  547. function subscribe(){
  548. ONEMAP.C.publisher.subscribe(remove,'cleanMap');
  549. }
  550. /**
  551. * 取消订阅
  552. * @type {Function}
  553. * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange');
  554. */
  555. function unSubscribe(){}
  556. /**
  557. * 模块移除
  558. * @return {[type]} [description]
  559. */
  560. function remove(){
  561. $(".pubPop").remove();
  562. // $("#userContent .userInfo .moreLink .linkList li.myBh").removeClass("active");
  563. var list = modValue.favData.list;
  564. for(var i=0;i<list.length;i++){
  565. modValue.bflist[list[i]._id] = list[i];
  566. modValue.bflist[list[i]._id].zhanshi = false;
  567. }
  568. status.initialized = false;
  569. status.addAllBiaohui = false;
  570. modValue.options ={
  571. page:1,
  572. pageSize:onemapUrlConfig.showCollectNum
  573. };
  574. var favData = map2DViewer.map._layers;
  575. $.each(favData,function(key,dl){
  576. if(dl.shape){
  577. map2DViewer.map.removeLayer(dl);
  578. }
  579. })
  580. // 清除二维标记点
  581. $(".leaflet-marker-pane").html("")
  582. }
  583. return ONEMAP.M.userDraw = {
  584. init: init,
  585. remove:remove,
  586. getFavData:getFavData,
  587. delFav:delFav
  588. }
  589. });