userPoint.js 16 KB

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