menu.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. define(["jquery", "easy-admin", "treetable", "iconPickerFa", "autocomplete"], function ($, ea) {
  2. var table = layui.table,
  3. treetable = layui.treetable,
  4. iconPickerFa = layui.iconPickerFa,
  5. autocomplete = layui.autocomplete;
  6. var init = {
  7. table_elem: '#currentTable',
  8. table_render_id: 'currentTableRenderId',
  9. index_url: 'system.menu/index',
  10. add_url: 'system.menu/add',
  11. delete_url: 'system.menu/delete',
  12. edit_url: 'system.menu/edit',
  13. modify_url: 'system.menu/modify',
  14. };
  15. var Controller = {
  16. index: function () {
  17. var renderTable = function () {
  18. layer.load(2);
  19. treetable.render({
  20. treeColIndex: 1,
  21. treeSpid: 0,
  22. homdPid: 99999999,
  23. treeIdName: 'id',
  24. treePidName: 'pid',
  25. url: ea.url(init.index_url),
  26. elem: init.table_elem,
  27. id: init.table_render_id,
  28. toolbar: '#toolbar',
  29. page: false,
  30. skin: 'line',
  31. // @todo 不直接使用ea.table.render(); 进行表格初始化, 需要使用 ea.table.formatCols(); 方法格式化`cols`列数据
  32. cols: ea.table.formatCols([[
  33. {type: 'checkbox'},
  34. {field: 'title', width: 250, title: '菜单名称', align: 'left'},
  35. {field: 'icon', width: 80, title: '图标', templet: ea.table.icon},
  36. {field: 'href', minWidth: 120, title: '菜单链接'},
  37. {
  38. field: 'is_home',
  39. width: 80,
  40. title: '类型',
  41. templet: function (d) {
  42. if (d.pid === 99999999) {
  43. return '<span class="layui-badge layui-bg-blue">首页</span>';
  44. }
  45. if (d.pid === 0) {
  46. return '<span class="layui-badge layui-bg-gray">模块</span>';
  47. } else {
  48. return '<span class="layui-badge-rim">菜单</span>';
  49. }
  50. }
  51. },
  52. {field: 'status', title: '状态', width: 85, templet: ea.table.switch},
  53. {field: 'sort', width: 80, title: '排序', edit: 'text'},
  54. {
  55. width: 200,
  56. title: '操作',
  57. templet: ea.table.tool,
  58. operat: [
  59. [{
  60. text: '添加下级',
  61. url: init.add_url,
  62. method: 'open',
  63. auth: 'add',
  64. class: 'layui-btn layui-btn-xs layui-btn-normal',
  65. extend: 'data-full="true"',
  66. }, {
  67. text: '编辑',
  68. url: init.edit_url,
  69. method: 'open',
  70. auth: 'edit',
  71. class: 'layui-btn layui-btn-xs layui-btn-success',
  72. extend: 'data-full="true"',
  73. }],
  74. 'delete'
  75. ]
  76. }
  77. ]], init),
  78. done: function () {
  79. layer.closeAll('loading');
  80. }
  81. });
  82. };
  83. renderTable();
  84. $('body').on('click', '[data-treetable-refresh]', function () {
  85. renderTable();
  86. });
  87. $('body').on('click', '[data-treetable-delete]', function () {
  88. var tableId = $(this).attr('data-treetable-delete'),
  89. url = $(this).attr('data-url');
  90. tableId = tableId || init.table_render_id;
  91. url = url != undefined ? ea.url(url) : window.location.href;
  92. var checkStatus = table.checkStatus(tableId),
  93. data = checkStatus.data;
  94. if (data.length <= 0) {
  95. ea.msg.error('请勾选需要删除的数据');
  96. return false;
  97. }
  98. var ids = [];
  99. $.each(data, function (i, v) {
  100. ids.push(v.id);
  101. });
  102. ea.msg.confirm('确定删除?', function () {
  103. ea.request.post({
  104. url: url,
  105. data: {
  106. id: ids
  107. },
  108. }, function (res) {
  109. ea.msg.success(res.msg, function () {
  110. renderTable();
  111. });
  112. });
  113. });
  114. return false;
  115. });
  116. ea.table.listenSwitch({filter: 'status', url: init.modify_url});
  117. ea.table.listenEdit(init, 'currentTable', init.table_render_id, true);
  118. ea.listen();
  119. },
  120. add: function () {
  121. iconPickerFa.render({
  122. elem: '#icon',
  123. url: PATH_CONFIG.iconLess,
  124. limit: 12,
  125. click: function (data) {
  126. $('#icon').val('fa ' + data.icon);
  127. },
  128. success: function (d) {
  129. console.log(d);
  130. }
  131. });
  132. autocomplete.render({
  133. elem: $('#href')[0],
  134. url: ea.url('system.menu/getMenuTips'),
  135. template_val: '{{d.node}}',
  136. template_txt: '{{d.node}} <span class=\'layui-badge layui-bg-gray\'>{{d.title}}</span>',
  137. onselect: function (resp) {
  138. }
  139. });
  140. ea.listen(function (data) {
  141. return data;
  142. }, function (res) {
  143. ea.msg.success(res.msg, function () {
  144. var index = parent.layer.getFrameIndex(window.name);
  145. parent.layer.close(index);
  146. parent.$('[data-treetable-refresh]').trigger("click");
  147. });
  148. });
  149. },
  150. edit: function () {
  151. iconPickerFa.render({
  152. elem: '#icon',
  153. url: PATH_CONFIG.iconLess,
  154. limit: 12,
  155. click: function (data) {
  156. $('#icon').val('fa ' + data.icon);
  157. },
  158. success: function (d) {
  159. console.log(d);
  160. }
  161. });
  162. autocomplete.render({
  163. elem: $('#href')[0],
  164. url: ea.url('system.menu/getMenuTips'),
  165. template_val: '{{d.node}}',
  166. template_txt: '{{d.node}} <span class=\'layui-badge layui-bg-gray\'>{{d.title}}</span>',
  167. onselect: function (resp) {
  168. }
  169. });
  170. ea.listen(function (data) {
  171. return data;
  172. }, function (res) {
  173. ea.msg.success(res.msg, function () {
  174. var index = parent.layer.getFrameIndex(window.name);
  175. parent.layer.close(index);
  176. parent.$('[data-treetable-refresh]').trigger("click");
  177. });
  178. });
  179. }
  180. };
  181. return Controller;
  182. });