menu_form.html 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>菜单表单</title>
  7. <link rel="stylesheet" href="../../lib/layui/css/layui.css">
  8. <style>
  9. body { padding: 20px; }
  10. .required { color: #ff5722; }
  11. .layui-icon-list { font-size: 20px; }
  12. .icon-item { float: left; margin: 5px; cursor: pointer; padding: 5px; border: 1px solid #e6e6e6; border-radius: 4px; }
  13. .icon-item:hover { border-color: #667eea; background: #f5f5f5; }
  14. .icon-item.selected { border-color: #667eea; background: rgba(102, 126, 234, 0.1); }
  15. </style>
  16. </head>
  17. <body>
  18. <form class="layui-form" lay-filter="menuForm" id="menuForm">
  19. <input type="hidden" name="id" id="menuId">
  20. <div class="layui-form-item">
  21. <label class="layui-form-label"><span class="required">*</span>菜单类型</label>
  22. <div class="layui-input-block">
  23. <input type="radio" name="menuType" value="M" title="目录" checked>
  24. <input type="radio" name="menuType" value="C" title="菜单">
  25. <input type="radio" name="menuType" value="F" title="按钮">
  26. </div>
  27. </div>
  28. <div class="layui-form-item">
  29. <label class="layui-form-label"><span class="required">*</span>菜单名称</label>
  30. <div class="layui-input-block">
  31. <input type="text" name="menuName" lay-verify="required" placeholder="请输入菜单名称" class="layui-input" style="width: 300px;">
  32. </div>
  33. </div>
  34. <div class="layui-form-item">
  35. <label class="layui-form-label"><span class="required">*</span>上级菜单</label>
  36. <div class="layui-input-block">
  37. <select name="parentId" id="parentSelect" class="layui-select" style="width: 300px;">
  38. <option value="0">顶级菜单</option>
  39. </select>
  40. </div>
  41. </div>
  42. <div class="layui-form-item">
  43. <label class="layui-form-label">路由地址</label>
  44. <div class="layui-input-block">
  45. <input type="text" name="path" placeholder="请输入路由地址" class="layui-input" style="width: 300px;">
  46. </div>
  47. </div>
  48. <div class="layui-form-item">
  49. <label class="layui-form-label">组件路径</label>
  50. <div class="layui-input-block">
  51. <input type="text" name="component" placeholder="如: user/user_list.html" class="layui-input" style="width: 300px;">
  52. </div>
  53. </div>
  54. <div class="layui-form-item">
  55. <label class="layui-form-label">权限标识</label>
  56. <div class="layui-input-block">
  57. <input type="text" name="perms" placeholder="如: system:user:list" class="layui-input" style="width: 300px;">
  58. </div>
  59. </div>
  60. <div class="layui-form-item">
  61. <label class="layui-form-label">菜单图标</label>
  62. <div class="layui-input-block">
  63. <input type="text" name="icon" id="iconInput" placeholder="选择图标" class="layui-input" style="width: 200px;" readonly>
  64. <button type="button" class="layui-btn layui-btn-primary" id="selectIcon">选择</button>
  65. <i class="layui-icon" id="iconPreview" style="margin-left: 10px; font-size: 24px;"></i>
  66. </div>
  67. </div>
  68. <div class="layui-form-item">
  69. <label class="layui-form-label">排序</label>
  70. <div class="layui-input-block">
  71. <input type="number" name="sort" value="0" class="layui-input" style="width: 150px;">
  72. </div>
  73. </div>
  74. <div class="layui-form-item">
  75. <label class="layui-form-label">状态</label>
  76. <div class="layui-input-block">
  77. <input type="radio" name="status" value="1" title="正常" checked>
  78. <input type="radio" name="status" value="0" title="停用">
  79. </div>
  80. </div>
  81. <div class="layui-form-item">
  82. <label class="layui-form-label">备注</label>
  83. <div class="layui-input-block">
  84. <textarea name="remark" placeholder="请输入备注" class="layui-textarea" style="width: 350px; height: 80px;"></textarea>
  85. </div>
  86. </div>
  87. <div class="layui-form-item">
  88. <div class="layui-input-block">
  89. <button type="submit" class="layui-btn" lay-submit lay-filter="submitForm">提交</button>
  90. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  91. </div>
  92. </div>
  93. </form>
  94. <script src="../../lib/layui/layui.js"></script>
  95. <script src="../../js/config.js"></script>
  96. <script src="../../js/common.js"></script>
  97. <script>
  98. layui.use(['form', 'layer'], function() {
  99. var form = layui.form;
  100. var layer = layui.layer;
  101. var id = Common.getQueryString('id');
  102. var isEdit = !!id;
  103. // 加载菜单树
  104. loadMenuTree();
  105. if (isEdit) {
  106. Common.get(Config.api.menu.getInfo + '/' + id, function(res) {
  107. if (res.code === 200) {
  108. var data = res.data;
  109. form.val('menuForm', data);
  110. if (data.icon) {
  111. $('#iconInput').val(data.icon);
  112. $('#iconPreview').addClass(data.icon);
  113. }
  114. }
  115. });
  116. }
  117. function loadMenuTree() {
  118. Common.get(Config.api.menu.list, function(res) {
  119. if (res.code === 200) {
  120. var menus = res.data || [];
  121. var html = '<option value="0">顶级菜单</option>';
  122. menus.forEach(function(menu) {
  123. if (menu.id !== id) {
  124. html += '<option value="' + menu.id + '">' + menu.menuName + '</option>';
  125. }
  126. });
  127. $('#parentSelect').html(html);
  128. form.render('select');
  129. }
  130. });
  131. }
  132. // 图标选择
  133. $('#selectIcon').click(function() {
  134. var icons = [
  135. 'layui-icon-home', 'layui-icon-user', 'layui-icon-set', 'layui-icon-group',
  136. 'layui-icon-friends', 'layui-icon-app', 'layui-icon-admin', 'layui-icon-file',
  137. 'layui-icon-find-fill', 'layui-icon-set-fill', 'layui-icon-util', 'layui-icon-search',
  138. 'layui-icon-set', 'layui-icon-chart', 'layui-icon-chart-screen', 'layui-icon-rate',
  139. 'layui-icon-log', 'layui-icon-note', 'layui-icon-list', 'layui-icon-table',
  140. 'layui-icon-form', 'layui-icon-upload', 'layui-icon-upload-circle', 'layui-icon-download-circle',
  141. 'layui-icon-wulian', 'layui-icon-404', 'layui-icon-refresh', 'layui-icon-refresh-1',
  142. 'layui-icon-circle', 'layui-icon EdmondSans', 'layui-icon-snowflake', 'layui-icon-edit'
  143. ];
  144. var html = '<div style="padding:10px; max-height:300px; overflow-y:auto;">';
  145. icons.forEach(function(icon) {
  146. html += '<div class="icon-item" data-icon="' + icon + '"><i class="layui-icon ' + icon + '"></i></div>';
  147. });
  148. html += '</div>';
  149. layer.open({
  150. type: 1,
  151. title: '选择图标',
  152. area: ['400px', '350px'],
  153. content: html
  154. });
  155. });
  156. $(document).on('click', '.icon-item', function() {
  157. var icon = $(this).data('icon');
  158. $('#iconInput').val(icon);
  159. $('#iconPreview').attr('class', 'layui-icon ' + icon);
  160. layer.closeAll();
  161. });
  162. form.on('submit(submitForm)', function(data) {
  163. Common.ajax({
  164. url: isEdit ? Config.api.menu.update : Config.api.menu.save,
  165. type: isEdit ? 'PUT' : 'POST',
  166. data: data.field,
  167. success: function(res) {
  168. Common.success(isEdit ? '修改成功' : '添加成功', function() {
  169. var index = parent.layer.getFrameIndex(window.name);
  170. parent.layer.close(index);
  171. parent.table.reload('tableList');
  172. });
  173. }
  174. });
  175. return false;
  176. });
  177. });
  178. </script>
  179. </body>
  180. </html>