group.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. define(['jquery', 'table', 'form', 'jstree'], function($, Table, Form, undefined) {
  2. //读取选中的条目
  3. $.jstree.core.prototype.get_all_checked = function(full) {
  4. var obj = this.get_selected(),
  5. i, j;
  6. for (i = 0, j = obj.length; i < j; i++) {
  7. obj = obj.concat(this.get_node(obj[i]).parents);
  8. }
  9. obj = $.grep(obj, function(v, i, a) {
  10. return v != '#';
  11. });
  12. obj = obj.filter(function(itm, i, a) {
  13. return i == a.indexOf(itm);
  14. });
  15. return full ? $.map(obj, $.proxy(function(i) {
  16. return this.get_node(i);
  17. }, this)) : obj;
  18. };
  19. var Controller = {
  20. index: function() {
  21. Table.init = {
  22. table_elem: '#currentTable',
  23. table_render_id: 'currentTable',
  24. add_url: "auth.group/add",
  25. edit_url: "auth.group/edit",
  26. delete_url: "auth.group/del",
  27. };
  28. Table.render({
  29. init: Table.init,
  30. toolbar: ['refresh', 'add'],
  31. url: 'auth.group/index',
  32. search: false,
  33. cols: [
  34. [
  35. { field: 'id', width: 80, title: 'ID' },
  36. { field: 'title', width: 200, align: 'left', title: '权限组',templet: function(d){
  37. return layui.util.escape(d.title.toString()).replace(/(&|&amp;)nbsp;/g, '&nbsp;');
  38. }},
  39. { field: 'description', minWidth: 150, title: '描述' },
  40. { field: 'status', width: 80, title: '状态', templet: Table.formatter.status, selectList: { 0: '禁用', 1: '正常' }, search: false },
  41. {
  42. width: 100,
  43. title: '操作',
  44. templet: function(d) {
  45. if (Config.admin.group_ids.indexOf(parseInt(d.id)) > -1) {
  46. return '<a class="layui-btn layui-btn-xs layui-btn-danger layui-btn-disabled">不可操作</a>';
  47. } else {
  48. return Table.formatter.tool.call(this, d);
  49. }
  50. },
  51. operat: ['edit', 'delete']
  52. }
  53. ]
  54. ],
  55. });
  56. Table.api.bindevent();
  57. },
  58. add: function() {
  59. Controller.api.bindevent();
  60. },
  61. edit: function() {
  62. Controller.api.bindevent();
  63. },
  64. api: {
  65. bindevent: function() {
  66. Form.api.bindevent($("form.layui-form"), null, null, function() {
  67. if ($("#treeview").length > 0) {
  68. var r = $("#treeview").jstree("get_all_checked");
  69. $("input[name='row[rules]']").val(r.join(','));
  70. }
  71. return true;
  72. });
  73. //渲染权限节点树
  74. //变更级别后需要重建节点树
  75. layui.form.on('select(parentid)', function(data){
  76. var parentid = $(data.elem).data("parentid");
  77. var id = $(data.elem).data("id");
  78. var val = data.value;
  79. if (val == id) {
  80. $("option[value='" + parentid + "']", this).prop("selected", true).change();
  81. Backend.api.toastr.error('父级不能是它自己');
  82. return false;
  83. }
  84. $.ajax({
  85. url: "auth.group/roletree",
  86. type: 'post',
  87. dataType: 'json',
  88. data: { id: id, parentid: val },
  89. success: function(ret) {
  90. if (ret.hasOwnProperty("code")) {
  91. var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : "";
  92. if (ret.code === 1) {
  93. //销毁已有的节点树
  94. $("#treeview").jstree("destroy");
  95. Controller.api.rendertree(data);
  96. } else {
  97. Backend.api.toastr.error(ret.msg);
  98. }
  99. }
  100. },
  101. error: function(e) {
  102. Backend.api.toastr.error(e.message);
  103. }
  104. });
  105. });
  106. //全选和展开
  107. layui.form.on('checkbox(checkall)', function(data){
  108. $("#treeview").jstree($(this).prop("checked") ? "check_all" : "uncheck_all");
  109. });
  110. layui.form.on('checkbox(expandall)', function(data){
  111. $("#treeview").jstree($(this).prop("checked") ? "open_all" : "close_all");
  112. });
  113. $("select[name='row[parentid]']").siblings("div.layui-form-select").find("dd.layui-this").click();
  114. },
  115. rendertree: function(content) {
  116. $("#treeview")
  117. .on('redraw.jstree', function(e) {
  118. $(".layer-footer").attr("domrefresh", Math.random());
  119. })
  120. .jstree({
  121. "themes": { "stripes": true },
  122. "checkbox": {
  123. "keep_selected_style": false,
  124. },
  125. "types": {
  126. "root": {
  127. "icon": "fa fa-folder-open",
  128. },
  129. "menu": {
  130. "icon": "fa fa-folder-open",
  131. },
  132. "file": {
  133. "icon": "fa fa-file-o",
  134. }
  135. },
  136. "plugins": ["checkbox", "types"],
  137. "core": {
  138. 'check_callback': true,
  139. "data": content
  140. }
  141. });
  142. }
  143. }
  144. };
  145. return Controller;
  146. });