PageRenderTime 49ms CodeModel.GetById 8ms RepoModel.GetById 0ms app.codeStats 0ms

/upload/template/bbs/admin/setforum_run.htm

https://gitlab.com/wuhang2003/phpwind
HTML | 403 lines | 315 code | 69 blank | 19 comment | 0 complexity | 07ab96e017ca01c4fd2b2497a02cfdea MD5 | raw file
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <template source='TPL:admin.common.head' />
  5. </head>
  6. <body>
  7. <div class="wrap">
  8. <div class="nav">
  9. <ul class="cc">
  10. <li class="current"><a href="{@url:bbs/setforum/run}">版块管理</a></li>
  11. <li><a href="{@url:bbs/setforum/unite}">版块合并</a></li>
  12. <!-- <li><a href="{@url:bbs/setforum/baseinfo}">基本信息</a></li>
  13. <li><a href="{@url:bbs/setforum/extinfo}">功能设置</a></li>
  14. <li><a href="{@url:bbs/setforum/classif}">主题分类</a></li>
  15. <li><a href="{@url:bbs/setforum/permissions}">权限相关</a></li>
  16. <li><a href="{@url:bbs/setforum/credits}">积分相关</a></li> -->
  17. </ul>
  18. </div>
  19. <div class="h_a">搜索</div>
  20. <div class="table_full">
  21. <form id="J_forum_search_form" method="post" action="{@url:bbs/setforum/searchforum}">
  22. <table width="100%">
  23. <tr>
  24. <td>
  25. <div class="fl">
  26. <div id="J_search_suggestion" class="forum_search_pop" style="display:none;margin-top:25px;"></div>
  27. </div>
  28. <input id="J_search_input" class="input length_3 mr10" name="keyword" autoComplete="off" type="text"><button id="J_forum_search" class="btn btn_submit" type="submit">搜索</button></td>
  29. </tr>
  30. </table>
  31. </form>
  32. </div>
  33. <form class="J_ajaxForm" data-role="list" action="{@url:bbs/setforum/dorun}" method="post">
  34. <div class="mb10">
  35. <a href="#" id="J_start_all" class="mr5">全部展开</a><span class="mr5 gray">|</span><a id="J_away_all" href="">全部收起</a>
  36. </div>
  37. <div class="table_list">
  38. <table width="100%" id="J_table_list" style="table-layout:fixed;">
  39. <colgroup>
  40. <col width="30">
  41. <col width="400">
  42. <col width="60">
  43. <col width="210">
  44. <col>
  45. </colgroup>
  46. <thead>
  47. <tr>
  48. <td></td>
  49. <td><span class="mr5">[顺序]</span>版块名称双击版块名称可编辑版块标题</td>
  50. <td class="tar">fid</td>
  51. <td>版主</td>
  52. <td>操作</td>
  53. </tr>
  54. </thead>
  55. <!--#
  56. $lang = array(
  57. 'forum' => '',
  58. 'sub' => '<span class="plus_icon plus_none_icon"></span>',
  59. 'sub2' => '<span class="plus_icon plus_none_icon"></span><span class="plus_icon plus_none_icon"></span>'
  60. );
  61. #-->
  62. <!--# foreach($catedb as $key => $cate) { #-->
  63. <!--# $cateClass = $forumList[$cate['fid']] ? ' away_icon' : ' zero_icon';#-->
  64. <tbody>
  65. <tr id="J_forum_tr_{$cate['fid']}">
  66. <td><span data-id="{$cate['fid']}" class="J_start_icon{$cateClass}" title="双击进行修改"></span></td>
  67. <td><input type="text" class="input mr5" name="vieworder[{$cate['fid']}]" value="{$cate['vieworder']}" style="width:20px;"><span class="mr10 J_forum_names" data-id="{$cate['fid']}">{@$cate['name']|html}</span><a style="display:none" data-id="{$cate['fid']}" data-type="forum_child" data-forumlevel="2" data-html="tbody" href="#" class="link_add J_addChild">添加新版块</a></td>
  68. <td class="tar">{$cate['fid']}</td>
  69. <td><input type="text" class="input length_3" name="manager[{$cate['fid']}]" value="{@trim($cate['manager'], ',')}"></td>
  70. <td><a href="{@url:bbs/cate/run?fid=$cate['fid']|pw}" target="_blank" class="mr5">[访问]</a><a href="{@url:bbs/setforum/edit?fid=$cate['fid']}" class="mr5">[编辑]</a><a href="{@url:bbs/setforum/deleteforum}" class="mr5 J_ajax_del" data-pdata="{'fid': '{$cate['fid']}'}">[删除]</a></td>
  71. </tr>
  72. </tbody>
  73. <!--# if ($forumList[$cate['fid']]) { #-->
  74. <tbody id="J_table_list_{$cate['fid']}">
  75. <!--# foreach ($forumList[$cate['fid']] as $key => $forum) { #-->
  76. <tr id="J_forum_tr_{$forum['fid']}">
  77. <td></td>
  78. <td>{@$lang[$forum['type']]|html}<span class="plus_icon<!--# if ($forum['isEnd']) echo ' plus_end_icon'; #-->"></span><input type="text" class="input mr5" name="vieworder[{$forum['fid']}]" value="{$forum['vieworder']}" style="width:20px;"><span class="mr10 J_forum_names" data-id="{$forum['fid']}">{@$forum['name']|html}</span><!--# if ($forum['type'] == 'forum') { #--><a style="display:none" data-id="{$forum['fid']}" data-type="forum_child" data-forumlevel="3" data-html="tr" href="#" class="link_add J_addChild">添加二级版块</a><!--# } elseif ($forum['type'] == 'sub') { #--><a style="display:none" data-id="{$forum['fid']}" data-type="forum_child" data-forumlevel="4" data-html="tr" href="#" class="link_add J_addChild">添加三级版块</a><!--# } #--></td>
  79. <td class="tar">{$forum['fid']}</td>
  80. <td><input type="text" class="input length_3" name="manager[{$forum['fid']}]" value="{@trim($forum['manager'], ',')}"></td>
  81. <td><a href="{@url:bbs/thread/run?fid=$forum['fid']|pw}" target="_blank" class="mr5">[访问]</a><a href="{@url:bbs/setforum/edit?fid=$forum['fid']}" class="mr5">[编辑]</a><a href="{@url:bbs/setforum/deleteforum}" class="mr5 J_ajax_del" data-pdata="{'fid': '{$forum['fid']}'}">[删除]</a></td>
  82. </tr>
  83. <!--# } #-->
  84. </tbody>
  85. <!--# } #-->
  86. <!--# } #-->
  87. </table>
  88. <table width="100%">
  89. <tr><td colspan="5" style="padding-left:38px;"><a id="J_add_root" data-type="forum_root" data-html="tbody" href="" class="link_add">添加新分类</a></td></tr>
  90. </table>
  91. </div>
  92. <div class="btn_wrap">
  93. <div class="btn_wrap_pd">
  94. <button type="submit" class="btn btn_submit J_ajax_submit_btn">提交</button>
  95. </div>
  96. </div>
  97. </form>
  98. </div>
  99. <template source='TPL:admin.common.footer' />
  100. <script>
  101. /*
  102. root_tr_html 为“添加新分类”html;
  103. child_tr_html 为“添加四级版块”html;
  104. 删除未保存子版块时不调用forumTree_table.js的公共方法,因为设置子版的关联删除,所以单独写在本页面,"J_new_forum_del"类调用。
  105. */
  106. var root_tr_html = '<tr>\
  107. <td><span class="zero_icon mr10"></span></td>\
  108. <td>\
  109. <input type="text" style="width:20px;" value="" name="new_vieworder[0][]" class="input mr5">\
  110. <input name="new_forumname[0][]" type="text" class="input mr5" value="">\
  111. <input type="hidden" value="NEW_ID_" name="tempid[0][]">\
  112. <a style="display:none" data-nameid="NEW_ID_" class="link_add J_addChild" href="#" data-html="tbody" data-type="forum_child" data-id="temp_root_" data-forumlevel="2">添加新版块</a>\
  113. </td>\
  114. <td class="tar"></td>\
  115. <td><input type="text" name="new_manager[0][]" class="input length_3"></td>\
  116. <td><a class="mr5 J_newRow_del" href="#">[删除]</a></td>\
  117. </tr>';
  118. //返回二~四级版块添加的html
  119. function forumChild(forum_level, a_id, name_id){
  120. var forum_text, plus_none_icon_arr = [], temp_name = 'new_', temp_id ='id_';
  121. if (forum_level === 2) {
  122. forum_text = '添加二级版块';
  123. } else if (forum_level === 3) {
  124. forum_text = '添加三级版块';
  125. } else {
  126. forum_text = '';
  127. }
  128. //不同级别html差异
  129. for (var i=2; i < forum_level; i++){
  130. plus_none_icon_arr.push('<span class="plus_icon plus_none_icon"></span>');
  131. };
  132. //name_id值为添加按钮的data-nameid属性,表示父版未保存
  133. if(name_id) {
  134. temp_name = 'temp_';
  135. temp_id = name_id; //未保存父版的隐藏input的value值
  136. }
  137. return '<tr data-del_level="'+ forum_level +'"><td></td>\
  138. <td>'+ plus_none_icon_arr.join('') +'\
  139. <span class="plus_icon plus_end_icon"></span>\
  140. <input type="text" style="width:20px;" value="" name="'+ temp_name +'vieworder['+ temp_id +'][]" class="input mr5">\
  141. <input name="'+ temp_name +'forumname['+ temp_id +'][]" type="text" class="input mr5" value="">\
  142. <input type="hidden" value="NEW_ID_" name="tempid['+ temp_id +'][]">\
  143. <a style="display:none" data-nameid="'+ a_id +'" class="link_add J_addChild" href="#" data-id="id_" data-html="tr" data-type="forum_child" data-forumlevel="'+ (forum_level+1) +'">'+ forum_text +'</a>\
  144. </td>\
  145. <td class="tar"></td>\
  146. <td><input type="text" name="'+ temp_name +'manager['+ temp_id +'][]" class="input length_3"></td>\
  147. <td><a href="" class="mr5 J_new_forum_del">[删除]</a></td>\
  148. </tr>';
  149. }
  150. Wind.js(GV.JS_ROOT+ 'pages/admin/common/forumTree_table.js?v=' +GV.JS_VERSION);
  151. $(function(){
  152. //版块_新添加的行可直接删除
  153. $('#J_table_list').on('click', 'a.J_new_forum_del', function (e) {
  154. e.preventDefault();
  155. var $this = $(this), tr = $this.parents('tr');
  156. //跟当前行比较"del-level"的值,含子版不删除
  157. if(tr.data('del_level') < tr.next().data('del_level')) {
  158. Wind.use('dialog', function(){
  159. Wind.dialog.alert('该版块含有子版块,请先删除所有子版块,再进行此操作!', function(){
  160. $this.focus();
  161. });
  162. });
  163. }else{
  164. tr.remove();
  165. }
  166. });
  167. //双击编辑版块名称
  168. var org_val;
  169. $('#J_table_list').on('dblclick', '.J_forum_names', function() {
  170. var $this = $(this), $input = $('<input type="text" value="'+ $this.text() +'" data-id="'+ $this.data('id') +'" class="input mr5 J_forum_names_input" name="name">');
  171. org_val = $this.text(); //原始版块名
  172. $input.insertAfter($this).focus();
  173. $this.remove();
  174. });
  175. //版块名称input失焦ajax提交
  176. $('#J_table_list').on('blur', '.J_forum_names_input', function() {
  177. var $this = $(this),
  178. restore = function() { //版块取消编辑状态
  179. $this.hide().after('<span class="mr10 J_forum_names" data-id="'+ $this.data('id') +'">'+ $this.val() +'</span>');
  180. $this.remove();
  181. };
  182. //判断版块名是否修改过
  183. if($this.val() !== org_val) {
  184. $.post("{@url:bbs/setforum/editname}", {fid: $this.data('id'), name: $this.val() }, function(data){
  185. if(data.state === 'success') {
  186. restore();
  187. }
  188. });
  189. }else{
  190. restore();
  191. }
  192. });
  193. /*
  194. 搜索建议:输入>=2个字符开始提交查询,支持上下键选择;点击下拉的匹配项进入版块编辑,点击搜索按钮则高亮匹配的tr行
  195. */
  196. var search_input = $('#J_search_input'), //搜索栏
  197. suggestion_list = $('#J_search_suggestion'), //搜索匹配列表
  198. input_val; //搜索值,用于比较是否有更改
  199. //搜索框聚焦
  200. search_input.focus(function(){
  201. var $this = $(this);
  202. //搜索框粘帖
  203. this.onpaste = function(){
  204. //清楚重复的延时操作
  205. if(search_input.ptimer) {
  206. clearTimeout(search_input.ptimer);
  207. }
  208. //粘帖半秒后提交查询
  209. search_input.ptimer = setTimeout(function(){
  210. search_suggestion($('#J_search_input').val());
  211. }, 500)
  212. }
  213. //通过浏览器(ff8.0)“后退”到本页面时,可能搜索内容为空,但是有隐藏的匹配项
  214. if(!$this.val()) {
  215. return false;
  216. }
  217. //已经匹配搜索,搜索框重新聚焦时显示匹配,避免重复ajax
  218. if(suggestion_list.children().length) {
  219. suggestion_list.fadeIn('fast');
  220. }
  221. });
  222. //搜索输入
  223. search_input.keyup(function(e){
  224. var $this = $(this);
  225. //键盘上下选择搜索建议
  226. if(suggestion_list.children().length & (e.keyCode === 38 || e.keyCode === 40)) {
  227. var li_current = suggestion_list.find('li.current'); //当前选中项,上下键未修改状态
  228. /*var f_or_l = (e.keyCode === 40 ? 'first' : 'last'),
  229. p_or_n = (e.keyCode === 40 ? $.next : 'prev');*/
  230. //
  231. if(e.keyCode === 38) {
  232. //键盘_向上
  233. if(!li_current.length) {
  234. //没有有选中项时
  235. suggestion_list.find('li:last').addClass('current');
  236. }else{
  237. //有选中项时
  238. li_current.removeClass('current').prev().addClass('current');
  239. }
  240. }else if(e.keyCode === 40) {
  241. //键盘_向下
  242. if(!li_current.length) {
  243. //没有有选中项时
  244. suggestion_list.find('li:first').addClass('current');
  245. }else{
  246. //有选中项时
  247. li_current.removeClass('current').next().addClass('current');
  248. }
  249. }
  250. if(suggestion_list.find('li.current').length) {
  251. search_input.val(suggestion_list.find('li.current').text());
  252. }else{
  253. search_input.val(input_val);
  254. }
  255. return false;
  256. }
  257. if($this.val() === input_val) {
  258. return false; //搜索值未改变则不做查询
  259. }
  260. //停止输入半秒后开始查询
  261. if(search_input.timer) {
  262. clearTimeout(search_input.timer);
  263. }
  264. search_input.timer = setTimeout(function(){
  265. search_suggestion($this.val());
  266. }, 500);
  267. });
  268. //点击搜索建议列表,进入版块编辑
  269. search_input.keypress(function(e) {
  270. //可点击条件:有匹配搜索列表&列表里有被选中的项&按回车(enter)键
  271. if(suggestion_list.children() && suggestion_list.find('li.current').length && e.keyCode === 13) {
  272. e.preventDefault();
  273. search_input.blur(); //ff(8.0)从编辑页返回时,搜索栏会聚焦
  274. window.location.href = suggestion_list.find('li.current > a').attr('href'); //进入版块编辑
  275. }
  276. });
  277. //搜索框失焦,隐藏匹配列表
  278. search_input.blur(function() {
  279. suggestion_list.fadeOut('fast');
  280. });
  281. //搜索查询显示函数
  282. function search_suggestion(search_data) {
  283. input_val = search_data; //把搜索值赋给input_val,用于比较搜索值
  284. var search_text = $.trim(search_data.replace(/[^\x00-\xff]/g, "**")); //搜索内容首尾去空格,且每1个汉字转由两个*符号替代
  285. if(search_text.length >= 2) {
  286. //搜索内容大于2个字符,提交查询
  287. $.post('{@url:bbs/setforum/searchforum}', {'keyword':search_data}, function(data) {
  288. if(data.state === 'success') {
  289. var push_html = [];
  290. $.each(data.data, function(i, o){
  291. push_html.push('<li><a href="{@url:bbs/setforum/edit/}&fid='+ o.fid +'">'+ o.name +'</a></li>');
  292. });console.log(push_html);
  293. suggestion_list.html($('<ul/>').append(push_html.join(''))).fadeIn('fast');
  294. }else{
  295. suggestion_list.fadeOut('fast', function(){
  296. $(this).empty();
  297. });
  298. }
  299. }, 'json');
  300. }else{
  301. //搜索内容大于2个字符,隐藏并清空下拉匹配
  302. suggestion_list.fadeOut('fast', function(){
  303. $(this).empty();
  304. });
  305. }
  306. }
  307. //点击“搜索”按钮,高亮匹配的tr行
  308. Wind.use('ajaxForm',function() {
  309. $('#J_forum_search_form').ajaxForm({
  310. dataType : 'json',
  311. success : function(data) {
  312. if(data.state === 'success') {
  313. //取消已有的高亮
  314. $('#J_table_list tr.high_light').removeClass('high_light');
  315. //循环匹配的高亮
  316. $.each(data.data, function(i, o) {
  317. $('#J_forum_tr_' + o.fid).addClass('high_light');
  318. });
  319. //定位第一个
  320. $(document).scrollTop($('tr.high_light:first').offset().top);
  321. }
  322. }
  323. });
  324. });
  325. //搜索匹配列表hover状态背景色
  326. suggestion_list.on('mouseenter', 'li', function(){
  327. $(this).addClass('current');
  328. }).on('mouseleave', 'li', function(){
  329. $(this).removeClass('current');
  330. });
  331. });
  332. </script>
  333. </body>
  334. </html>