index.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. <div id="main">
  2. <table id="tg_content"></table>
  3. <div id="tb_content">
  4. <a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="add_menu(1);return false">新增同级目录</a>
  5. <a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="add_menu();return false">新增子目录</a>
  6. <a href="#" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="edit_menu();return false">编辑</a>
  7. <a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="delete_menu();return false">删除</a>
  8. <a href="#" class="easyui-linkbutton" iconCls="icon-save" plain="true" onclick="save_menu();return false">保存</a>
  9. <a href="#" class="easyui-linkbutton" iconCls="icon-undo" plain="true" onclick="cancel_menu();return false">取消</a>
  10. <div class="right">
  11. <a href="#" onclick="expand_tree();return false;" iconCls="icon-add" class="easyui-linkbutton" plain="true">展开</a>
  12. <a href="#" onclick="collapse_tree();return false;" iconCls="icon-remove" class="easyui-linkbutton" plain="true">收起</a>
  13. <span>状态: </span>
  14. <input id="filter_status" />
  15. </div>
  16. </div>
  17. </div>
  18. <script type="text/javascript">
  19. var status_data = <?php echo json_encode($status); ?>;
  20. var jq_tg_content = $('#tg_content');
  21. var temp_id = 100000;
  22. var max_id = 100000;
  23. var max_id_decrese = 100000;
  24. var max_level = 3;
  25. var edit_row_id = '';
  26. var prevent_edit = 0;
  27. var w_width = $(window).width();
  28. var w_height = $(window).height();
  29. var jq_filter_status = $('#filter_status');
  30. var tree_status = 1;
  31. $(function(){
  32. jq_filter_status.combobox({
  33. editable: false,
  34. data: status_data,
  35. onSelect: function(){
  36. search_content();
  37. }
  38. });
  39. jq_tg_content.treegrid({
  40. height: w_height - 20,
  41. width: w_width - 25,
  42. title: '目录管理',
  43. idField: '_id',
  44. treeField: 'name',
  45. url: site_root + '/index.php?r=adminMenu/getRows',
  46. toolbar: '#tb_content',
  47. nowrap: false,
  48. fitColumns: true,
  49. singleSelect: true,
  50. queryParams:{},
  51. pagination: true,
  52. pageSize: 10,
  53. pageList: [10,20,50],
  54. onClickRow: function(row){
  55. if (edit_row_id != '' && edit_row_id != row._id){
  56. save_menu();
  57. }
  58. },
  59. onDblClickRow: function(row){
  60. var menu = $(this).treegrid('getSelected');
  61. if (menu && prevent_edit == 0){
  62. edit_menu();
  63. }
  64. },
  65. columns: [[
  66. {field:'name', title:'名称', width:100, editor:{type: 'validatebox', options:{required: true}}},
  67. {field:'url', title:'链接', width:100, editor:{type: 'validatebox', options:{}}},
  68. {field:'sort', title:'排序', width:100, editor:{type: 'numberbox', options:{required: true}}},
  69. {field:'status', title:'状态', width:50,
  70. formatter: function(value, row){
  71. if (value == 1){
  72. return '正常';
  73. } else {
  74. return '删除'
  75. }
  76. }
  77. }
  78. ]],
  79. onBeforeExpand: function(row){
  80. prevent_edit = 1;
  81. setTimeout(function(){
  82. prevent_edit = 0;
  83. }, 500);
  84. if (!row.hasOwnProperty('children') || row.children.length == 0){
  85. return false;
  86. }
  87. },
  88. onBeforeEdit: function(row){
  89. $(this).treegrid('addEditor', {field : 'status', editor : {type : 'checkbox', options: {on : 1, off : -1}}});
  90. var that = this;
  91. setTimeout(function(){
  92. var editors = $(that).treegrid('getEditors', row._id);
  93. var use_editors = {};
  94. for (var x in editors){
  95. if ($.inArray(editors[x]['field'], ['url', 'name', 'sort']) > -1){
  96. use_editors[editors[x]['field']] = editors[x];
  97. }
  98. }
  99. var roots = $(that).treegrid('getRoots');
  100. var sort = '';
  101. if (row.level == 1){
  102. sort = roots.length;
  103. } else { //答案
  104. var parent = $(that).treegrid('getParent', row._id);
  105. sort = parent.children.length;
  106. }
  107. if (use_editors['sort'].target.numberbox('getValue') == 0){
  108. use_editors['sort'].target.numberbox('setValue', sort);
  109. }
  110. for (x in use_editors){
  111. if (use_editors[x]['type'] != 'combobox'){
  112. use_editors[x].target.bind('keyup', function(event){
  113. if (event.keyCode == '13'){
  114. save_menu();
  115. }
  116. });
  117. }
  118. }
  119. }, 100);
  120. },
  121. onAfterEdit: function(row, changes){
  122. var act = '';
  123. if (row.id >= max_id){
  124. act = 'insertRow';
  125. } else {
  126. act = 'updateRow';
  127. }
  128. $.messager.progress();
  129. var that = this;
  130. $.ajax({
  131. type: 'post',
  132. url: site_root + '/index.php?r=adminMenu/' + act,
  133. dataType: 'json',
  134. data: row,
  135. success: function(data){
  136. $.messager.progress('close');
  137. if (data.success){
  138. edit_row_id = '';
  139. if (act == 'insertRow'){
  140. var old_row = $(that).treegrid('pop', row._id);
  141. old_row._id = data.data._id;
  142. old_row.id = -- max_id_decrese;
  143. $(that).treegrid('append', {parent: row.parent, data: [old_row]});
  144. $(that).treegrid('select', data.data._id);
  145. } else {
  146. $(that).treegrid('select', row._id);
  147. }
  148. var filter_status = jq_filter_status.combobox('getValue');
  149. if (filter_status < 10){
  150. if ((row.status != filter_status)){
  151. $(that).treegrid('remove', row._id);
  152. }
  153. }
  154. if (changes.hasOwnProperty('sort') && act == 'updateRow'){
  155. $(that).treegrid('reload');
  156. }
  157. $.messager.show({
  158. title: '提示',
  159. msg: data.message,
  160. timeout: 2500,
  161. showType: 'slide'
  162. });
  163. } else {
  164. edit_menu();
  165. $.messager.alert('提示', data.message, 'error');
  166. }
  167. }
  168. });
  169. },
  170. onLoadSuccess: function(row, data){
  171. if (data.hasOwnProperty('total')){
  172. edit_row_id = '';
  173. }
  174. var expand_ids = $(this).data('expand_ids');
  175. if (expand_ids != undefined){
  176. for (var i = 0;i < expand_ids.length;i ++){
  177. $(this).treegrid('expand', expand_ids[i]);
  178. }
  179. }
  180. },
  181. onExpand: function(row){
  182. var expand_ids = $(this).data('expand_ids');
  183. if (expand_ids == undefined){
  184. expand_ids = [];
  185. }
  186. if ($.inArray(row._id, expand_ids) == -1){
  187. expand_ids.push(row._id);
  188. }
  189. $(this).data('expand_ids', expand_ids);
  190. },
  191. onCollapse: function(row){
  192. var expand_ids = $(this).data('expand_ids');
  193. if (expand_ids == undefined){
  194. expand_ids = [];
  195. }
  196. if ($.inArray(row._id, expand_ids) > -1){
  197. expand_ids.splice($.inArray(row._id, expand_ids), 1);
  198. }
  199. $(this).data('expand_ids', expand_ids);
  200. }
  201. });
  202. });
  203. //新增目录
  204. function add_menu(){
  205. if (edit_row_id != ''){
  206. return false;
  207. }
  208. var add_folder = arguments[0] ? arguments[0] : '';
  209. var row = jq_tg_content.treegrid('getSelected');
  210. var parent = '';
  211. var level = 1;
  212. if (add_folder == ''){
  213. if (row){
  214. if (row.level < max_level){
  215. level = row.level + 1;
  216. parent = row._id;
  217. jq_tg_content.treegrid('expand', row._id);
  218. } else {
  219. parent = row.parent;
  220. level = max_level;
  221. }
  222. } else {
  223. $.messager.alert('提示', '请选择一个目录', 'warning');
  224. return false;
  225. }
  226. } else {
  227. if (row){
  228. level = row.level;
  229. parent = row.parent;
  230. jq_tg_content.treegrid('expand', row.parent);
  231. }
  232. }
  233. temp_id ++;
  234. var state = 'closed';
  235. if (level < max_level){
  236. state = 'closed';
  237. }
  238. var new_id = 'new_menu';
  239. jq_tg_content.treegrid('append', {
  240. parent: parent,
  241. data: [{
  242. _id: new_id,
  243. id: temp_id,
  244. parent: parent,
  245. name: '',
  246. status: 1,
  247. level: level,
  248. state: state,
  249. sort: 0,
  250. children: []
  251. }]
  252. }).treegrid('unselectAll').treegrid('select', new_id);
  253. edit_menu();
  254. }
  255. //编辑目录
  256. function edit_menu(){
  257. if (edit_row_id != ''){
  258. jq_tg_content.treegrid('select', edit_row_id);
  259. }
  260. var row = jq_tg_content.treegrid('getSelected');
  261. if (row){
  262. edit_row_id = row._id;
  263. jq_tg_content.treegrid('beginEdit', row._id);
  264. } else {
  265. $.messager.alert('提示', '请选择一个目录', 'warning');
  266. return false;
  267. }
  268. }
  269. //保存目录
  270. function save_menu(){
  271. var row = jq_tg_content.treegrid('find', edit_row_id);
  272. if (row){
  273. jq_tg_content.treegrid('endEdit', row._id);
  274. }
  275. }
  276. //取消编辑
  277. function cancel_menu(){
  278. var row = jq_tg_content.treegrid('find', edit_row_id);
  279. if (row){
  280. if (row.id >= max_id){
  281. jq_tg_content.treegrid('remove', row._id);
  282. } else {
  283. jq_tg_content.treegrid('cancelEdit', row._id);
  284. }
  285. }
  286. edit_row_id = '';
  287. }
  288. //删除目录
  289. function delete_menu(){
  290. var params = {};
  291. if (edit_row_id != ''){
  292. var row = jq_tg_content.treegrid('find', edit_row_id);
  293. if (row.id >= max_id){
  294. jq_tg_content.treegrid('remove', edit_row_id);
  295. edit_row_id = '';
  296. return false;
  297. }
  298. }
  299. var row = jq_tg_content.treegrid('getSelected');
  300. if (!row){
  301. $.messager.alert('提示', '请选择需要删除的目录', 'warning');
  302. return false;
  303. }
  304. params._id = row._id;
  305. var confirm_note = '你确定要删除该目录吗?';
  306. if (row.children){
  307. if (row.children.length > 0){
  308. confirm_note += "<div style='color:red;margin-top:4px;'>该目录下面还有子目录,它们也会一起被删除!</div>";
  309. }
  310. }
  311. $.messager.confirm('提示', confirm_note, function(r){
  312. if (r){
  313. $.messager.progress();
  314. $.ajax({
  315. type: 'post',
  316. url : site_root + '/index.php?r=adminMenu/deleteRow',
  317. dataType: 'json',
  318. data: params,
  319. error: function(){
  320. $.messager.progress('close');
  321. },
  322. success: function(data){
  323. $.messager.progress('close');
  324. if (data.success){
  325. jq_tg_content.treegrid('remove', row._id);
  326. $.messager.show({
  327. title: '提示',
  328. msg: data.message,
  329. timeout: 2500,
  330. showType: 'slide'
  331. });
  332. } else {
  333. $.messager.alert('提示', data.message, 'error');
  334. }
  335. }
  336. });
  337. }
  338. });
  339. }
  340. //筛选
  341. function search_content(){
  342. var filter_status = jq_filter_status.combobox('getValue');
  343. jq_tg_content.treegrid({
  344. queryParams: {filter_status : filter_status},
  345. pageNumber: 1
  346. })
  347. }
  348. //展开tree
  349. function expand_tree(){
  350. jq_tg_content.treegrid('expandAll');
  351. tree_status = 1;
  352. }
  353. //闭合tree
  354. function collapse_tree(){
  355. jq_tg_content.treegrid('collapseAll');
  356. tree_status = 0;
  357. }
  358. </script>