浏览代码

新增新闻管理

lishuwen79 6 年之前
父节点
当前提交
ac74c51b5a

+ 97 - 0
src/main/java/com/lsw/controller/admin/work/news/NewsController.java

@@ -0,0 +1,97 @@
+package com.lsw.controller.admin.work.news;
+
+import com.jfinal.json.FastJson;
+import com.jfinal.kit.JsonKit;
+import com.jfinal.plugin.activerecord.Db;
+import com.jfinal.plugin.activerecord.Page;
+import com.lsw.base.BaseController;
+import com.lsw.model.work.News;
+import com.lsw.model.work.News;
+import com.lsw.model.work.NewsColumn;
+import com.lsw.shiro.tag.ShiroTag;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 李书文
+ * @description 新闻管理
+ * @time 2017-8-23
+ */
+public class NewsController extends BaseController {
+
+    /**
+     * 管理页面
+     */
+    @RequiresPermissions("news:list")
+    public void list() {
+        render("list.html");
+    }
+
+    /**
+     * 新闻json数据
+     */
+    public void jsonList() {
+        Page<News> pgaeList = News.dao.jsonList(getPage(), getRows(), getPara("name"), getPara("type", "时政信息"), getPara("columnId"), getPara("mRelease"), getMinTime(), getMaxTime(), getSidx(), getSord());
+        renderJson(getPage(pgaeList));
+    }
+
+    /**
+     * 视图页面
+     */
+    public void view() {
+        String op = getPara("op", "add");
+        if (op.equals("edit")) {
+            News news = News.dao.findById(getParaToInt("id"));
+            setAttr("news", JsonKit.toJson(news));
+        } else {
+            setAttr("news", "{}");
+        }
+        setAttr("op", op);
+        render("form.html");
+    }
+
+    public void colmun_list() {
+        List<NewsColumn> news_column = NewsColumn.dao.find("SELECT * FROM tb_news_column WHERE mType=?", getPara("type", "1"));
+        renderJson(news_column);
+    }
+
+    /**
+     * 添加
+     */
+    @RequiresPermissions("news:add")
+    public void add() {
+        News news = FastJson.getJson().parse(getPara("news"), News.class);
+        news.setTypeName(news.getTypeName().equals("1")?"时政信息":"政策宣传");
+        news.setMTime(new Date());
+        news.setUserId(ShiroTag.getUser().getId());
+        news.save();
+        renderSuccess();
+    }
+
+    /**
+     * 编辑
+     */
+    @RequiresPermissions("news:edit")
+    public void edit() {
+        News news = FastJson.getJson().parse(getPara("news"), News.class);
+        news.setMTime(new Date());
+        news.update();
+        renderSuccess();
+    }
+
+    /**
+     * 删除
+     */
+    @RequiresPermissions("news:delete")
+    public void delete() {
+        String ids = getPara("ids");
+        int row = Db.update("delete from tb_news where id in(" + ids + ")");
+        if (row > 0) {
+            renderSuccess();
+        } else {
+            renderError("删除失败");
+        }
+    }
+}

+ 39 - 0
src/main/java/com/lsw/model/work/News.java

@@ -0,0 +1,39 @@
+package com.lsw.model.work;
+
+import com.jfinal.kit.StrKit;
+import com.jfinal.plugin.activerecord.Page;
+import com.lsw.model.work.base.BaseNews;
+
+/**
+ * Generated by JFinal.
+ */
+@SuppressWarnings("serial")
+public class News extends BaseNews<News> {
+    public static final News dao = new News().dao();
+
+    public Page<News> jsonList(int page, int row, String name, String type, String columnId, String mRelease, String min, String max, String sidx, String sord) {
+        String select = "SELECT n.id,n.mTitle,n.typeName,n.mCove,n.isTop,n.mTime,n.mRelease,c.mColumnName,u.realName";
+        StringBuilder sb = new StringBuilder();
+        sb.append(" FROM tb_news n");
+        sb.append(" LEFT JOIN tb_news_column c ON c.id=n.columnId");
+        sb.append(" LEFT JOIN sys_user u ON u.id=n.userId");
+        sb.append(" WHERE 1=1");
+        if (StrKit.notBlank(name)) {
+            sb.append(" AND n.mTitle LIKE '%" + name + "%'");
+        }
+        if (StrKit.notBlank(type)) {
+            sb.append(" AND n.typeName='" + type + "'");
+        }
+        if (StrKit.notBlank(columnId)) {
+            sb.append(" AND n.columnId=" + columnId);
+        }
+        if (StrKit.notBlank(mRelease)) {
+            sb.append(" AND n.mRelease=" + mRelease);
+        }
+        if (StrKit.notBlank(min)) {
+            sb.append(" AND n.mTime BETWEEN '" + min + "' AND '" + max + "'");
+        }
+        sb.append(" ORDER BY n." + sidx + " " + sord);
+        return dao.paginate(page, row, select, sb.toString());
+    }
+}

