gcmsNav.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. /**
  2. * [ONEMAP.M.gcmsNav]
  3. * @return {[object]}
  4. */
  5. define([
  6. 'html!templates/gcms/gcmsNav',
  7. 'modDir/gcms/gcmsEvents',
  8. 'css!styles/gcms/gcmsNav'
  9. ], function(tplLayout, gcmsEvents) {
  10. /**
  11. * 模块数据 用于数据存储和外部调用
  12. * @type {Object}
  13. * 数据存放
  14. */
  15. var modValue = {
  16. navData: null,
  17. appendToMyLayer: null
  18. };
  19. /**
  20. * 状态值
  21. * @type {Boolean}
  22. * @default false
  23. * @private
  24. */
  25. var status = {
  26. initialized: false
  27. };
  28. /**
  29. * 模块初始化
  30. * @return {[type]} [description]
  31. */
  32. function init() {
  33. //当前栏目内容列表
  34. ONEMAP.D.gcmsCurColumnListData = {};
  35. //当前文章详细内容
  36. ONEMAP.D.gcmsCurArticleData = {};
  37. //当前文章模型内容
  38. ONEMAP.D.gcmsCurColumnModelData = {};
  39. //未初始化,初始化布局
  40. if (!status.initialized) {
  41. //订阅推送
  42. subscribe();
  43. //设置容器布局
  44. setLayout();
  45. status.initialized = true;
  46. }
  47. //当前栏目信息
  48. ONEMAP.D.gcmsCurColumnData = {};
  49. //栏目列表
  50. ONEMAP.D.gcmsColumnObjs = {};
  51. getNavData();
  52. //设置zIndex 为最高
  53. var zIndex = ONEMAP.M.sideBar.getZIndex();
  54. $('#gcmsMainMenu').css({
  55. zIndex: zIndex
  56. });
  57. ONEMAP.D.currentSideBarMod = 'gcmsNav';
  58. //开启侧栏
  59. //ONEMAP.C.publisher.publish('handShow', 'layout::sideBar');
  60. addDiyColumn();
  61. }
  62. /**
  63. * 初始化布局
  64. */
  65. function setLayout() {
  66. $(tplLayout).appendTo($("#sideBarBody"));
  67. layoutResize();
  68. $("#gcmsMainMenu .menu").mCustomScrollbar({
  69. scrollInertia: 1000
  70. });
  71. };
  72. /**
  73. * 窗口布局重置
  74. * @type {Function}
  75. */
  76. function layoutResize() {
  77. $("#gcmsMainMenu .menu").css({
  78. height: $(window).height() - 59
  79. });
  80. //$("#gcmsMenuColumnList").css({minHeight: $("#gcmsMainMenu .menu").height()})
  81. $("#gcmsMainMenu .menu").mCustomScrollbar('update');
  82. };
  83. /**
  84. * 创建冒泡窗
  85. */
  86. function creatPopupHtml(options) {
  87. var popupHtml = '<div class="popup_html marker">' +
  88. ' <div class="popup-lt"></div>' +
  89. ' <div class="popup-lb"></div>' +
  90. ' <div class="popup-rt"></div>' +
  91. ' <div class="popup-rb"></div>' +
  92. ' <div class="popup-ct" style="text-indent:15px;line-height:48px">' + options.name +
  93. ' </div>' +
  94. ' <div class="popup-cb" style="padding-bottom:20px;color:#666666 !important">' +
  95. ' <div class="gems_marker" style="padding:30px 5px 0px 5px">' + options.content +
  96. ' </div>' +
  97. ' </div>' +
  98. '</div>'
  99. return popupHtml;
  100. }
  101. function bindEvent() {
  102. $('#gcmsMenuColumnList .go-back').off('click').bind('click', function() {
  103. var navLeft = $('#gcmsMainMenu').position().left + 410;
  104. // var navLeft = 410;
  105. var parent = $(this).parent().parent().parent();
  106. var pparent = $(this).parent().parent().parent().parent();
  107. if (pparent.hasClass('nav tree')) {
  108. $("#gcmsMenuColumnList").css({
  109. height: $("#gcmsMainMenu .menu").height()
  110. });
  111. } else {
  112. $("#gcmsMenuColumnList").css({
  113. height: pparent.height()
  114. });
  115. }
  116. $("#gcmsMainMenu .menu").mCustomScrollbar('update');
  117. $('#gcmsMainMenu').animate({
  118. left: navLeft
  119. }, 200, function() {
  120. parent.addClass('collapsed');
  121. });
  122. });
  123. $('#gcmsMenuColumnList a:not(".go-back")').off('click').bind('click', function() {
  124. if ($(this).next().hasClass('collapse-section')) {
  125. $(this).parent().removeClass('collapsed');
  126. var navLeft = $('#gcmsMainMenu').position().left - 410;
  127. // var navLeft = -410;
  128. $("#gcmsMenuColumnList").css({
  129. height: $(this).next().height()
  130. });
  131. $("#gcmsMainMenu .menu").mCustomScrollbar('update');
  132. $('#gcmsMainMenu').animate({
  133. left: navLeft
  134. }, 200, function() {});
  135. }
  136. $(this).parent().parent().find('.active').removeClass('active');
  137. $(this).addClass('active');
  138. });
  139. }
  140. /**
  141. * 获取 菜单数据
  142. * @return {[type]} [description]
  143. */
  144. function getNavData() {
  145. var gUrl = onemapUrlConfig.gcmsServiceUrl + '/showmenu';
  146. // console.log(ONEMAP.D.user.ticket)
  147. if (ONEMAP.D.isLoad) {
  148. gUrl = onemapUrlConfig.gcmsServiceUrl + '/showmenu';
  149. }
  150. ONEMAP.V.loading.load();
  151. $.ajax({
  152. url: gUrl,
  153. type: "GET",
  154. dataType: 'json'
  155. })
  156. .done(function(data) {
  157. ONEMAP.V.loading.loaded();
  158. if (data.code == 4) {
  159. ONEMAP.C.noPermission('getNavData');
  160. return false;
  161. }
  162. // if (data.code == 3) {
  163. // ONEMAP.C.logout('getNavData');
  164. // }
  165. $("#gcmsMenuColumnList").empty();
  166. modValue.navData = data.data;
  167. buildMenuColumnObjs(data.data);
  168. //setGcmsNav();
  169. })
  170. .fail(function() {
  171. ONEMAP.V.loading.loaded();
  172. });
  173. }
  174. /**
  175. * 构造菜单栏目 对象集合
  176. * @param {[type]} options [description]
  177. * @return {[type]} [description]
  178. */
  179. function buildMenuColumnObjs(options) {
  180. $(options).each(function(index, el) {
  181. ONEMAP.D.gcmsColumnObjs[el['name']] = el;
  182. if (el.hasOwnProperty('son_tree')) {
  183. buildMenuColumnObjs(el['son_tree']);
  184. }
  185. });
  186. }
  187. /**
  188. * 设置栏目列表
  189. */
  190. function setGcmsNav() {
  191. $(modValue.navData).each(function(index, el) {
  192. switch (el['bind_type']) {
  193. case 'column':
  194. var a = $('<li class="column-menu collapsible collapsed"><a class="collapse-trigger"><span class="icon icon-angle-right f-r"></span><span class="icon icon-th-list"></span>' + el['title'] + '</a></li>');
  195. if (el.hasOwnProperty('son_tree')) {
  196. buildSonTreeNav(el).appendTo(a);
  197. }
  198. a.appendTo($('#gcmsMenuColumnList'));
  199. break;
  200. case 'cms':
  201. // console.log(el['name'])
  202. //隐藏版本更新
  203. if (el['name'] != 'update_set') {
  204. var a = $('<li class="column-menu collapsible collapsed"><a column-value="' + el['name'] + '"><span class="icon icon-columns"></span>' + el['title'] + '</a></li>');
  205. a.bind('click', {
  206. navData: el
  207. }, function(e) {
  208. // console.log(e.data.navData);
  209. require(['modDir/gcms/gcmsList'], function(gcmsList) {
  210. gcmsList.init({
  211. type: 'cms',
  212. data: e.data.navData,
  213. column_name: e.data.navData['name'],
  214. column_title: e.data.navData['title'],
  215. });
  216. });
  217. });
  218. a.appendTo($('#gcmsMenuColumnList'));
  219. }
  220. break;
  221. case 'link':
  222. $('<li class="column-menu collapsible collapsed"><a href="' + el['bind_value'] + '" target="_blank">' + el['title'] + '</a></li>').appendTo($('#gcmsMenuColumnList'));
  223. break;
  224. case 'js':
  225. $('<li class="column-menu collapsible collapsed"><a onclick="' + el['bind_value'] + '">' + el['title'] + '</a></li>').appendTo($('#gcmsMenuColumnList'));
  226. break;
  227. }
  228. });
  229. $("#partNavMenuGroup .btn-group").mCustomScrollbar('update');
  230. bindEvent();
  231. }
  232. function buildSonTreeNav(data) {
  233. var ul = $('<ul class="collapse-section"><li><a class="go-back"><span class="icon icon-angle-left"></span><lable>返回 <span>' + data['title'] + '</span></lable></a></li></ul>');
  234. $(data['son_tree']).each(function(index, el) {
  235. switch (el['bind_type']) {
  236. case 'column':
  237. var a = $('<li class="collapsed"><a class="collapse-trigger"><span class="icon icon-angle-right f-r"></span><span class="icon icon-th-list"></span>' + el['title'] + '</a></li>');
  238. if (el.hasOwnProperty('son_tree')) {
  239. buildSonTreeNav(el).appendTo(a);
  240. }
  241. a.appendTo(ul);
  242. break;
  243. case 'cms':
  244. var a = $('<li class="collapsed"><a column-value="' + el['name'] + '"><span class="icon icon-columns"></span>' + el['title'] + '</a></li>');
  245. a.bind('click', {
  246. navData: el
  247. }, function(e) {
  248. require(['modDir/gcms/gcmsList'], function(gcmsList) {
  249. gcmsList.init({
  250. type: 'cms',
  251. data: e.data.navData,
  252. column_name: e.data.navData['name']
  253. });
  254. });
  255. });
  256. a.appendTo(ul);
  257. break;
  258. case 'link':
  259. $('<li class="collapsed"><a href="' + el['bind_value'] + '" target="_blank">' + el['title'] + '</a></li>').appendTo(ul);
  260. break;
  261. case 'js':
  262. $('<li class="collapsed"><a onclick="' + el['bind_value'] + '">' + el['title'] + '</a></li>').appendTo(ul);
  263. break;
  264. }
  265. });
  266. return ul;
  267. }
  268. function addDiyColumn() {
  269. $("#userIGListInfo").html("");
  270. var category = ONEMAP.D.globalSettingData.importantGoalsCategory;
  271. for (var i = 0; i < category.length; i++) {
  272. var liHtml = $('<section class="item"><div class="sectionbg"><span class="translate">' + category[i] + '</span></div></section>')
  273. var linkcontent = $('<ul class="linkContent" style="display:none"></ul>');
  274. ONEMAP.D.appendToMyLayer = null;
  275. $(ONEMAP.D.globalSettingData.importantGoalsSetting).each(function(index, el) {
  276. if (el.category === category[i]) {
  277. var thematicLink = $('<li class="item thematic-layer-link"><div class="linkLibg"></div><span class="translate">' + el.name + '</span></li>');
  278. thematicLink.bind('click', el, function(e) {
  279. modValue.curClickMenu = e.data.columnName;
  280. if ($(this).hasClass('selected')) {
  281. $(this).removeClass('selected');
  282. $("#gcmsDetailModal").remove();
  283. ONEMAP.C.publisher.publish({
  284. action: 'remove',
  285. guid: ONEMAP.M.diyData
  286. }, ONEMAP.M.diyData);
  287. var options = {
  288. action: "remove",
  289. DOMid: ONEMAP.M.diyData
  290. }
  291. ONEMAP.M.diyData = ONEMAP.M.myLayers.myLayerControl(options);
  292. } else {
  293. $('#userIGListInfo .selected').removeClass('selected');
  294. $(this).addClass('selected');
  295. $.ajax({
  296. type: 'get',
  297. dataType: 'json',
  298. url: onemapUrlConfig.gcmsServiceUrl + '/showmenu',
  299. beforeSend: ONEMAP.V.loading.load(),
  300. success: function(data) {
  301. if (data.code == 0) {
  302. findCloumName(data.data,modValue.curClickMenu);
  303. } else {
  304. ONEMAP.C.publisher.publish({
  305. type: 'warning',
  306. message: data.message
  307. }, 'noteBar::add');
  308. }
  309. },
  310. error: function(data) {
  311. },
  312. completer: ONEMAP.V.loading.loaded()
  313. })
  314. if (!ONEMAP.D.gcmsCurColumnData) {
  315. ONEMAP.D.gcmsCurColumnData = {};
  316. }
  317. // ONEMAP.D.gcmsCurColumnData['name'] = e.data.columnName;
  318. //添加图层控制
  319. if (!ONEMAP.D.appendToMyLayer) {
  320. var options = {
  321. action: "add",
  322. DOM: {
  323. name: e.data.name,
  324. type: "group",
  325. guid: "gcmsList"
  326. }
  327. }
  328. ONEMAP.D.appendToMyLayer = ONEMAP.M.myLayers.myLayerControl(options);
  329. ONEMAP.M.diyData = ONEMAP.D.appendToMyLayer;
  330. ONEMAP.C.publisher.subscribe(controlMyLayer, ONEMAP.D.appendToMyLayer);
  331. } else {
  332. var options = {
  333. action: "update",
  334. DOMid: ONEMAP.D.appendToMyLayer,
  335. DOM: {
  336. name: e.data.name,
  337. type: "group",
  338. guid: "gcmsList"
  339. }
  340. }
  341. ONEMAP.M.myLayers.myLayerControl(options);
  342. }
  343. }
  344. });
  345. thematicLink.appendTo(linkcontent);
  346. }
  347. });
  348. liHtml.find('.sectionbg').bind('click', function() {
  349. $(this).parent().find('.linkContent').toggle();
  350. if ($(this).hasClass('open')) {
  351. $(this).removeClass('open');
  352. } else {
  353. $(this).addClass('open');
  354. $(this).parent().siblings().find('.linkContent').hide();
  355. $(this).parent().siblings().find('.sectionbg').removeClass('open');
  356. }
  357. })
  358. linkcontent.appendTo(liHtml);
  359. liHtml.appendTo($("#userIGListInfo"));
  360. }
  361. //更新滚动条
  362. $('#userIGListInfo .ii-body').mCustomScrollbar('update');
  363. }
  364. function findCloumName(data,name){
  365. $.each(data,function(i,t){
  366. if(t.bind_type == "column"){
  367. var curdata = t.son_tree;
  368. findCloumName(curdata,name);
  369. }else if(t.bind_type == "cms" && t.name == name){
  370. require(['modDir/gcms/gcmsList'], function(gcmsList) {
  371. gcmsList.init({
  372. type: 'cms',
  373. data: t,
  374. column_name: t['name']
  375. });
  376. });
  377. ONEMAP.C.publisher.publish('handShow', 'layout::sideBar');
  378. return false;
  379. }
  380. })
  381. }
  382. /**
  383. * 图层控制
  384. */
  385. function controlMyLayer(options) {
  386. switch (options.action) {
  387. case 'remove':
  388. removeMyLayer();
  389. break;
  390. case 'opacity':
  391. setGropOpacity(options);
  392. break;
  393. }
  394. }
  395. function removeMyLayer() {
  396. map23DControl.group({
  397. action: 'cleanAll',
  398. guid: modValue.markersGroupGuid
  399. });
  400. map23DControl.group({
  401. action: 'remove',
  402. guid: modValue.markersGroupGuid
  403. })
  404. remove();
  405. ONEMAP.C.publisher.publish('hide', 'layout::sideBar');
  406. ONEMAP.C.publisher.publish('', 'gcmsArticleShowRemove');
  407. ONEMAP.D.appendToMyLayer = null;
  408. $("#userIGListInfo section.item li.item").removeClass("selected");
  409. ONEMAP.C.publisher.publish('handHide', 'layout::sideBar');
  410. ONEMAP.M.gcmsList.remove();
  411. };
  412. function setGropOpacity(options) {
  413. options = options.options;
  414. if (options.opacity == 1) {
  415. map23DControl.group({
  416. action: 'show',
  417. guid: modValue.markersGroupGuid
  418. })
  419. ONEMAP.C.publisher.publish('show', 'gcmsGroupControl');
  420. } else if (options.opacity == 0) {
  421. map23DControl.group({
  422. action: 'hide',
  423. guid: modValue.markersGroupGuid
  424. })
  425. ONEMAP.C.publisher.publish('hide', 'gcmsGroupControl');
  426. }
  427. };
  428. /**
  429. * 注册监听
  430. * @type {Function}
  431. */
  432. function subscribe() {}
  433. /**
  434. * 取消监听
  435. * @type {Function}
  436. */
  437. function unSubscribe() {}
  438. /**
  439. * 模块移除
  440. * @return {[type]} [description]
  441. */
  442. function remove() {
  443. unSubscribe();
  444. }
  445. return ONEMAP.M.gcmsNav = {
  446. init: init,
  447. remove: remove,
  448. creatPopupHtml: creatPopupHtml,
  449. getNavData: getNavData
  450. }
  451. });