userFav.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. /**
  2. * [ONEMAP.M.userFav]
  3. * @return {[object]}
  4. */
  5. define(['html!templates/user/userFav',
  6. 'html!templates/user/userFavAddModal',
  7. 'css!styles/user/userFav'],
  8. function(tplLayout,tplUserFavAddModal){
  9. /**
  10. * 模块数据 用于数据存储和外部调用
  11. * @type {Object}
  12. * 数据存放
  13. */
  14. var modValue = {
  15. //收藏数据
  16. favData:null,
  17. //初始化查询参数
  18. options :{
  19. page:1,
  20. pageSize:20
  21. }
  22. };
  23. /**
  24. * 模块界面样式 例如:宽,高
  25. * @type {Object}
  26. */
  27. var styles = {};
  28. /**
  29. * 模块状态,用于存储模块的状态 例如:收起,关闭
  30. * @type {Object}
  31. */
  32. var status = {
  33. initialized:false,
  34. isAddForm:false
  35. };
  36. /**
  37. * 初始化并订阅事件
  38. * @return {[type]} [description]
  39. */
  40. function init(){
  41. setLayout();
  42. subscribe();
  43. showPage({
  44. page:1
  45. });
  46. }
  47. //分页
  48. var pageContainer,
  49. favPageBtnGroup,
  50. pageJump;
  51. /**
  52. * 设置界面
  53. */
  54. function setLayout(){
  55. $("#usrCenterContent").empty().append(tplLayout);
  56. pageContainer = $('<div id="userFavPage"></div>').appendTo($("#usrCenterContent"));
  57. $("#userFav").mCustomScrollbar({
  58. scrollInertia: 1000
  59. });
  60. layoutResize();
  61. $(window).resize(function() {
  62. layoutResize();
  63. });
  64. }
  65. /**
  66. * 界面重置
  67. * @return {[type]} [description]
  68. */
  69. function layoutResize(){
  70. $("#userFav").css({height:$(window).height()-154});
  71. $("#userFav").mCustomScrollbar("update");
  72. }
  73. /**
  74. * 界面事件绑定
  75. * @return {[type]} [description]
  76. */
  77. function bindEvent(){
  78. }
  79. /**
  80. * 显示指定参数的列表
  81. * @type {Function}
  82. * @param options {Object} 参数
  83. * @see options
  84. * @private
  85. */
  86. function showPage(options){
  87. ONEMAP.T.objExtend(modValue.options,options,true);
  88. getFavData();
  89. }
  90. /**
  91. * 获取收藏数据
  92. * @type {Function}
  93. * @private
  94. */
  95. function getFavData(){
  96. ONEMAP.V.loading.load();
  97. $.ajax({
  98. type:"get",
  99. dataType:'json',
  100. url:onemapUrlConfig.userCenterUrl+'/bookmarker/list'+
  101. '?page='+modValue.options.page+
  102. '&size='+modValue.options.pageSize,
  103. success:function(data){
  104. console.log(data)
  105. if(data.code == 4){
  106. ONEMAP.T.noPermission('addFav',data.message);
  107. return false;
  108. }
  109. if(data.code == 3){
  110. ONEMAP.T.logout('addFav');
  111. return false;
  112. }
  113. ONEMAP.V.loading.loaded();
  114. modValue.favData = data;
  115. if(data.total>0){
  116. setFavItem();
  117. } else {
  118. $("#userFavList").html("暂无数据");
  119. }
  120. if(data.total==1&&data['list'][0].source_id==97){
  121. $("#userFavList").html("暂无数据");
  122. }
  123. },
  124. error:function(errorData){
  125. ONEMAP.V.loading.loaded();
  126. $("#userFavList").html("暂时无法获取数据");
  127. }
  128. });
  129. }
  130. /**
  131. * 设置收藏列表item
  132. * @type {Function}
  133. * @private
  134. */
  135. function setFavItem(){
  136. var count = 0;
  137. $("#userFavList").empty();
  138. if(modValue.favData['list'].length > 0){
  139. for(var i= 0,l=modValue.favData['list'].length; i<l; i++){
  140. var da = modValue.favData['list'][i];
  141. // console.log(da)
  142. if(da.source_id == 97){
  143. continue;
  144. }
  145. count++;
  146. var itemHtml = $('<dt fid="'+da._id+'"><span class="num">'+count+'</span><span class="name">'+da.name +'</span>'+
  147. '<span class="option"><a class="del" title="删除">删除</a><a class="edit" title="编辑">编辑</a></span></dt>');
  148. itemHtml.bind('mouseenter',function(){
  149. $(this).addClass('hover');
  150. }).bind('mouseleave',function(){
  151. $(this).removeClass('hover');
  152. });
  153. itemHtml.find('.name').bind('click',{da:da},function(e){
  154. var mapTypeObj = {
  155. 1:'gr',
  156. 2:'gt',
  157. 3:'gm'
  158. }
  159. map2DViewer.setDefaultTileLayer(mapTypeObj[e.data.da.maptype]);
  160. map23DControl.setView({
  161. center: {
  162. lat: e.data.da.latitude,
  163. lng: e.data.da.longitude
  164. },
  165. zoom: e.data.da.zoomleve
  166. })
  167. });
  168. itemHtml.find('.del').bind('click',{da:da},function(e){
  169. delForm(e.data.da,$(this));
  170. });
  171. itemHtml.find('.edit').bind('click',{da:da},function(e){
  172. editForm(e.data.da,$(this));
  173. });
  174. $("#userFavList").append(itemHtml);
  175. }
  176. //分页
  177. if(pageContainer) pageContainer.empty();
  178. 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));
  179. if(countPages==0){
  180. countPages = 1;
  181. }
  182. // 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>');
  183. pageJump = $('<div id="userFavPageJump" class="count"><div class="firstpage"></div><div class="uppage"></div>'+
  184. '<div class="fg"></div><div id="thematicPageJump" class="count"><span>'+modValue.favData.current_page+'/'+countPages+'页</span>'+
  185. '</div><div class="fg"></div><div class="nextpage"></div><div class="endpage"></div><div class="btn-group"></div></div>');
  186. pageJump.appendTo(pageContainer);
  187. $("#userFavPageJump .page_num").bind('keydown', function (e) {
  188. if (e.keyCode === 13) {
  189. var pageJump = parseInt($("#userFavPageJump .page_num").val());
  190. if(!pageJump || pageJump > countPages){
  191. return;
  192. }else {
  193. showPage({page:parseInt(pageJump)});
  194. }
  195. }
  196. });
  197. favPageBtnGroup = $('<div class="btn-group"></div>').appendTo(pageContainer);
  198. if (modValue.favData.size < modValue.favData.total) {
  199. if (modValue.favData.current_page == 1) {
  200. var abtnNext = $('<button type="button" class="btn btn2 btn-small next" pid=' + (modValue.favData.current_page + 1) + '>下一页</button>');
  201. favPageBtnGroup.append(abtnNext);
  202. } else if (countPages == modValue.favData.current_page && modValue.favData.total > modValue.favData.size) {
  203. var abtnPrev = $('<button type="button" class="btn btn2 btn-small prev" pid=' + (modValue.favData.current_page - 1) + '>上一页</button>');
  204. favPageBtnGroup.append(abtnPrev);
  205. } else {
  206. var abtnPrev = $('<button type="button" class="btn btn2 btn-small prev" pid=' + (modValue.favData.current_page - 1) + '>上一页</button>');
  207. var abtnNext = $('<button type="button" class="btn btn2 btn-small next" pid=' + (modValue.favData.current_page + 1) + '>下一页</button>');
  208. favPageBtnGroup.append(abtnPrev).append(abtnNext);
  209. }
  210. $("#userFavPage .btn").on("click", function () {
  211. showPage({page: parseInt($(this).attr('pid'))});
  212. });
  213. //用户中心-我的收藏-书签-翻页
  214. $("#userFavPageJump .firstpage").bind('click',function(){
  215. showPage({page:1});
  216. })
  217. $("#userFavPageJump .uppage").bind('click',function(){
  218. if(modValue.favData.current_page == 1){
  219. return false;
  220. }else{
  221. modValue.favData.current_page = modValue.favData.current_page-1;
  222. showPage({page:modValue.favData.current_page});
  223. }
  224. })
  225. $("#userFavPageJump .nextpage").bind('click',function(){
  226. if(modValue.favData.current_page == countPages){
  227. return false;
  228. }else{
  229. modValue.favData.current_page = modValue.favData.current_page+1;
  230. showPage({page:modValue.favData.current_page});
  231. }
  232. })
  233. $("#userFavPageJump .endpage").bind('click',function(){
  234. showPage({page:countPages});
  235. })
  236. }
  237. }else {
  238. pageContainer.empty();
  239. $("#userFavList").append('<p class="not-result">暂无数据!</p>');
  240. }
  241. $("#userFav").mCustomScrollbar("update");
  242. }
  243. /**
  244. * 添加收藏
  245. * @type {Function}
  246. * @param e
  247. */
  248. function addFav(e){
  249. //限制只能添加当前一个窗口
  250. if(status.isAddForm){
  251. return false;
  252. }
  253. status.isAddForm = true;
  254. $('body').append(tplUserFavAddModal);
  255. $('#filterCover').show();
  256. $('#userFavAddModal').show();
  257. $('#userFavAddModal').find('.input').focus();
  258. $('#userFavAddModal').find('.close').bind('click',function(){
  259. $('#filterCover').hide();
  260. $('#userFavAddModal').remove();
  261. status.isAddForm = false;
  262. });
  263. $('#userFavAddModal').find('.sure').bind('click',function(){
  264. var name = $('#userFavAddModal .input').val();
  265. if(name ==='' || name.indexOf(' ') >= 0){
  266. ONEMAP.C.publisher.publish({ type: 'warning', message: '书签名称不能为空或包含空格' }, 'noteBar::add');
  267. $('#userFavAddModal .input').focus();
  268. return false;
  269. }
  270. if((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s]/g).test(name)){
  271. ONEMAP.C.publisher.publish({ type: 'warning', message: '名称只能包含英文、数字、中文' }, 'noteBar::add');
  272. $('#userFavAddModal .input').focus();
  273. return false;
  274. }
  275. //构造数据
  276. var ajaxData = {};
  277. ajaxData.name = $('#userFavAddModal .input').val();
  278. ajaxData.longitude = map23DData.view.center['lng'];
  279. ajaxData.latitude = map23DData.view.center['lat'];
  280. ajaxData.zoomleve = map23DData.view.zoom;
  281. ajaxData.source_id = 0;
  282. var mapTypeObj = {
  283. gr:1,
  284. gt:2,
  285. gm:3
  286. }
  287. ajaxData.maptype = mapTypeObj[ONEMAP.M.mapHolder.modValue.mainLayers];
  288. ONEMAP.V.loading.load();
  289. $.ajax({
  290. type:"get",
  291. dataType:'json',
  292. url:onemapUrlConfig.userCenterUrl+'/bookmarker/add',
  293. data:ajaxData,
  294. success:function(data){
  295. ONEMAP.V.loading.loaded();
  296. if(data.code == 4){
  297. ONEMAP.T.noPermission('addFav');
  298. }
  299. if(data.code == 3){
  300. ONEMAP.T.logout('addFav');
  301. }
  302. if(data.success){
  303. ONEMAP.C.publisher.publish({type:'success',message:'收藏书签('+ajaxData.name+')成功'},'noteBar::add');
  304. getFavData();
  305. }else if(data.hasOwnProperty('success') && !data.success) {
  306. ONEMAP.C.publisher.publish({type:'error',message:'收藏书签('+ajaxData.name+')失败,'+data.msg},'noteBar::add');
  307. }else {
  308. ONEMAP.C.publisher.publish({type:'error',message:'收藏书签('+ajaxData.name+')失败'},'noteBar::add');
  309. }
  310. },
  311. error:function(errorData){
  312. ONEMAP.V.loading.loaded();
  313. }
  314. });
  315. //移除添加框,恢复可添加状态
  316. $('#filterCover').hide();
  317. $('#userFavAddModal').remove() ;
  318. status.isAddForm = false;
  319. });
  320. }
  321. /**
  322. * 编辑表单
  323. * @type {Function}
  324. * @param data {Object} 表单数据
  325. * @param self {Object} 父类
  326. * @private
  327. */
  328. function editForm(data,self){
  329. var parent = self.parent().parent();
  330. var formHtml = $('<div class="form">' +
  331. '<input type="text" class="input input-small" maxlength="20" value="'+data.name+'" />' +
  332. '<button class="btn sure btn2 btn-small">确定</button>' +
  333. '<button class="btn cancel btn2 btn-small">取消</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. updateFav(e);
  341. });
  342. }
  343. /**
  344. * 更新收藏
  345. * @type {Function}
  346. * @param e
  347. * @returns {boolean}
  348. * @private
  349. */
  350. function updateFav(e){
  351. var name = e.data.self.find('.input').val();
  352. if(name ==='' || name.indexOf(' ') >= 0){
  353. ONEMAP.C.publisher.publish({ type: 'warning', message: '书签名称不能为空或包含空格' }, 'noteBar::add');
  354. e.data.self.find('.input').focus();
  355. return false;
  356. }
  357. if((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s]/g).test(name)){
  358. ONEMAP.C.publisher.publish({ type: 'warning', message: '名称只能包含英文、数字、中文' }, 'noteBar::add');
  359. e.data.self.find('.input').focus();
  360. return false;
  361. }
  362. e.data.self.find('.name').text(name);
  363. var fId = e.data.da._id;
  364. var ajaxData = {_id:fId,name:name};
  365. e.data.self.find('.form').remove();
  366. ONEMAP.V.loading.load();
  367. $.ajax({
  368. type:"get",
  369. dataType:'json',
  370. url:onemapUrlConfig.userCenterUrl+'/bookmarker/update',
  371. data:ajaxData,
  372. success:function(data){
  373. ONEMAP.V.loading.loaded();
  374. if(data.code == 4){
  375. ONEMAP.T.noPermission('updateFav');
  376. }
  377. if(data.code == 3){
  378. ONEMAP.T.logout('updateFav');
  379. }
  380. if(data.success){
  381. ONEMAP.C.publisher.publish({type:'success',message:'更新书签('+name+')成功'},'noteBar::add');
  382. getFavData();
  383. }else if(data.hasOwnProperty('success') && !data.success) {
  384. ONEMAP.C.publisher.publish({type:'error',message:'更新书签('+name+')失败,'+data.msg},'noteBar::add');
  385. }else{
  386. ONEMAP.C.publisher.publish({type:'error',message:'更新书签('+name+')失败'},'noteBar::add');
  387. }
  388. },
  389. error:function(errorData){
  390. ONEMAP.V.loading.loaded();
  391. }
  392. });
  393. }
  394. /**
  395. * 删除表单
  396. * @param {[type]} data [description]
  397. * @param {[type]} self [description]
  398. * @return {[type]} [description]
  399. */
  400. function delForm(data,self){
  401. var parent = self.parent().parent();
  402. var formHtml = $('<div class="form">' +
  403. '<button class="btn cancel btn2 btn-small" style="float:right;margin-right:18px;">取消</button>' +
  404. '<button class="btn sure btn2 btn-small" style="float:right">确定</button>' +
  405. '</div> ');
  406. formHtml.find('.cancel').bind('click',function(){
  407. formHtml.remove();
  408. });
  409. parent.append(formHtml);
  410. formHtml.find('.sure').bind('click',{da:data,self:parent},function(e){
  411. delFav(e.data.da._id);
  412. });
  413. }
  414. /**
  415. * 删除收藏
  416. * @type {Function}
  417. * @param id {Number}
  418. * @private
  419. */
  420. function delFav(id){
  421. var ajaxData = {_id:id};
  422. ONEMAP.V.loading.load();
  423. $.ajax({
  424. type:"get",
  425. dataType:'json',
  426. url:onemapUrlConfig.userCenterUrl+'/bookmarker/del',
  427. data:ajaxData,
  428. success:function(data){
  429. ONEMAP.V.loading.loaded();
  430. if(data.code == 4){
  431. ONEMAP.T.noPermission('delFav');
  432. }
  433. if(data.code == 3){
  434. ONEMAP.T.logout('delFav');
  435. }
  436. if(data.success){
  437. ONEMAP.C.publisher.publish({type:'success',message:'删除书签成功'},'noteBar::add');
  438. getFavData();
  439. }else if(data.hasOwnProperty('success') && !data.success) {
  440. ONEMAP.C.publisher.publish({type:'error',message:'删除书签失败,'+data.msg},'noteBar::add');
  441. }else{
  442. ONEMAP.C.publisher.publish({type:'error',message:'删除书签失败'},'noteBar::add');
  443. }
  444. },
  445. error:function(errorData){
  446. ONEMAP.V.loading.loaded();
  447. }
  448. });
  449. }
  450. /**
  451. * 注册订阅
  452. * @type {Function}
  453. * 推送:ONEMAP.C.publisher.publish(options,'userFavuleName::type');
  454. * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange');
  455. */
  456. function subscribe(){}
  457. /**
  458. * 取消订阅
  459. * @type {Function}
  460. * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange');
  461. */
  462. function unSubscribe(){}
  463. /**
  464. * 模块移除
  465. * @return {[type]} [description]
  466. */
  467. function remove(){
  468. status.initialized = false;
  469. modValue.options ={
  470. page:1,
  471. pageSize:20
  472. };
  473. }
  474. return ONEMAP.M.userFav = {
  475. init:init,
  476. remove:remove,
  477. addFav:addFav
  478. }
  479. });