userRoute.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. /**
  2. * @fileoverview 用户 地点记录 模块
  3. * @author Song.Huang
  4. * @version 1.0.0
  5. */
  6. define([
  7. 'html!templates/user/userRoute',
  8. 'css!styles/user/userRoute'],
  9. function(tplLayout) {
  10. /**
  11. * 模块数据 用于数据存储和外部调用
  12. * @type {Object}
  13. * 数据存放
  14. */
  15. var modValue = {
  16. options: {
  17. page: 1,
  18. pageSize: 20
  19. },
  20. favData: null
  21. }
  22. /**
  23. * 模块状态,用于存储模块的状态 例如:收起,关闭
  24. * @type {Object}
  25. */
  26. var status = {
  27. initialized: false,
  28. }
  29. //分页
  30. var pageContainer,
  31. favPageBtnGroup,
  32. pageJump;
  33. /**
  34. * 初始化
  35. * @type {Function}
  36. */
  37. function init() {
  38. setLayout();
  39. subscribe();
  40. showPage({
  41. page:1
  42. });
  43. }
  44. /**
  45. * 设置界面
  46. */
  47. function setLayout(){
  48. $("#usrCenterContent").empty().append(tplLayout);
  49. pageContainer = $('<div id="userFavPage"></div>').appendTo($("#usrCenterContent"));
  50. $("#userFav").mCustomScrollbar({
  51. scrollInertia: 1000
  52. });
  53. layoutResize();
  54. $(window).resize(function() {
  55. layoutResize();
  56. });
  57. }
  58. /**
  59. * 界面重置
  60. * @return {[type]} [description]
  61. */
  62. function layoutResize(){
  63. $("#userFav").css({height:$(window).height()-154});
  64. $("#userFav").mCustomScrollbar("update");
  65. }
  66. /**
  67. * 显示指定参数的列表
  68. * @type {Function}
  69. * @param options {Object} 参数
  70. * @see options
  71. * @private
  72. */
  73. function showPage(options){
  74. ONEMAP.T.objExtend(modValue.options,options,true);
  75. getFavData();
  76. }
  77. /**
  78. * 获取收藏数据
  79. * @type {Function}
  80. * @private
  81. */
  82. function getFavData() {
  83. ONEMAP.V.loading.load();
  84. $.ajax({
  85. type: "get",
  86. dataType: 'json',
  87. url: onemapUrlConfig.userCenterUrl+ '/routes/list'+
  88. '?page=' + modValue.options.page +
  89. '&size=' + modValue.options.pageSize,
  90. success: function(data) {
  91. ONEMAP.V.loading.loaded();
  92. if(data.code == 4){
  93. ONEMAP.T.noPermission('addFav',data.message);
  94. return false;
  95. }
  96. if(data.code == 3){
  97. ONEMAP.T.logout('addFav');
  98. return false;
  99. }
  100. modValue.favData = data;
  101. setFavItem();
  102. },
  103. error:function(errorData){
  104. ONEMAP.V.loading.loaded();
  105. }
  106. });
  107. }
  108. /**
  109. * 设置收藏列表item
  110. * @type {Function}
  111. * @private
  112. */
  113. function setFavItem(){
  114. var count = 0;
  115. $("#userFavList").empty();
  116. if(modValue.favData['list'].length > 0){
  117. for(var i= 0,l=modValue.favData['list'].length; i<l; i++){
  118. var da = modValue.favData['list'][i];
  119. count++;
  120. var itemHtml = $('<dt fid="'+da._id+'"><span class="num">'+count+'</span><span class="name">'+da.name +'</span>'+
  121. '<span class="option"><a class="del" title="删除">删除</a><a class="edit" title="编辑">编辑</a></span></dt>');
  122. itemHtml.bind('mouseenter',function(){
  123. $(this).addClass('hover');
  124. }).bind('mouseleave',function(){
  125. $(this).removeClass('hover');
  126. });
  127. itemHtml.find('.name').bind('click',{da:da},function(e){
  128. require(['modDir/tools/toolRouteSearch'], function(toolRouteSearch) {
  129. //起点
  130. toolRouteSearch.setStartPoint([e.data.da.startpoint_lon,e.data.da.startpoint_lat]);
  131. //途经点
  132. $(JSON.parse(e.data.da.type_l1)).each(function(index,val){
  133. toolRouteSearch.setAcrossPoint(val);
  134. })
  135. //规避点
  136. $(JSON.parse(e.data.da.type_l2)).each(function(index,val){
  137. toolRouteSearch.setAvoidPoint(val);
  138. })
  139. //终点
  140. toolRouteSearch.setStopPoint([e.data.da.stoppoint_lon,e.data.da.stoppoint_lat]);
  141. });
  142. map23DControl.setView({
  143. center: {
  144. lat: e.data.da.center_lat,
  145. lng: e.data.da.center_lon
  146. },
  147. zoom: e.data.da.zoomleve
  148. })
  149. });
  150. itemHtml.find('.del').bind('click',{da:da},function(e){
  151. delForm(e.data.da,$(this));
  152. });
  153. itemHtml.find('.edit').bind('click',{da:da},function(e){
  154. editForm(e.data.da,$(this));
  155. });
  156. $("#userFavList").append(itemHtml);
  157. }
  158. //分页
  159. pageContainer.empty();
  160. 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));
  161. if(countPages==0){
  162. countPages = 1;
  163. }
  164. // 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>');
  165. pageJump = $('<div id="userFavPageJump" class="count"><div class="firstpage"></div><div class="uppage"></div>'+
  166. '<div class="fg"></div><div id="thematicPageJump" class="count"><span>'+modValue.favData.current_page+'/'+countPages+'页</span>'+
  167. '</div><div class="fg"></div><div class="nextpage"></div><div class="endpage"></div><div class="btn-group"></div></div>');
  168. pageJump.appendTo(pageContainer);
  169. $("#userFavPageJump .page_num").bind('keydown', function (e) {
  170. if (e.keyCode === 13) {
  171. var pageJump = parseInt($("#userFavPageJump .page_num").val());
  172. if(!pageJump || pageJump > countPages){
  173. return;
  174. }else {
  175. showPage({page:parseInt(pageJump)});
  176. }
  177. }
  178. });
  179. if (modValue.favData.size < modValue.favData.total) {
  180. $("#userFavPageJump .firstpage").bind('click',function(){
  181. showPage({page:1});
  182. })
  183. $("#userFavPageJump .uppage").bind('click',function(){
  184. if(modValue.favData.current_page == 1){
  185. return false;
  186. }else{
  187. modValue.favData.current_page = modValue.favData.current_page-1;
  188. showPage({page:modValue.favData.current_page});
  189. }
  190. })
  191. $("#userFavPageJump .nextpage").bind('click',function(){
  192. if(modValue.favData.current_page == countPages){
  193. return false;
  194. }else{
  195. modValue.favData.current_page = modValue.favData.current_page+1;
  196. showPage({page:modValue.favData.current_page});
  197. }
  198. })
  199. $("#userFavPageJump .endpage").bind('click',function(){
  200. showPage({page:countPages});
  201. })
  202. }
  203. }else {
  204. pageContainer.empty();
  205. $("#userFavList").append('<p class="not-result">暂无数据!</p>');
  206. }
  207. $("#userFav").mCustomScrollbar("update");
  208. }
  209. /**
  210. * 添加收藏
  211. */
  212. function addRoute(routeData) {
  213. if(!status.initialized){
  214. init();
  215. status.initialized = true;
  216. }
  217. //构造数据
  218. var ajaxData = {};
  219. ajaxData.name = routeData.name;
  220. ajaxData.startpoint_lat = routeData.startpoint_lat;
  221. ajaxData.startpoint_lon = routeData.startpoint_lon;
  222. ajaxData.stoppoint_lat = routeData.stoppoint_lat;
  223. ajaxData.stoppoint_lon = routeData.stoppoint_lon;
  224. //ajaxData.map_type = MAPPLUS.M.mapHolder.mainLayers.getCurLayer().mId;
  225. ajaxData.center_lat = map23DData.view.center['lat'];
  226. ajaxData.center_lon = map23DData.view.center['lng'];
  227. ajaxData.zoomleve = map23DData.view.zoom;
  228. ajaxData.type_l1 = routeData.acrossPoints;
  229. ajaxData.type_l2 = routeData.avoidPoints;
  230. ONEMAP.V.loading.load();
  231. $.ajax({
  232. type: "get",
  233. dataType: 'json',
  234. url:onemapUrlConfig.userCenterUrl+'/routes/add',
  235. data: ajaxData,
  236. success: function(data) {
  237. ONEMAP.V.loading.load();
  238. if (data.success) {
  239. ONEMAP.C.publisher.publish({type:'success',message:'收藏路线('+routeData.name+')成功'},'noteBar::add');
  240. getFavData();
  241. } else {
  242. ONEMAP.C.publisher.publish({type:'error',message: data.msg||'收藏路线('+routeData.name+')失败'},'noteBar::add');
  243. }
  244. },
  245. error:function(errorData){
  246. ONEMAP.C.publisher.publish({type:'error',message:'收藏路线('+routeData.name+')失败'},'noteBar::add');
  247. }
  248. });
  249. }
  250. /**
  251. * 编辑表单
  252. * @type {Function}
  253. * @param data {Object} 表单数据
  254. * @param self {Object} 父类
  255. * @private
  256. */
  257. function editForm(data,self){
  258. var parent = self.parent().parent();
  259. var formHtml = $('<div class="form">' +
  260. '<input type="text" class="input input-small" maxlength="20" value="'+data.name+'" />' +
  261. '<button class="btn sure btn2 btn-small">确定</button>' +
  262. '<button class="btn cancel btn2 btn-small">取消</button>' +
  263. '</div> ');
  264. formHtml.find('.cancel').bind('click',function(){
  265. formHtml.remove();
  266. });
  267. parent.append(formHtml);
  268. formHtml.find('.sure').bind('click',{da:data,self:parent},function(e){
  269. updateFav(e);
  270. });
  271. }
  272. /**
  273. * 更新收藏
  274. * @type {Function}
  275. * @param e
  276. * @returns {boolean}
  277. * @private
  278. */
  279. function updateFav(e){
  280. var name = e.data.self.find('.input').val();
  281. if(name ==='' || name.indexOf(' ') >= 0){
  282. ONEMAP.C.publisher.publish({ type: 'warning', message: '名称不能为空或包含空格' }, 'noteBar::add');
  283. e.data.self.find('.input').focus();
  284. return false;
  285. }
  286. if((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s]/g).test(name)){
  287. ONEMAP.C.publisher.publish({ type: 'warning', message: '名称只能包含英文、数字、中文' }, 'noteBar::add');
  288. e.data.self.find('.input').focus();
  289. return false;
  290. }
  291. e.data.self.find('.name').text(name);
  292. var fId = e.data.da._id;
  293. var ajaxData = {_id:fId,name:name};
  294. e.data.self.find('.form').remove();
  295. ONEMAP.V.loading.load();
  296. $.ajax({
  297. type:"get",
  298. dataType:'json',
  299. url:onemapUrlConfig.userCenterUrl+'/routes/update',
  300. data:ajaxData,
  301. success:function(data){
  302. ONEMAP.V.loading.loaded();
  303. if(data.code == 4){
  304. ONEMAP.T.noPermission('updateFav');
  305. }
  306. if(data.code == 3){
  307. ONEMAP.T.logout('updateFav');
  308. }
  309. if(data.success){
  310. ONEMAP.C.publisher.publish({type:'success',message:'更新路线('+name+')成功'},'noteBar::add');
  311. getFavData();
  312. }else if(data.hasOwnProperty('success') && !data.success) {
  313. ONEMAP.C.publisher.publish({type:'error',message:'更新路线('+name+')失败,'+data.msg},'noteBar::add');
  314. }else{
  315. ONEMAP.C.publisher.publish({type:'error',message:'更新路线('+name+')失败'},'noteBar::add');
  316. }
  317. },
  318. error:function(errorData){
  319. ONEMAP.V.loading.loaded();
  320. }
  321. });
  322. }
  323. /**
  324. * 删除表单
  325. * @param {[type]} data [description]
  326. * @param {[type]} self [description]
  327. * @return {[type]} [description]
  328. */
  329. function delForm(data,self){
  330. var parent = self.parent().parent();
  331. var formHtml = $('<div class="form">' +
  332. '<button class="btn cancel btn2 btn-small" style="float:right;margin-right:18px;">取消</button>' +
  333. '<button class="btn sure btn2 btn-small" style="float:right">确定</button>' +
  334. '</div> ');
  335. formHtml.find('.cancel').bind('click',function(){
  336. formHtml.remove();
  337. });
  338. parent.append(formHtml);
  339. formHtml.find('.sure').bind('click',{da:data,self:parent},function(e){
  340. delFav(e.data.da._id);
  341. });
  342. }
  343. /**
  344. * 删除收藏
  345. * @type {Function}
  346. * @param id {Number}
  347. * @private
  348. */
  349. function delFav(id){
  350. var ajaxData = {_id:id};
  351. ONEMAP.V.loading.load();
  352. $.ajax({
  353. type:"get",
  354. dataType:'json',
  355. url:onemapUrlConfig.userCenterUrl+'/routes/del',
  356. data:ajaxData,
  357. success:function(data){
  358. ONEMAP.V.loading.loaded();
  359. if(data.code == 4){
  360. ONEMAP.T.noPermission('delFav');
  361. }
  362. if(data.code == 3){
  363. ONEMAP.T.logout('delFav');
  364. }
  365. if(data.success){
  366. ONEMAP.C.publisher.publish({type:'success',message:'删除路线成功'},'noteBar::add');
  367. getFavData();
  368. }else if(data.hasOwnProperty('success') && !data.success) {
  369. ONEMAP.C.publisher.publish({type:'error',message:'删除路线失败,'+data.msg},'noteBar::add');
  370. }else{
  371. ONEMAP.C.publisher.publish({type:'error',message:'删除路线失败'},'noteBar::add');
  372. }
  373. },
  374. error:function(errorData){
  375. ONEMAP.V.loading.loaded();
  376. }
  377. });
  378. }
  379. /**
  380. * 注册订阅
  381. * @type {Function}
  382. * 推送:ONEMAP.C.publisher.publish(options,'userFavuleName::type');
  383. * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange');
  384. */
  385. function subscribe(){}
  386. /**
  387. * 取消订阅
  388. * @type {Function}
  389. * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange');
  390. */
  391. function unSubscribe(){}
  392. /**
  393. * 模块移除
  394. * @return {[type]} [description]
  395. */
  396. function remove(){
  397. status.initialized = false;
  398. modValue.options ={
  399. page:1,
  400. pageSize:20
  401. };
  402. }
  403. return ONEMAP.M.userRoute = {
  404. init: init,
  405. remove:remove,
  406. addRoute: addRoute
  407. }
  408. });