+ 18 - 1
src/main/java/com/lsw/model/work/NewsColumn.java

@@ -1,5 +1,7 @@
 package com.lsw.model.work;
 
+import com.jfinal.kit.StrKit;
+import com.jfinal.plugin.activerecord.Page;
 import com.lsw.model.work.base.BaseNewsColumn;
 
 /**
@@ -7,5 +9,20 @@ import com.lsw.model.work.base.BaseNewsColumn;
  */
 @SuppressWarnings("serial")
 public class NewsColumn extends BaseNewsColumn<NewsColumn> {
-	public static final NewsColumn dao = new NewsColumn().dao();
+    public static final NewsColumn dao = new NewsColumn().dao();
+
+    public Page<NewsColumn> jsonList(int page, int row, String name, String type, String sidx, String sord) {
+        String select = "SELECT e.*";
+        StringBuilder sb = new StringBuilder();
+        sb.append(" FROM tb_news_column e");
+        sb.append(" WHERE 1=1");
+        if (StrKit.notBlank(name)) {
+            sb.append(" AND e.mColumnName like '%" + name + "%'");
+        }
+        if (StrKit.notBlank(type)) {
+            sb.append(" AND e.mType=" + type);
+        }
+        sb.append(" ORDER BY e." + sidx + " " + sord);
+        return dao.paginate(page, row, select, sb.toString());
+    }
 }

+ 1 - 0
src/main/java/com/lsw/model/work/_MappingKit.java

