index.html 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>layui</title>
  6. <meta name="renderer" content="webkit">
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  9. <link rel="stylesheet" href="__PUBLIC__/layui/css/layui.css" media="all">
  10. <link rel="stylesheet" href="__PUBLIC__/font-awesome/css/font-awesome.min.css" media="all"/>
  11. <link rel="stylesheet" href="__CSS__/admin.css" media="all">
  12. </head>
  13. <body style="padding:10px;">
  14. <div class="tplay-body-div">
  15. <div class="layui-tab">
  16. <ul class="layui-tab-title">
  17. <li class="layui-this">系统菜单</li>
  18. <li><a href="{:url('admin/menu/publish')}" class="a_menu">添加新菜单</a></li>
  19. </ul>
  20. </div>
  21. <div id="toolbar" style="display: none">
  22. <button class="layui-btn layui-btn-sm layui-btn-primary" id="open-all"><i
  23. class="layui-icon layui-icon-triangle-d"></i>展开
  24. </button>
  25. <button class="layui-btn layui-btn-sm layui-btn-primary" id="close-all"><i
  26. class="layui-icon layui-icon-triangle-r"></i>收缩
  27. </button>
  28. <button class="layui-btn layui-btn-sm" onclick="batchAdd()">批量添加</button>
  29. </div>
  30. <form class="layui-form" id="admin">
  31. <table class="layui-table layui-form" id="tree-table" lay-size="sm"></table>
  32. <button class="layui-btn layui-btn-sm" lay-submit lay-filter="admin" style="display: none" id="sort">更新排序
  33. </button>
  34. </form>
  35. {include file="public/foot"}
  36. <script type="text/javascript">
  37. layui.extend({
  38. treeTable: 'treeTable/js/treeTable'
  39. }).use(['treeTable', 'layer', 'form'], function () {
  40. var treeTable = layui.treeTable,
  41. form = layui.form,
  42. layer = layui.layer;
  43. //第一个实例
  44. var re = treeTable.render({
  45. elem: '#tree-table',
  46. url: '{:url("index")}', //数据接口
  47. icon_key: 'name',
  48. cols: [
  49. {
  50. key: 'sort', title: '排序', width: '40px', template: function (row) {
  51. return '<input type="text" name="orders[]" value="' + row.orders + '" style="width: 20px;" class="orders"><input type="hidden" name="id[]" value="' + row.id + '">';
  52. }
  53. },
  54. {key: 'id', title: 'ID', width: '40px'},
  55. {key: 'name', title: '名称', width: '250px'},
  56. {key: 'controller', title: '控制器', width: '100px'},
  57. {key: 'function', title: '方法', width: '100px'},
  58. {key: 'description', title: '备注', width: '100px'},
  59. {key: 'type_text', title: '状态', width: '100px'},
  60. {key: 'is_display_text', title: '类型', width: '120px'},
  61. {
  62. title: '操作', align: 'center', width: '120px',
  63. template: function (item) {
  64. var html = '<div class="layui-btn-group">';
  65. html += '<a href="publish?id=' + item.id + '" class="layui-btn layui-btn-xs a_menu layui-btn-primary" style="margin-right: 0;font-size:12px;"><i class="layui-icon"></i></a>';
  66. html += '<a href="publish?pid=' + item.id + '" class="layui-btn layui-btn-xs a_menu layui-btn-primary" style="margin-right: 0;font-size:12px;"><i class="layui-icon"></i></a>';
  67. html += '<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-primary delete" id="' + item.id + '" style="margin-right: 0;font-size:12px;"><i class="layui-icon"></i></a>';
  68. html += '</div>';
  69. return html;
  70. }
  71. }
  72. ],
  73. end: function (e) {
  74. form.render();
  75. if (e.data.length > 0) {
  76. $('#toolbar').show();
  77. $('#sort').show();
  78. }
  79. // 全部展开
  80. $('#open-all').click(function () {
  81. treeTable.openAll(re);
  82. })
  83. // 全部关闭
  84. $('#close-all').click(function () {
  85. treeTable.closeAll(re);
  86. })
  87. del();
  88. },
  89. });
  90. });
  91. </script>
  92. <form id="myForm" style="display:none;margin: 10px 30px;" class="layui-form alert-form">
  93. {empty name="noInsertRoutes"}当前没有路由可添加{/empty}
  94. {foreach name="noInsertRoutes" item="noInsertRoute" key="k"}
  95. <div class="layui-form-item">
  96. <div class="layui-inline">
  97. <div class="layui-input-inline">
  98. <select name="pid[{$k}]" lay-search="" lay-verify="required">
  99. <option value="">选择上级节点</option>
  100. <option value="0">作为顶级菜单</option>
  101. {volist name="$menus" id="vo"}
  102. <option value="{$vo.id}">{$vo.str}{$vo.name}</option>
  103. {/volist}
  104. </select>
  105. </div>
  106. <div class="layui-input-inline" style="width: 150px;">
  107. <input type="text" name="name[{$k}]" placeholder="节点名称" autocomplete="off" class="layui-input">
  108. </div>
  109. <div class="layui-input-inline" style="width: 100px;">
  110. <input type="text" name="module[{$k}]" placeholder="模块名" value="{$noInsertRoute[0]}" autocomplete="off" class="layui-input">
  111. </div>
  112. <div class="layui-input-inline" style="width: 100px;">
  113. <input type="text" name="controller[{$k}]" placeholder="控制器名" value="{$noInsertRoute[1]}" autocomplete="off" class="layui-input">
  114. </div>
  115. <div class="layui-input-inline" style="width: 100px;">
  116. <input type="text" name="function[{$k}]" placeholder="方法名" value="{$noInsertRoute[2]}" autocomplete="off" class="layui-input">
  117. </div>
  118. <div class="layui-input-inline" style="width: 140px;">
  119. <select name="is_display[{$k}]">
  120. <option value="2">只做为操作节点</option>
  121. <option value="1">显示在左侧菜单</option>
  122. </select>
  123. </div>
  124. <div class="layui-input-inline" style="width: 100px;">
  125. <select name="type[{$k}]">
  126. <option value="1">权限节点</option>
  127. <option value="2">普通节点</option>
  128. </select>
  129. </div>
  130. </div>
  131. </div>
  132. {/foreach}
  133. </form>
  134. <script>
  135. function batchAdd() {
  136. var fromobj = $('#myForm');
  137. if(fromobj.text().trim() == '当前没有路由可添加'){
  138. layer.msg('当前没有路由可添加');
  139. return;
  140. }
  141. //弹出框
  142. layer.open({
  143. type: 1,
  144. title: '未添加的路由 (只有填上节点名称的才会添加路由)',
  145. area: ['1100px', '500px'],
  146. id: 'layerDemo', //防止重复弹出
  147. content: fromobj,
  148. btn: ['批量添加', '关闭'],
  149. btnAlign: 'c', //按钮居中
  150. yes: function (index, layero) {
  151. var post_data = fromobj.serializeJson();
  152. $.post("{:url('admin/menu/batchAdd')}", post_data, function (json) {
  153. layer.msg(json.msg);
  154. if (json.code > 0) {
  155. layer.close(index);
  156. location.reload()
  157. }
  158. });
  159. },
  160. btn2: function (index) {
  161. },
  162. zIndex: 999 //重点1
  163. });
  164. }
  165. </script>
  166. <script>
  167. function del() {
  168. $('.delete').click(function () {
  169. var id = $(this).attr('id');
  170. layer.confirm('确定要删除?', function (index) {
  171. $.ajax({
  172. url: "{:url('admin/menu/delete')}",
  173. data: {id: id},
  174. dataType: 'json',
  175. success: function (res) {
  176. layer.msg(res.msg);
  177. if (res.code == 1) {
  178. setTimeout(function () {
  179. location.href = res.url;
  180. }, 1500)
  181. }
  182. }
  183. })
  184. })
  185. })
  186. }
  187. //排序
  188. layui.use(['layer', 'form'], function () {
  189. var layer = layui.layer,
  190. $ = layui.jquery,
  191. form = layui.form;
  192. $(window).on('load', function () {
  193. form.on('submit(admin)', function (data) {
  194. $.ajax({
  195. url: "{:url('admin/menu/orders')}",
  196. data: $('#admin').serialize(),
  197. type: 'post',
  198. dataType: 'json',
  199. async: false,
  200. success: function (res) {
  201. if (res.code == 1) {
  202. layer.alert(res.msg, function (index) {
  203. location.href = res.url;
  204. })
  205. } else {
  206. layer.msg(res.msg);
  207. }
  208. }
  209. })
  210. return false;
  211. });
  212. });
  213. });
  214. </script>
  215. </div>
  216. </body>
  217. </html>