lishuwen79 6 роки тому
батько
коміт
bce3f093fd

+ 22 - 6
src/main/java/com/lsw/controller/admin/work/news/NewsController.java

@@ -1,10 +1,13 @@
 package com.lsw.controller.admin.work.news;
 
+import com.jfinal.aop.Before;
 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.commons.utils.TimeUtil;
+import com.lsw.controller.admin.work.news_column.ColumnValidator;
 import com.lsw.model.work.News;
 import com.lsw.model.work.News;
 import com.lsw.model.work.NewsColumn;
@@ -33,7 +36,7 @@ public class NewsController extends BaseController {
      * 新闻json数据
      */
     public void jsonList() {
-        Page<News> pgaeList = News.dao.jsonList(getPage(), getRows(), getPara("name"), getPara("type", "时政信息"), getPara("columnId"), getPara("mRelease"), getMinTime(), getMaxTime(), getSidx(), getSord());
+        Page<News> pgaeList = News.dao.jsonList(getPage(), getRows(), getPara("name"), getPara("type", "时政信息"), getPara("columnId"), getPara("mAudit"), getMinTime(), getMaxTime(), getSidx(), getSord());
         renderJson(getPage(pgaeList));
     }
 
@@ -42,8 +45,12 @@ public class NewsController extends BaseController {
      */
     public void view() {
         String op = getPara("op", "add");
-        if (op.equals("edit")) {
+        if (op.equals("add")) {
+            setAttr("time", TimeUtil.getNow());
+        }
+        if (op.equals("edit")||op.equals("audit")) {
             News news = News.dao.findById(getParaToInt("id"));
+            setAttr("time", news.getMTime());
             setAttr("news", JsonKit.toJson(news));
         } else {
             setAttr("news", "{}");
@@ -61,10 +68,10 @@ public class NewsController extends BaseController {
      * 添加
      */
     @RequiresPermissions("news:add")
+    @Before(NewsValidator.class)
     public void add() {
         News news = FastJson.getJson().parse(getPara("news"), News.class);
-        news.setTypeName(news.getTypeName().equals("1")?"时政信息":"政策宣传");
-        news.setMTime(new Date());
+        news.setTypeName(news.getTypeName().equals("1") ? "时政信息" : "政策宣传");
         news.setUserId(ShiroTag.getUser().getId());
         news.save();
         renderSuccess();
@@ -76,11 +83,20 @@ public class NewsController extends BaseController {
     @RequiresPermissions("news:edit")
     public void edit() {
         News news = FastJson.getJson().parse(getPara("news"), News.class);
-        news.setMTime(new Date());
+        news.setTypeName(news.getTypeName().equals("1") ? "时政信息" : "政策宣传");
+        news.update();
+        renderSuccess();
+    }
+    /**
+     * 文章审核
+     */
+    @RequiresPermissions("news:audit")
+    public void audit() {
+        News news = FastJson.getJson().parse(getPara("news"), News.class);
+        news.setTypeName(news.getTypeName().equals("1") ? "时政信息" : "政策宣传");
         news.update();
         renderSuccess();
     }
-
     /**
      * 删除
      */

+ 21 - 0
src/main/java/com/lsw/controller/admin/work/news/NewsValidator.java

@@ -0,0 +1,21 @@
+package com.lsw.controller.admin.work.news;
+
+import com.jfinal.core.Controller;
+import com.jfinal.json.FastJson;
+import com.jfinal.kit.StrKit;
+import com.lsw.base.BaseValidator;
+import com.lsw.model.work.News;
+
+public class NewsValidator extends BaseValidator {
+
+    @Override
+    protected void validate(Controller c) {
+        News news = FastJson.getJson().parse(c.getPara("news"), News.class);
+        if(StrKit.isBlank(news.getMTitle())){
+            addError("msg","文章标题不能为空");
+        }
+        if(StrKit.isBlank(news.getMContent())){
+            addError("msg","文章内容不能为空");
+        }
+    }
+}

+ 10 - 3
src/main/java/com/lsw/controller/front/main/MainController.java

@@ -4,17 +4,24 @@ import com.jfinal.plugin.activerecord.Record;
 import com.lsw.base.BaseController;
 import com.lsw.model.work.Banner;
 import com.lsw.model.work.News;
+import com.lsw.model.work.NewsColumn;
 
 import java.util.List;
 
 public class MainController extends BaseController {
 
     public void main() {
-        List<Banner> banner_list = Banner.dao.find("SELECT cover FROM tb_banner ORDER BY mView  ASC limit 5");
-        //List<News> new_list = News.dao.find("SELECT id,mCove FROM tb_goods WHERE status=0 GROUP BY mCode ORDER BY id DESC limit 5");
+        List<Banner> banner_list = Banner.dao.find("SELECT cover FROM tb_banner WHERE mShow=0 ORDER BY mView  ASC limit 5");
+        List<News> new_list1 = News.dao.find("SELECT id,mTime,mTitle FROM tb_news WHERE 1=1 AND mRelease=0 AND mAudit=1 AND typeName='时政信息' ORDER BY mTime DESC limit 5");
+        List<News> new_list2 = News.dao.find("SELECT id,mTime,mTitle FROM tb_news WHERE 1=1 AND mRelease=0 AND mAudit=1 AND typeName='政策宣传' ORDER BY mTime DESC limit 5");
         Record record = new Record();
         record.set("banner_list", banner_list);
-        //record.set("new_list", new_list);
+        record.set("new_list1", new_list1);
+        record.set("new_list2", new_list2);
         renderJson(record);
     }
+    public void column(){
+        List<NewsColumn> column_list = NewsColumn.dao.find("SELECT * FROM tb_news_column WHERE mType=? AND mShow=0",getPara("mType","1"));
+        renderJson(column_list);
+    }
 }

+ 29 - 0
src/main/java/com/lsw/controller/front/main/NewsController.java

@@ -0,0 +1,29 @@
+package com.lsw.controller.front.main;
+
+import com.jfinal.plugin.activerecord.Page;
+import com.lsw.base.BaseController;
+import com.lsw.model.work.News;
+import com.lsw.model.work.NewsColumn;
+
+import java.util.List;
+
+public class NewsController extends BaseController {
+
+    /**
+     * 新闻json数据
+     */
+    public void jsonList() {
+        Page<News> pgaeList = News.dao.jsonList(getPage(),getPara("name"), getPara("type", "时政信息"), getPara("columnId"));
+        renderJson(getPage(pgaeList));
+    }
+
+    public void column(){
+        List<NewsColumn> column_list = NewsColumn.dao.find("SELECT * FROM tb_news_column WHERE mType=? AND mShow=0",getPara("mType","1"));
+        renderJson(column_list);
+    }
+
+    public void detail(){
+        News news=News.dao.findById(getPara("id"));
+        renderJson(news);
+    }
+}

+ 22 - 4
src/main/java/com/lsw/model/work/News.java

@@ -11,8 +11,8 @@ import com.lsw.model.work.base.BaseNews;
 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";
+    public Page<News> jsonList(int page, int row, String name, String type, String columnId, String mAudit, String min, String max, String sidx, String sord) {
+        String select = "SELECT n.id,n.mTitle,n.mAudit,n.columnId,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");
@@ -27,8 +27,8 @@ public class News extends BaseNews<News> {
         if (StrKit.notBlank(columnId)) {
             sb.append(" AND n.columnId=" + columnId);
         }
-        if (StrKit.notBlank(mRelease)) {
-            sb.append(" AND n.mRelease=" + mRelease);
+        if (StrKit.notBlank(mAudit)) {
+            sb.append(" AND n.mAudit=" + mAudit);
         }
         if (StrKit.notBlank(min)) {
             sb.append(" AND n.mTime BETWEEN '" + min + "' AND '" + max + "'");
@@ -36,4 +36,22 @@ public class News extends BaseNews<News> {
         sb.append(" ORDER BY n." + sidx + " " + sord);
         return dao.paginate(page, row, select, sb.toString());
     }
+    public Page<News> jsonList(int page,String name, String type, String columnId) {
+        String select = "SELECT n.id,n.mTitle,n.mAudit,n.columnId,n.typeName,n.mCove,n.isTop,n.mTime,n.mRelease,c.mColumnName";
+        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(" 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);
+        }
+        sb.append(" ORDER BY n.isTop DESC");
+        return dao.paginate(page, 15, select, sb.toString());
+    }
 }

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

@@ -73,6 +73,14 @@ public abstract class BaseNews<M extends BaseNews<M>> extends Model<M> implement
 		return getStr("mContent");
 	}
 
+	public void setMAudit(java.lang.Integer mAudit) {
+		set("mAudit", mAudit);
+	}
+
+	public java.lang.Integer getMAudit() {
+		return getInt("mAudit");
+	}
+
 	public void setMRelease(java.lang.Integer mRelease) {
 		set("mRelease", mRelease);
 	}

+ 3 - 1
src/main/java/com/lsw/route/FrontRoute.java

@@ -2,6 +2,7 @@ package com.lsw.route;
 
 import com.jfinal.config.Routes;
 import com.lsw.controller.front.main.MainController;
+import com.lsw.controller.front.main.NewsController;
 import com.lsw.controller.front.share.ShareController;
 import com.lsw.controller.front.user.AppUserController;
 
@@ -11,7 +12,8 @@ public class FrontRoute extends Routes {
         setBaseViewPath("/WEB-INF/view/front");
         add("/share", ShareController.class, "/share/"); // 分享页
         add("/app/user", AppUserController.class); // appuser
-        add("/app/main", MainController.class); // main
+        add("/app/news", NewsController.class); // appuser
+        add("/app", MainController.class); // main
 
     }
 

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/work/banner/form.html

@@ -83,7 +83,7 @@
                 vm.show = true;
                 vm.index = index;
                 document.getElementById("photo").src = objUrl;
-                cropper = getClipper(21 / 9, objUrl, 'photo');
+                cropper = getClipper(16 / 9, objUrl, 'photo');
             },
             getUri: function (file) {
                 var url = null;

+ 46 - 24
src/main/webapp/WEB-INF/view/admin/work/news/form.html

@@ -17,11 +17,12 @@
             <tr>
                 <td class="l" width="150">文章标题 <span>*</span></td>
                 <td>
-                    <input type="text" class="form-control" v-model="item.mTitle" placeholder="输入文章标题">
+                    <input type="text" class="form-control" name="mTitle" v-model="item.mTitle" placeholder="输入文章标题">
                 </td>
-                <td class="l">发布时间 <span>*</span></td>
+                <td class="l" width="150">发布时间 <span>*</span></td>
                 <td>
-                    <input type="date" class="form-control" placeholder="输入文章标题">
+                    <input type="text" class="form-control input-text Wdate" value="#(time)"
+                           onfocus="WdatePicker({maxDate:'%y-%M-%d',dateFmt:'yyyy-MM-dd HH:mm:ss'})" id="max">
                 </td>
             </tr>
             <tr>
@@ -34,11 +35,11 @@
                 <td class="l">文章栏目 <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>
+                        <option :value="c.id" v-for="c in colmun_list">{{c.mColumnName}}</option>
                     </select>
                 </td>
             </tr>
-            <!--<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">
@@ -46,12 +47,13 @@
                 </td>
             </tr>-->
             <tr>
-                <td class="l">文章状态 <span>*</span></td>
+                <td class="l">文章发布
+                    <span>*</span></td>
                 <td>
                     <el-switch
-                            v-model="item.isTop"
+                            v-model="item.mRelease"
                             active-color="#13ce66"
-                            inactive-color="#ff4949">
+                            >
                     </el-switch>
                 </td>
                 <td class="l">文章置顶</td>
@@ -59,10 +61,18 @@
                     <el-switch
                             v-model="item.isTop"
                             active-color="#13ce66"
-                            inactive-color="#ff4949">
+                            >
                     </el-switch>
                 </td>
             </tr>
+            #if(shiro.hasPermission('news:audit'))
+            <tr>
+                <td class="l" style="vertical-align: top;">文章审核  <span>*</span></td>
+                <td colspan="3">
+                    <label class="spa" :class="{active:item.mAudit==index}"  v-for="(audit,index) in audit_list" @click="item.mAudit=index">{{audit}}</label>
+                </td>
+            </tr>
+            #end
             <tr>
                 <td class="l" 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>
@@ -81,7 +91,7 @@
         </div>
     </div>
 </div>
-#set(layer=true,util=true,vue=true,cropper=true,element=true,ueditor=true)
+#set(layer=true,util=true,vue=true,cropper=true,element=true,ueditor=true,date=true)
 #@op()
 #@js()
 <script>
@@ -93,34 +103,44 @@
     var vm = new Vue({
         el: "#app",
         data: {
+            audit_list:['待审核','审核通过','审核不通过'],
             type_list:[{name:'时政信息',id:1},{name:'政策宣传',id:2}],
             colmun_list:[],
-            item: {mTitle:'',mContent:'',typeName:1,mRelease:0,columnId:1,isTop:false,mCove:''},
+            item: {mTitle:'',mContent:'',typeName:1,mRelease:true,columnId:1,isTop:false,mAudit:0,mCove:'',mTime:''},
             show: false,
             mCove: '',
             dataImage: '',
-            dialogVisible:false
+            select:false,
+            columnId:0,
         },
         mounted: function () {
-            if ('#(op)' == 'edit') {
-                //this.item =#(banner);
-                //this.mCove = this.item.mCove;
-                //this.item.mShow=this.item.mShow==0?true:false;
+            if ('#(op)' == 'edit'||'#(op)' == 'audit') {
+                this.item =#(news);
+                this.item.typeName=this.item.typeName=='时政信息'?1:2;
+                this.item.mRelease=this.item.mRelease==0?true:false;
+                this.item.isTop=this.item.isTop==0?false:true;
+                this.now=this.item.mAudit;
+                this.columnId=this.item.columnId;
             }
-            this.item.isTop=this.item.isTop==true?1:0;
-            this.getColmun(1);
+            this.getColmun(this.item.typeName);
         },
         methods: {
             //选择分类
             selected:function(){
+                this.select=true;
                 this.getColmun(vm.item.typeName);
             },
             //选择栏目
             getColmun:function(e){
+                console.log("zx4:"+this.item.columnId);
                 sendAjax("#(path)/admin/work/news/colmun_list",{type:e},function(res){
-                    vm.colmun_list=res;
-                    vm.item.columnId=res[0].id;
                     cancelLoding();
+                    vm.colmun_list=res;
+                    if(vm.select){
+                        vm.item.columnId=res[0].id;
+                    }else{
+                        vm.item.columnId=vm.columnId;
+                    }
                 });
             },
             //创建列表
@@ -165,10 +185,12 @@
         }
     })
     $("#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);
+            vm.item.isTop = vm.item.isTop == true ? 1 : 0;
+            vm.item.mRelease = vm.item.mRelease == true ? 0 :1;
+            vm.item.mContent = ue.getContent();
+            vm.item.mTime=$('#max').val();
+            var data = {news: JSON.stringify(vm.item)};
+            ajaxSubmit("#(path)/admin/work/news/#(op)", data);
     });
 </script>
 </body>

+ 50 - 9
src/main/webapp/WEB-INF/view/admin/work/news/list.html

@@ -1,8 +1,8 @@
 #set(title="新闻管理")
 #@header()
 <style>
-    .input-text{width: 120px!important;}
-    .toolbar .search{width: 500px;}
+    .input-text{width: 108px!important;}
+    .toolbar .search{width: 580px;}
 </style>
 <body>
 <div class="con">
@@ -28,6 +28,13 @@
                     <option :value="colmun.id" v-for="colmun in colmun_list">{{colmun.mColumnName}}</option>
                 </select>
             </div>
+            <div class="input-group-btn">
+                <!--文章栏目-->
+                <select class="form-control select" v-model="mAudit" @change="selected(3)">
+                    <option value="">全部状态</option>
+                    <option :value="audit.id" v-for="audit in state_list">{{audit.name}}</option>
+                </select>
+            </div>
             <input type="text" id="name" placeholder="输入文章名称" class="form-control">
             <span class="input-group-btn">
                 <button type="button" @click="search()" class="btn btn-primary">搜索</button>
@@ -49,19 +56,44 @@
         { label: '文章标题', name: 'mTitle',frozen: true,width:330},
         { label: '文章栏目', name: 'mColumnName'},
         { label: '文章归类', name: 'typeName'},
-        { label: '文章状态', name: 'mRelease',formatter: mShow},
-        { label: '是否置顶', name: 'isTop'},
+        { label: '是否审核', name: 'mAudit',formatter: mAudit},
+        { label: '是否发布', name: 'mRelease',formatter: mRelease},
+        { label: '是否置顶', name: 'isTop',formatter: 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) {
+    function mRelease(cellvalue, options, rowObject) {
         if (cellvalue == '0') {
-            return '<span class="label label-sm label-info">显示</span>';
+            return '<span class="label label-sm label-info">已发布</span>';
+        } else {
+            return '<span class="label label-sm label-danger">未发布</span>';
+        }
+    }
+    /**
+     *是否置顶
+     */
+    function isTop(cellvalue, options, rowObject) {
+        if (cellvalue == '1') {
+            return '<span class="label label-sm label-info">置顶</span>';
         } else {
-            return '<span class="label label-sm label-danger">不显示</span>';
+            return '<span class="label label-sm label-danger">否</span>';
+        }
+    }
+    /**
+     *是否审核
+     */
+    function mAudit(cellvalue, options, rowObject) {
+        if (cellvalue == '0') {
+            return '<span class="label label-sm label-danger">待审核</span>';
+        }
+        if (cellvalue == '1') {
+            return '<span class="label label-sm label-info">已审核</span>';
+        }
+        if (cellvalue == '2') {
+            return '<span class="label label-sm label-danger">审核不通过</span>';
         }
     }
     /**
@@ -71,6 +103,9 @@
         if (op == 'add') {
             openDialogDiy("添加新闻", "#(path)/admin/work/news/view?op=add", "85%", "95%");
         }
+        if (op == 'audit') {
+            openDialogDiy("编辑新闻轮播", "#(path)/admin/work/news/view?op=audit&id=" + selectedRow().id, "85%", "95%");
+        }
         if (op == 'edit') {
             openDialogDiy("编辑新闻轮播", "#(path)/admin/work/news/view?op=edit&id=" + selectedRow().id, "85%", "95%");
         }
@@ -84,7 +119,10 @@
             type:1,
             type_list:[{name:'时政信息',id:1},{name:'政策宣传',id:2}],
             colmun_list:[],
-            colmunId:''
+            state_list:[{name:'待审核',id:0},{name:'已审核',id:1},{name:'审核不通过',id:2}],
+            colmunId:'',
+            mAudit:''
+
         },
         mounted: function () {
             this.getColmun(1);
@@ -98,7 +136,10 @@
                     reloadGrid({type:this.type==1?'时政信息':'政策宣传',name:'',columnId:'',mRelease:''});
                 }
                 if(index==2){
-                    reloadGrid({columnId:this.colmunId,min:'',max:'',name:''});
+                    reloadGrid({columnId:this.colmunId});
+                }
+                if(index==3){
+                    reloadGrid({mAudit:this.mAudit});
                 }
             },
             //查询文章

+ 5 - 2
src/main/webapp/static/ui/css/style.min.css

@@ -6,7 +6,7 @@ h1,h2,h3,h4,h5,h6{font-weight:100}h1{font-size:30px}h2{font-size:24px}h3{font-si
 .con{}
 .toolbar{padding: 10px;background-color: #f5f5f6;box-shadow: 0 1px 6px #ccc;overflow: hidden;}
 .toolbar .search{width: 350px;}
-.bg{padding: 10px;}
+.bg{}
 .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;}
@@ -28,11 +28,14 @@ h1,h2,h3,h4,h5,h6{font-weight:100}h1{font-size:30px}h2{font-size:24px}h3{font-si
 .form-control.error{border: 1px solid #cc5965!important;background-color: #fbe2e2;}
 label.error{position:absolute;right:18px;top:21px;color:#ef392b;font-weight:normal;font-size:12px}
 .clear{clear: both;}
+#addForm{margin-bottom: 45px;}
 .object ul{list-style: none;margin-left: -40px;}
 .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;}
+.select{min-width: 90px;}
+.spa{padding: 4px 10px; font-size: 13px;margin:0px 5px;cursor: pointer;float: left;}
+.spa.active{background-color:#29b6f6;color: white;border-radius: 6px;}
 .refresh{background-color: #23c6c8;
     color: white;
     position: absolute;