@@ -17,6 +17,7 @@ public class _MappingKit {
 
 	public static void mapping(ActiveRecordPlugin arp) {
 		arp.addMapping("tb_banner", "id", Banner.class);
+		arp.addMapping("tb_news", "id", News.class);
 		arp.addMapping("tb_news_column", "id", NewsColumn.class);
 		arp.addMapping("tb_position", "id", Position.class);
 		arp.addMapping("tb_token", "id", Token.class);

+ 100 - 0
src/main/java/com/lsw/model/work/base/BaseNews.java

@@ -0,0 +1,100 @@
+package com.lsw.model.work.base;
+
+import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
+
+/**
+ * Generated by JFinal, do not modify this file.
+ */
+@SuppressWarnings("serial")
+public abstract class BaseNews<M extends BaseNews<M>> extends Model<M> implements IBean {
+
+	public void setId(java.lang.Integer id) {
+		set("id", id);
+	}
+
+	public java.lang.Integer getId() {
+		return getInt("id");
+	}
+
+	public void setUserId(java.lang.Integer userId) {
+		set("userId", userId);
+	}
+
+	public java.lang.Integer getUserId() {
+		return getInt("userId");
+	}
+
+	public void setTypeName(java.lang.String typeName) {
+		set("typeName", typeName);
+	}
+
+	public java.lang.String getTypeName() {
+		return getStr("typeName");
+	}
+
+	public void setColumnId(java.lang.Integer columnId) {
+		set("columnId", columnId);
+	}
+
+	public java.lang.Integer getColumnId() {
+		return getInt("columnId");
+	}
+
+	public void setMCove(java.lang.String mCove) {
+		set("mCove", mCove);
+	}
+
+	public java.lang.String getMCove() {
+		return getStr("mCove");
+	}
+
+	public void setAbstract(java.lang.String _abstract) {
+		set("abstract", _abstract);
+	}
+
+	public java.lang.String getAbstract() {
+		return getStr("abstract");
+	}
+
+	public void setMTitle(java.lang.String mTitle) {
+		set("mTitle", mTitle);
+	}
+
+	public java.lang.String getMTitle() {
+		return getStr("mTitle");
+	}
+
+	public void setMContent(java.lang.String mContent) {
+		set("mContent", mContent);
+	}
+
+	public java.lang.String getMContent() {
+		return getStr("mContent");
+	}
+
+	public void setMRelease(java.lang.Integer mRelease) {
+		set("mRelease", mRelease);
+	}
+
+	public java.lang.Integer getMRelease() {
+		return getInt("mRelease");
+	}
+
+	public void setIsTop(java.lang.Integer isTop) {
+		set("isTop", isTop);
+	}
+
+	public java.lang.Integer getIsTop() {
+		return getInt("isTop");
+	}
+
+	public void setMTime(java.util.Date mTime) {
+		set("mTime", mTime);
+	}
+
+	public java.util.Date getMTime() {
+		return get("mTime");
+	}
+
+}

+ 8 - 0
src/main/java/com/lsw/model/work/base/BaseNewsColumn.java

@@ -25,6 +25,14 @@ public abstract class BaseNewsColumn<M extends BaseNewsColumn<M>> extends Model<
 		return getStr("mColumnName");
 	}
 
+	public void setMType(java.lang.Integer mType) {
+		set("mType", mType);
+	}
+
+	public java.lang.Integer getMType() {
+		return getInt("mType");
+	}
+
 	public void setMView(java.lang.Integer mView) {
 		set("mView", mView);
 	}

+ 4 - 0
src/main/java/com/lsw/route/AdminRoute.java

@@ -13,6 +13,8 @@ import com.lsw.controller.admin.system.site.SiteController;
 import com.lsw.controller.admin.system.upload.UploadController;
 import com.lsw.controller.admin.system.user.UserController;
 import com.lsw.controller.admin.work.banner.BannerController;
+import com.lsw.controller.admin.work.news.NewsController;
+import com.lsw.controller.admin.work.news_column.ColumnController;
 import com.lsw.controller.admin.work.position.PositionController;
 import com.lsw.interceptor.LogInterceptor;
 import com.lsw.interceptor.RoleMenuInterceptor;
@@ -39,7 +41,9 @@ public class AdminRoute extends Routes {
 
         /***************************************业务相关*****************************************/
         add("/admin/work/banner",BannerController.class, "/work/banner/"); // 广告管理
+        add("/admin/work/column", ColumnController.class, "/work/news_column/"); // 新闻栏目管理
         add("/admin/work/position",PositionController.class, "/work/position/"); // 职位管理
+        add("/admin/work/news",NewsController.class, "/work/news/"); // 新闻管理
     }
 
 }

+ 2 - 2
src/main/webapp/WEB-INF/view/admin/system/menu/list.html

