index.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  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. <style type="text/css">
  13. /* tooltip */
  14. #tooltip {
  15. position: absolute;
  16. border: 1px solid #ccc;
  17. background: #333;
  18. padding: 2px;
  19. display: none;
  20. color: #fff;
  21. }
  22. </style>
  23. </head>
  24. <body style="padding:10px;">
  25. <div class="tplay-body-div">
  26. <div class="layui-tab">
  27. <ul class="layui-tab-title">
  28. <li class="layui-this">文章管理</li>
  29. <li><a href="{:url('admin/article/publish')}" class="a_menu">新增文章</a></li>
  30. </ul>
  31. </div>
  32. <script type="text/html" id="toolbarDemo">
  33. <div class="layui-btn-container">
  34. <button class="layui-btn layui-btn-danger layui-btn-sm" lay-event="deletes">批量删除</button>
  35. <button class="layui-btn layui-btn-sm" lay-event="exportHtml_cover" title="生成并覆盖HTML文件"><i class="layui-icon">&#xe609;</i>生成HTML</button>
  36. </div>
  37. </script>
  38. <form class="layui-form serch" action="{:url('index')}" method="post">
  39. <div class="layui-form-item" style="float: left;">
  40. <div class="layui-input-inline" style="width: 100px">
  41. <input type="number" name="id" lay-verify="" autocomplete="off" placeholder="请输入ID"
  42. class="layui-input layui-btn-sm">
  43. </div>
  44. <div class="layui-input-inline">
  45. <input type="text" name="keywords" lay-verify="" autocomplete="off" placeholder="标题(模糊搜索)"
  46. class="layui-input layui-btn-sm">
  47. </div>
  48. {notempty name="$cates"}
  49. <div class="layui-input-inline">
  50. <div class="layui-inline">
  51. <select name="article_cate_id" lay-search="">
  52. <option value="">分类</option>
  53. <option value="-1">无分类</option>
  54. {volist name="$cates" id="vo"}
  55. <option value="{$vo.id}">{$vo.str}{$vo.title}</option>
  56. {/volist}
  57. </select>
  58. </div>
  59. </div>
  60. {/notempty}
  61. {notempty name="$catalogs"}
  62. <div class="layui-input-inline">
  63. <div class="layui-inline">
  64. <select name="catalog_id" lay-search="">
  65. <option value="">栏目</option>
  66. {volist name="$catalogs" id="vo"}
  67. <option value="{$vo.id}">{$vo.str}{$vo.title}</option>
  68. {/volist}
  69. </select>
  70. </div>
  71. </div>
  72. {/notempty}
  73. <div class="layui-input-inline" style="width: 100px">
  74. <div class="layui-inline">
  75. <select name="status" lay-search="">
  76. <option value="">状态</option>
  77. <option value="0">待审核</option>
  78. <option value="1">已审核</option>
  79. </select>
  80. </div>
  81. </div>
  82. <div class="layui-input-inline" style="width: 100px">
  83. <div class="layui-inline">
  84. <select name="istop_time" lay-search="">
  85. <option value="">置顶</option>
  86. <option value="0">未置顶</option>
  87. <option value="1">已置顶</option>
  88. </select>
  89. </div>
  90. </div>
  91. <div class="layui-input-inline" style="width: 100px">
  92. <div class="layui-inline">
  93. <select name="admin_id" lay-search="">
  94. <option value="">创建人</option>
  95. {volist name="$admins" id="vo"}
  96. <option value="{$vo.id}">{$vo.nickname}</option>
  97. {/volist}
  98. </select>
  99. </div>
  100. </div>
  101. <div class="layui-input-inline">
  102. <div class="layui-inline">
  103. <div class="layui-input-inline">
  104. <input type="text" class="layui-input" id="time_range" autocomplete="off" placeholder="创建时间" name="create_time">
  105. </div>
  106. </div>
  107. </div>
  108. <button class="layui-btn layui-btn-sm" lay-submit="" lay-filter="serch">立即提交</button>
  109. </div>
  110. </form>
  111. <script type="text/html" id="barDemo">
  112. <div class="layui-btn-group">
  113. <button class="layui-btn layui-btn-xs a_menu" lay-event="edit"><i class="layui-icon"
  114. style="margin-right: 0;"></i></button>
  115. <button class="layui-btn layui-btn-xs delete" lay-event="del"><i class="layui-icon"
  116. style="margin-right: 0;"></i></button>
  117. </div>
  118. </script>
  119. <table class="layui-table" id="table" lay-filter="table"></table>
  120. {include file="public/foot"}
  121. <script type="text/javascript">
  122. layui.use(['table', 'layer', 'form'], function () {
  123. var table = layui.table,
  124. form = layui.form,
  125. layer = layui.layer;
  126. //第一个实例
  127. table.render({
  128. id: 'table'
  129. , elem: '#table'
  130. , size: 'sm' //小尺寸的表格
  131. , toolbar: '#toolbarDemo'
  132. // , defaultToolbar: []
  133. , limit: 15
  134. , limits: [15, 20, 30, 40, 50, 100]
  135. , url: '{:url("index")}' //数据接口
  136. , page: true //开启分页
  137. , cols: [[ //表头
  138. {type: 'checkbox'},
  139. {field: 'id', title: 'ID', width: 60},
  140. {field: 'title', title: '标题', width: 200,templet:function (row) {
  141. return '<a href="./perview?id='+row.id+'" target="_blank" title="单击预览">'+row.title+'</a>'
  142. }},
  143. {
  144. field: 'image', title: '缩略图', width: 70, align: 'center', templet: function (row) {
  145. return (row.thumb_url == '') ? '' : '<a href="' + row.thumb_url + '" class="tooltip" target="_blank"><img src="' + row.thumb_url + '" width="20" height="20"></a>';
  146. }
  147. },
  148. //{notempty name="$cates"}
  149. {field: 'article_cate', title: '分类', width: 120},
  150. //{/notempty}
  151. //{notempty name="$catalogs"}
  152. {field: 'catalog', title: '栏目', width: 120},
  153. //{/notempty}
  154. {field: 'seo_title', title: 'SEO标题',minWidth:80},
  155. {field: 'seo_keyword', title: 'SEO关键词',minWidth:80},
  156. {field: 'seo_description', title: 'SEO描述',minWidth:80},
  157. {field: 'tag', title: '标签'},
  158. {field: 'admin_name', title: '创建人',minWidth:60},
  159. {field: 'create_time', title: '创建时间',minWidth:80},
  160. {field: 'editor_name', title: '修改人',minWidth:60},
  161. {field: 'update_time', title: '修改时间',minWidth:80},
  162. {field: 'page_views', title: '浏览量', width: 70, align: 'center'},
  163. {
  164. field: 'status', title: '审核', align: 'center', width: 60, templet: function (row) {
  165. return '<a href="javascript:;" style="font-size:18px;" class="status" data-id="' + row.id + '" data-val="' + row.status + '">' + (row.status == 1 ? '<i class="fa fa-toggle-on"></i>' : '<i class="fa fa-toggle-off"></i>') + '</a>';
  166. }},
  167. {field: 'istop_time', title: '置顶', align: 'center', width: 60, templet: function (row) {
  168. return '<a href="javascript:;" style="font-size:18px;" class="istop_time" data-id="' + row.id + '" data-val="' + row.istop_time + '">' + (row.istop_time != 0 ? '<i class="fa fa-toggle-on"></i>' : '<i class="fa fa-toggle-off"></i>') + '</a>';
  169. }},
  170. {field: 'action', title: '操作', align: 'center', toolbar: '#barDemo', fixed: 'right',minWidth:80}
  171. ]],
  172. done: function () {
  173. showThumb();
  174. switchStatus('.status',"{:url('status')}");
  175. switchStatus('.istop_time',"{:url('istop_time')}");
  176. }
  177. });
  178. form.on('submit(serch)', function (data) {
  179. table.reload('table', {
  180. where: data.field
  181. , page: {
  182. curr: 1 //重新从第 1 页开始
  183. }
  184. });
  185. return false;
  186. });
  187. table.on('tool(table)', function (obj) {
  188. if (obj.event == 'edit') {
  189. window.parent.tab.tabAdd({
  190. icon: "fa-bookmark",
  191. id: 'article' + obj.data.id,
  192. title: obj.data.title,
  193. url: "{:url('publish')}?id=" + obj.data.id
  194. });
  195. }
  196. else if (obj.event == 'del') {
  197. layer.confirm('确定要删除?', function (index) {
  198. $.ajax({
  199. url: "{:url('delete')}",
  200. dataType: 'json',
  201. data: {id: obj.data.id},
  202. success: function (res) {
  203. layer.msg(res.msg);
  204. if (res.code == 1) {
  205. table.reload('table');
  206. }
  207. }
  208. })
  209. })
  210. }
  211. });
  212. //监听事件
  213. table.on('toolbar(table)', function (obj) {
  214. var checkStatus = table.checkStatus(obj.config.id);//获取选中的数据
  215. var data = checkStatus.data;
  216. if (obj.event == 'deletes') {
  217. if (data.length > 0) {
  218. var ids = [];//数组
  219. data.forEach(function (item, key) {
  220. ids[key] = item.id;
  221. })
  222. layer.confirm('是否删除?', function (index, layero) {
  223. $.ajax({
  224. url: "{:url('deletes')}",
  225. dataType: 'json',
  226. data: {"ids": ids},
  227. type: 'post',
  228. success: function (res) {
  229. layer.msg(res.msg);
  230. if (res.code == 1) {
  231. table.reload('table');
  232. }
  233. }
  234. })
  235. layer.close(index)
  236. });
  237. } else {
  238. layer.msg('请先勾选需要操作的记录');
  239. }
  240. }
  241. else if(obj.event == 'exportHtml_cover'){
  242. if (data.length > 0) {
  243. var ids = [];//数组
  244. data.forEach(function (item, key) {
  245. ids[key] = item.id;
  246. })
  247. layer.confirm('是否覆盖?', function (index, layero) {
  248. var load = layer.load(1, {
  249. shade: [0.1, '#fff'] //0.1透明度的白色背景
  250. });
  251. $.ajax({
  252. url: "{:url('createFile')}",
  253. dataType: 'json',
  254. data: {"ids": ids},
  255. type: 'post',
  256. success: function (res) {
  257. layer.alert(res.msg, function (index) {
  258. layer.msg(res.msg);
  259. })
  260. },
  261. complete: function () {
  262. layer.close(load);
  263. }
  264. })
  265. layer.close(index)
  266. });
  267. } else {
  268. layer.msg('请先勾选需要操作的记录');
  269. }
  270. }
  271. });
  272. });
  273. </script>
  274. </div>
  275. </body>
  276. </html>