@@ -92,10 +92,10 @@
      */
     function operate(op) {
         if (op == 'add') {
-            openDialogDiy("添加菜单", "#(path)/admin/menu/view?op=add", "60%", "62%");
+            openDialogDiy("添加菜单", "#(path)/admin/menu/view?op=add", "60%", "66%");
         }
         if (op == 'edit') {
-            openDialogDiy("编辑菜单", "#(path)/admin/menu/view?op=edit&id=" + selectedRow().id, "60%", "62%");
+            openDialogDiy("编辑菜单", "#(path)/admin/menu/view?op=edit&id=" + selectedRow().id, "60%", "66%");
         }
         if (op == 'delete') {
             deleteRows("#(path)/admin/menu/delete?ids=");

+ 170 - 0
src/main/webapp/WEB-INF/view/admin/work/news/form.html

@@ -0,0 +1,170 @@
+#set(title="添加新闻")
+#@header()
+<style>
+    .img{cursor: pointer;max-height:128px;padding: 10px;max-width: 128px;margin-left: -10px;}
+    .mask{position:fixed;width:100%;height:100%;background-color:rgba(0,0,0,0.83);top:0;z-index:6666;overflow: hidden;}
+    #photo{width: 80%;}
+    input[type=file] {height:128px;opacity: 0;width: 128px;cursor: pointer;margin: 0 auto;}
+    .bo{margin:0 auto;width:200px;position:absolute;bottom:0;background-color: #2f4050;width: 100%;padding: 5px;}
+    .table > tbody > tr > td span{color:red;font-weight:bold;}
+    [v-cloak] {display: none;}
+</style>
+<body class="bg">
+<div id="app" v-cloak>
+    <form id="addForm" method="post">
+        <table class="table">
+            <tbody>
+            <tr>
+                <td width="150">文章标题 <span>*</span></td>
+                <td colspan="3">
+                    <input type="text" class="form-control" v-model="item.mTitle">
+                </td>
+            </tr>
+            <tr>
+                <td width="150">文章类型 <span>*</span></td>
+                <td>
+                    <select class="form-control"  v-model="item.typeName" @change="selected()">
+                        <option :value="type.id"  v-for="type in type_list">{{type.name}}</option>
+                    </select>
+                </td>
+                <td width="150">文章栏目 <span>*</span></td>
+                <td>
+                    <select class="form-control" v-model="item.columnId">
+                        <option :value="colmun.id" v-for="colmun in colmun_list">{{colmun.mColumnName}}</option>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td width="150">文章封面</td>
+                <td colspan="3" style="overflow: hidden;">
+                    <img class="img" alt="添加封面" :src="mCove==''?'#(path)/static/ui/img/icon_p.png':mCove">
+                    <input type="file" accept="image/*" accept='image/*' v-on:change="change($event,0)" style="margin-top:-128px;width:70%;margin-left: -30px;">
+                </td>
+            </tr>
+            <tr>
+                <td>文章置顶</td>
+                <td>
+                    <el-switch
+                            v-model="item.isTop"
+                            active-color="#13ce66"
+                            inactive-color="#ff4949">
+                    </el-switch>
+                </td>
+                <td width="150">文章状态 <span>*</span></td>
+                <td>
+                    <select class="form-control" v-model="item.mRelease">
+                        <option value="0">发布</option>
+                        <option value="1">不发布</option>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td style="vertical-align: top;">文章内容 <span>*</span></td>
+                <td colspan="3"><script id="editor" type="text/plain"  style="width:100%;height:280px;text-align: left">{{item.mContent}}</script></td>
+            </tr>
+            </tbody>
+        </table>
+        <input type="hidden" name="dataImage" v-model="dataImage"/>
+    </form>
+    <div class="mask" v-show="show">
+        <img id="photo">
+        <div class="bo">
+            <div style="text-align: center;">
+                <button class="btn btn-primary" @click="save()">裁剪</button>
+                <button class="btn btn-danger" style="margin-left: 30px;" @click="cancel()">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+#set(layer=true,util=true,vue=true,cropper=true,element=true,ueditor=true)
+#@op()
+#@js()
+<script>
+    var ue=UE.getEditor('editor',{
+        toolbars:[['FullScreen', 'Undo','Redo','forecolor','bold', 'italic','formatmatch', 'autotypeset','justifyleft', 'justifycenter', 'justifyright', 'justifyjustify','insertorderedlist', 'insertunorderedlist',
+            'rowspacingtop', 'rowspacingbottom', 'lineheight','simpleupload','insertvideo','customstyle','paragraph','fontfamily', 'fontsize','inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols']]
+    });
+    var cropper = null;
+    var vm = new Vue({
+        el: "#app",
+        data: {
+            type_list:[{name:'时政信息',id:1},{name:'政策宣传',id:2}],
+            colmun_list:[],
+            item: {mTitle:'',mContent:'',typeName:1,mRelease:0,columnId:1,isTop:false,mCove:''},
+            show: false,
+            mCove: '',
+            dataImage: '',
+            dialogVisible:false
+        },
+        mounted: function () {
+            if ('#(op)' == 'edit') {
+                //this.item =#(banner);
+                //this.mCove = this.item.mCove;
+                //this.item.mShow=this.item.mShow==0?true:false;
+            }
+            this.item.isTop=this.item.isTop==true?1:0;
+            this.getColmun(1);
+        },
+        methods: {
+            //选择分类
+            selected:function(){
+                this.getColmun(vm.item.typeName);
+            },
+            //选择栏目
+            getColmun:function(e){
+                sendAjax("#(path)/admin/work/news/colmun_list",{type:e},function(res){
+                    vm.colmun_list=res;
+                    vm.item.columnId=res[0].id;
+                    cancelLoding();
+                });
+            },
+            //创建列表
+            change: function (e, index) {
+                var objUrl = vm.getUri(e.currentTarget.files[0]);
+                if (objUrl == null) {
+                    return;
+                }
+                vm.show = true;
+                vm.index = index;
+                document.getElementById("photo").src = objUrl;
+                cropper = getClipper(16 / 9, objUrl, 'photo');
+            },
+            getUri: function (file) {
+                var url = null;
+                if (window.createObjectURL != undefined) { // basic
+                    url = window.createObjectURL(file);
+                } else if (window.URL != undefined) { // mozilla(firefox)
+                    url = window.URL.createObjectURL(file);
+                } else if (window.webkitURL != undefined) { // webkit or chrome
+                    url = window.webkitURL.createObjectURL(file);
+                }
+                return url;
+            },
+            //保存图像
+            save: function () {
+                vm.show = false;
+                var croppedCanvas = cropper.getCroppedCanvas({height: 480});
+                var dataUrl = croppedCanvas.toDataURL();
+                sendAjax("#(path)/admin/upload/uploadData", {dataImage: dataUrl}, function (res) {
+                    vm.mCove = dataUrl;
+                    vm.item.mCove = res.url;
+                    cancelLoding();
+                })
+                cropper.destroy();
+            },
+            //取消剪裁
+            cancel: function () {
+                vm.show = false;
+                cropper.destroy();
+            }
+        }
+    })
+    $("#add").click(function () {
+        vm.item.isTop=vm.item.isTop==true?1:0;
+        vm.item.mContent=ue.getContent();
+        var data = {news: JSON.stringify(vm.item)};
+        ajaxSubmit("#(path)/admin/work/news/#(op)", data);
+    });
+</script>
+</body>
+</html>

+ 82 - 0
src/main/webapp/WEB-INF/view/admin/work/news/list.html

@@ -0,0 +1,82 @@
+#set(title="新闻管理")
+#@header()
+<style>
+    .flex{width: 200px;cursor: pointer;}
+    .flex .l{padding: 10px 20px 10px 20px;font-size: 15px;font-weight: bold;position: relative;}
+    .flex .l.active{border-bottom: 3px solid darkcyan;color:darkcyan}
+    .badge-danger{position:absolute;right:0;top:0;}
+</style>
+<body>
+<div class="con">
+    <div class="toolbar">
+        <!--权限操作按钮-->
+        #@menu(menu_list)
+        <div class="input-group search">
+            <div class="input-group-btn">
+                <!--查询条件-->
+                <select class="form-control select" id="mType">
+                    <option value="">全部栏目</option>
+                    #for(column in column_list)
+                    <option value="1">#(column.mColumnName)</option>
+                    #end
+                </select>
+            </div>
+            <input type="text" id="name" placeholder="输入栏目名称名称" class="form-control">
+            <span class="input-group-btn"><button type="button" id="search" class="btn btn-primary">搜索</button></span>
+        </div>
+        <a class="pull-right refresh" href="javascript:location.replace(location.href);"><i class="fa fa-history"></i>&nbsp;刷新</a>
+    </div>
+    <div class="mbox">
+        <div class="flex">
+            <div class="l active" onclick="selected(this,'时政信息')">时政信息 <span class="badge badge-danger">53</span></div>
+            <div class="l" onclick="selected(this,'政策宣传')">政策宣传 <span class="badge badge-danger">26</span></div>
+        </div>
+        <table id="jqGrid"></table>
+        <div id="jqGridPager"></div>
+    </div>
+</div>
+#set(layer=true,util=true,jgrid=true)
+#@js()
+<script>
+    var colModel=[
+        { label: 'ID', name: 'id',hidden : true,frozen: true},
+        { label: '文章标题', name: 'mTitle',frozen: true,width:300},
+        { label: '文章栏目', name: 'mColumnName'},
+        { label: '文章归类', name: 'typeName'},
+        { label: '文章状态', name: 'mRelease'},
+        { label: '是否置顶', name: 'isTop'},
+        { label: '发布人', name: 'realName'},
+        { label: '发布时间', name: 'mTime'},]
+    jgrid('#(path)/admin/work/news/jsonList', colModel,{fixed: false, height: $('body').height() - 170});
+    /**
+     *是否显示
+     */
+    function mShow(cellvalue, options, rowObject) {
+        if (cellvalue == '0') {
+            return '<span class="label label-sm label-info">显示</span>';
+        } else {
+            return '<span class="label label-sm label-danger">不显示</span>';
+        }
+    }
+    function selected(e,typeName){
+        $(".l").removeClass("active");
+        $(e).addClass("active");
+        $("#jqGrid").jqGrid('setGridParam',{datatype:'json',postData:{type:typeName,name:'',columnId:'',mRelease:''},page:1}).trigger("reloadGrid");
+    }
+    /**
+     * 操作
+     */
+    function operate(op) {
+        if (op == 'add') {
+            openDialogDiy("添加新闻", "#(path)/admin/work/news/view?op=add", "85%", "95%");
+        }
+        if (op == 'edit') {
+            openDialogDiy("编辑新闻轮播", "#(path)/admin/work/news/view?op=edit&id=" + selectedRow().id, "85%", "95%");
+        }
+        if (op == 'delete') {
+            deleteRows("#(path)/admin/work/news/delete?ids=");
+        }
+    }
+</script>
+</body>
+</html>

+ 62 - 0
src/main/webapp/WEB-INF/view/admin/work/news_column/form.html

@@ -0,0 +1,62 @@
+#set(title="添加栏目")
+#@header()
+<body class="bg">
+        <form  id="addForm" method="post">
+            <input type="hidden"  name="id"  value="#(column.id??)">
+            <table class="table">
+                <tbody>
+                <tr>
+                    <td>栏目名称 </td>
+                    <td><input type="text" class="form-control" name="mColumnName" placeholder="输入栏目名称" value="#(column.mColumnName??)"></td>
+                </tr>
+                <tr>
+                    <td>所属分类 </td>
+                    <td>
+                        <select class="form-control m-b" name="mType">
+                            <option value="1" #(column.mType??==1?'selected':'')>时政信息</option>
+                            <option value="2" #(column.mType??==2?'selected':'')>政策宣传</option>
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td>显示次序 </td>
+                    <td><input type="number" class="form-control" name="mView" placeholder="显示次序"  value="#(column.mView??)"></td>
+                </tr>
+                <tr>
+                    <td>是否启用 </td>
+                    <td>
+                        <select class="form-control m-b" name="mShow">
+                            <option value="0" #(column.mShow??==0?'selected':'')>启用</option>
+                            <option value="1" #(column.mShow??==1?'selected':'')>禁用</option>
+                        </select>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </form>
+#set(layer=true,util=true,valida=true)
+#@op()
+#@js()
+<script>
+    var valida=$("#addForm").validate({
+        rules:{
+            mColumnName:{
+                required:true,
+                isContainsSpecialChar:true,
+                isChinese:true
+            },
+            mView:{
+                required:true,
+                isDigits:true
+            }
+        }
+    });
+    $("#add").click(function() {
+        valida.form();
+        if(valida.valid()){
+            ajaxSubmit("#(path)/admin/work/column/#(op)",$("#addForm").serialize());
+        }
+    });
+</script>
+</body>
+</html>

+ 86 - 0
src/main/webapp/WEB-INF/view/admin/work/news_column/list.html

@@ -0,0 +1,86 @@
+#set(title="职位分类")
+#@header()
+<body>
+<div class="con">
+    <div class="toolbar">
+        <!--权限操作按钮-->
+        #@menu(menu_list)
+        <div class="input-group search">
+            <div class="input-group-btn">
+                <!--查询条件-->
+                <select class="form-control select" id="mType">
+                    <option value="">全部栏目</option>
+                    <option value="1">时政信息</option>
+                    <option value="2">政策宣传</option>
+                </select>
+            </div>
+            <input type="text" id="name" placeholder="输入栏目名称名称" class="form-control">
+            <span class="input-group-btn"><button type="button" id="search" class="btn btn-primary">搜索</button></span>
+        </div>
+        <a class="pull-right refresh" href="javascript:location.replace(location.href);"><i class="fa fa-history"></i>&nbsp;刷新</a>
+    </div>
+    <div class="mbox">
+        <table id="jqGrid"></table>
+        <div id="jqGridPager"></div>
+    </div>
+</div>
+#set(layer=true,util=true,jgrid=true)
+#@js()
+<script>
+    var colModel = [
+        {label: 'ID', name: 'id', hidden: true},
+        {label: '栏目名称', name: 'mColumnName'},
+        {label: '显示次序', name: 'mView',width:50},
+        {label: '是否启用', name: 'mShow',width:50,formatter: mShow},
+        {label: '所属分类', name: 'mType', formatter: mType},
+        {label: '添加时间', name: 'mDate'}]
+    jgrid('#(path)/admin/work/column/jsonList', colModel,{sort:'asc'});
+    /**
+     * 搜索
+     */
+    $("#search").click(function () {
+        reloadGrid({'name': $("#name").val()});
+    });
+    /**
+     * 是否启用
+     */
+    function mShow(cellvalue, options, rowObject) {
+        if (cellvalue == '0') {
+            return '<span class="label label-sm label label-success">启用</span>';
+        } else {
+            return '<span class="label label-sm label-danger">禁用</span>';
+        }
+    }
+    /**
+     * 所属分类
+     */
+    function mType(cellvalue, options, rowObject) {
+        if (cellvalue == '1') {
+            return '<span class="label label-sm label-info">时政信息</span>';
+        } else {
+            return '<span class="label label-sm label-success">政策宣传</span>';
+        }
+    }
+    /**
+     * 选择
+     */
+    $("#mType").change(function(){
+        $("#jqGrid").jqGrid('setGridParam',{datatype:'json',postData:{mType:$("#mType").val()},page:1}).trigger("reloadGrid");
+    });
+    /**
+     * 操作
+     */
+    function operate(op) {
+        if (op == 'add') {
+            openDialogDiy("添加栏目", "#(path)/admin/work/column/view?op=add", "40%", "70%");
+        }
+        if (op == 'edit') {
+            openDialogDiy("编辑栏目", "#(path)/admin/work/column/view?op=edit&id=" + selectedRow().id, "40%", "70%");
+        }
+        if (op == 'delete') {
+            deleteRows("#(path)/admin/work/column/delete?ids=");
+        }
+    }
+</script>
+</body>
+</html>

+ 1 - 1
src/main/webapp/static/third-party/jquery-validation/1.14.0/validate-methods.js

@@ -84,7 +84,7 @@ $(function(){
     // 匹配integer
     jQuery.validator.addMethod("isInteger", function(value, element) {       
          return this.optional(element) || (/^[-\+]?\d+$/.test(value) && parseInt(value)>=0);       
-    }, "匹配integer");  
+    }, "只能整数");
      
     // 判断数值类型,包括整数和浮点数
     jQuery.validator.addMethod("isNumber", function(value, element) {       

+ 3 - 0
src/main/webapp/static/ui/css/style.min.css

@@ -10,6 +10,8 @@ h1,h2,h3,h4,h5,h6{font-weight:100}h1{font-size:30px}h2{font-size:24px}h3{font-si
 .la{padding: 10px 20px 10px 20px;background-color: #f5f5f6;box-shadow: 0 1px 6px #ccc;border-left: 3px solid darkcyan;font-weight: bold;}
 #version{text-align: center;display: none;}
 .mbox{padding: 10px;}
+.flex{display: flex;text-align: center;}
+.flex .f{flex: 1;}
 /**自定义float**/
 .r{width: 100%;background-color: white;}
 .r .sm{width: 33%;float: left;}
@@ -30,6 +32,7 @@ label.error{position:absolute;right:18px;top:21px;color:#ef392b;font-weight:norm
 .object ul li{position: relative; float: left;border: 1px dashed darkgray;border-radius: 5px;padding: 10px 14px;cursor:pointer;margin: 8px;}
 .object ul li.active{border: 1px dashed red;color: red}
 .object ul li a{position: absolute;top:0;right: 0;background-color: red;padding:0px 5px 0px 5px;margin: -7px;color: white;border-radius: 50%;}
+.select{min-width: 120px;}
 .refresh{background-color: #23c6c8;
     color: white;
     position: absolute;