Browse Source

新增通知管理相关代码

olym 8 years ago
parent
commit
7416658d95

+ 0 - 12
config/menu.js

@@ -35,18 +35,6 @@ let menuData = {
         url: '/notify',
         url: '/notify',
         name: 'notify',
         name: 'notify',
         iconClass: 'glyphicon glyphicon-bell',
         iconClass: 'glyphicon glyphicon-bell',
-        children: {
-            'index' : {
-                title: '用户通知',
-                url: '/notify',
-                name: 'index',
-            },
-            'company' : {
-                title: '内部通知',
-                url: '/notify/company',
-                name: 'company',
-            }
-        }
     },
     },
     'version': {
     'version': {
         title: '编办管理',
         title: '编办管理',

+ 176 - 2
modules/users/controllers/notify_controller.js

@@ -6,6 +6,8 @@
  * @version
  * @version
  */
  */
 import BaseController from "../../common/base/base_controller";
 import BaseController from "../../common/base/base_controller";
+import MessageModel from "../models/message_model";
+import Config from "../../../config/config";
 
 
 class NotifyController extends BaseController {
 class NotifyController extends BaseController {
 
 
@@ -16,13 +18,185 @@ class NotifyController extends BaseController {
      * @param {object} response
      * @param {object} response
      * @return {void}
      * @return {void}
      */
      */
-    index(request, response) {
+    async index(request, response) {
+        let messageModel = new MessageModel();
+        let type = request.query.type;
+        type = type === undefined ? messageModel.USER : type;
+        type = parseInt(type);
+        let messageList = await messageModel.getList({message_type: type});
+
+        // 获取消息总数
+        let total = await messageModel.count();
+
+        // 获取用户通知总数
+        let userMessageTotal = await messageModel.count({message_type: messageModel.USER});
+        // 获取内部通知总数
+        let systemMessageTotal = await messageModel.count({message_type: messageModel.SYSTEM});
+
+        // 分页数据
+        let page = request.query.page === undefined ? 1 : request.query.page;
+        let pageData = {
+            current: page,
+            total: parseInt(total / Config.pageSize),
+            queryData: response.locals.urlQuery
+        };
+
         let renderData = {
         let renderData = {
-            layout: 'users/views/layout/layout'
+            layout: 'users/views/layout/layout',
+            messageList: messageList,
+            pages: pageData,
+            userMessageTotal: userMessageTotal,
+            systemMessageTotal: systemMessageTotal,
+            type: type
         };
         };
         response.render('users/views/notify/index', renderData);
         response.render('users/views/notify/index', renderData);
     }
     }
 
 
+    /**
+     * 新增消息页面
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    add(request, response) {
+        let messageModel = new MessageModel();
+        let type = request.query.type;
+        type = type === undefined ? messageModel.USER : type;
+        type = parseInt(type);
+        let renderData = {
+            layout: 'users/views/layout/layout',
+            messageData: [],
+            type: type
+        };
+        response.render('users/views/notify/save', renderData);
+    }
+
+    /**
+     * 新增操作
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    addMessage(request, response) {
+        let url = '/notify';
+        try {
+            let sessionUserData = request.session.managerData;
+            let messageModel = new MessageModel();
+            let result = messageModel.addData(request.body, sessionUserData.username);
+
+            if (!result) {
+                throw '新增信息失败';
+            }
+        } catch (error) {
+            console.log(error);
+            url = request.headers.referer;
+        }
+
+        response.redirect(url);
+    }
+
+    /**
+     * 编辑消息
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return
+     */
+    async modify(request, response) {
+        let id = request.params.id;
+        if (id <= 0) {
+            return response.redirect('/notify');
+        }
+
+        // 查找对应数据
+        let messageModel = new MessageModel();
+        let messageData = await messageModel.findDataByCondition({_id: id});
+
+        let renderData = {
+            layout: 'users/views/layout/layout',
+            messageData: messageData,
+        };
+        response.render("users/views/notify/save", renderData);
+    }
+
+    /**
+     * 修改消息
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    async modifyMessage(request, response) {
+        let id = request.params.id;
+
+        try {
+            let sessionUserData = request.session.managerData;
+            let modifyData = request.body;
+            modifyData.last_update = sessionUserData.username;
+            // 修改对应数据
+            let messageModel = new MessageModel();
+            let result = messageModel.modifyData(id, modifyData);
+
+            if (!result) {
+                throw '修改数据失败';
+            }
+        } catch (error) {
+            console.log(error);
+        }
+        response.redirect(request.headers.referer);
+    }
+
+    /**
+     * 删除对应消息
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    async delete(request, response) {
+        let id = request.params.id;
+
+        try {
+            // 修改对应数据
+            let messageModel = new MessageModel();
+            let result = await messageModel.deleteById(id, true);
+
+            if (!result) {
+                throw '删除数据失败';
+            }
+        } catch (error) {
+            console.log(error);
+        }
+        response.redirect('/notify');
+    }
+
+    /**
+     * 发布消息
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    release(request, response) {
+        let id = request.params.id;
+
+        try {
+            let messageModel = new MessageModel();
+            let result = messageModel.release(id);
+
+            if (!result) {
+                throw '发布消息失败';
+            }
+        } catch (error) {
+            console.log(error);
+        }
+
+        response.redirect(request.headers.referer);
+    }
+
+
 }
 }
 
 
 export default NotifyController;
 export default NotifyController;

+ 139 - 0
modules/users/models/message_model.js

@@ -0,0 +1,139 @@
+/**
+ * 消息业务逻辑
+ *
+ * @author CaiAoLin
+ * @date 2017/9/21
+ * @version
+ */
+import BaseModel from "../../common/base/base_model";
+import MessageSchema from "../models/schemas/message";
+
+class MessageModel extends BaseModel {
+
+    /**
+     * 用户通知类型
+     *
+     * @var {Number}
+     */
+    USER = 1;
+
+    /**
+     * 内部通知类型
+     *
+     * @var {Number}
+     */
+    SYSTEM = 2;
+
+    /**
+     * 构造函数
+     *
+     * @return {void}
+     */
+    constructor() {
+        let parent = super();
+        parent.model = MessageSchema;
+        parent.init();
+    }
+
+    /**
+     * 设置场景
+     *
+     * @param {string} scene
+     * @return {void}
+     */
+    setScene(scene = '') {
+        switch (scene) {
+            // 新增
+            case 'add':
+                this.model.schema.path('message_type').required(true);
+                this.model.schema.path('title').required(true);
+                this.model.schema.path('content').required(true);
+                break;
+            // 修改
+            case 'modify':
+                this.model.schema.path('title').required(true);
+                this.model.schema.path('content').required(true);
+                break;
+        }
+    }
+
+    /**
+     * 获取列表
+     *
+     * @param {object} condition
+     * @param {number} page
+     * @param {Number} pageSize
+     * @return {promise}
+     */
+    async getList(condition = null, page = 1, pageSize = 30) {
+        page = parseInt(page);
+        page = page <= 1 ? 1 : page;
+        let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize)};
+
+        let userList = await this.db.find(condition, null, option);
+        userList = userList.length > 0 ? userList : [];
+
+        return userList;
+    }
+
+    /**
+     * 新增消息
+     *
+     * @param {Object} data
+     * @param {String} creator
+     * @return {Promise}
+     */
+    async addData(data, creator) {
+        let result = false;
+
+        if (Object.keys(data).length <= 0 || creator === '') {
+            return result;
+        }
+
+        // 设置场景
+        this.setScene('add');
+
+        data.create_time = new Date().getTime();
+        data.creator = creator;
+
+        result = await this.db.create(data);
+
+        return result;
+    }
+
+    /**
+     * 修改消息
+     *
+     * @param {Number} id
+     * @param {Object} data
+     * @return {Promise}
+     */
+    async modifyData(id, data) {
+        let messageData = await this.findDataByCondition({_id: id});
+        if (messageData === null) {
+            throw '不存在对应数据';
+        }
+
+        this.setScene('modify');
+        data.update_time = new Date().getTime();
+        return await this.updateById(id, data);
+    }
+
+    /**
+     * 发布消息
+     *
+     * @param {Number} id
+     * @return {Promise}
+     */
+    async release(id) {
+        let data = {
+            status: 1,
+            release_time: new Date().getTime()
+        };
+
+        return await this.updateById(id, data);
+    }
+
+}
+
+export default MessageModel;

+ 49 - 0
modules/users/models/schemas/message.js

@@ -0,0 +1,49 @@
+/**
+ * 消息通知数据模型
+ *
+ * @author CaiAoLin
+ * @date 2017/9/21
+ * @version
+ */
+import mongoose from "mongoose";
+
+let Schema = mongoose.Schema;
+let collectionName = 'message';
+let modelSchema = {
+    // 消息标题
+    title: String,
+    // 消息内容
+    content: String,
+    // 消息类型
+    message_type: {
+        type: Number,
+        default: 1
+    },
+    // 消息状态
+    status: {
+        type: Number,
+        default: 0
+    },
+    // 发布时间
+    release_time: {
+        type: Number,
+        default: 0
+    },
+    // 创建时间
+    create_time: Number,
+    // 最后修改时间
+    update_time: {
+        type: Number,
+        default: 0
+    },
+    // 创建者
+    creator: String,
+    // 最后修改人
+    last_update: {
+        type: String,
+        default: ''
+    }
+
+};
+let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
+export {model as default, collectionName as collectionName};

+ 7 - 0
modules/users/routes/notify_route.js

@@ -14,6 +14,13 @@ const notifyController = new NotifyController();
 module.exports =function (app) {
 module.exports =function (app) {
     // action定义区域
     // action定义区域
     router.get('/', notifyController.auth, notifyController.init, notifyController.index);
     router.get('/', notifyController.auth, notifyController.init, notifyController.index);
+    router.get('/add', notifyController.auth, notifyController.init, notifyController.add);
+    router.get('/modify/:id', notifyController.auth, notifyController.init, notifyController.modify);
+    router.get('/delete/:id', notifyController.auth, notifyController.init, notifyController.delete);
+    router.get('/release/:id', notifyController.auth, notifyController.init, notifyController.release);
+
+    router.post('/add', notifyController.auth, notifyController.init, notifyController.addMessage);
+    router.post('/modify/:id', notifyController.auth, notifyController.init, notifyController.modifyMessage);
 
 
     app.use("/notify", router);
     app.use("/notify", router);
 };
 };

+ 14 - 0
web/users/js/message.js

@@ -0,0 +1,14 @@
+/**
+ * 消息管理相关js
+ *
+ * @author CaiAoLin
+ * @date 2017/9/21
+ * @version
+ */
+$(document).ready(function() {
+    // 保存按钮
+    $("#save").click(function() {
+        $("form").submit();
+    });
+
+});

+ 15 - 0
web/users/views/notify/common.html

@@ -0,0 +1,15 @@
+<div class="panel-sidebar">
+    <div class="panel-title">
+        <div class="title-bar">
+            <h2><%= type === 1 ? '用户' : '内部' %>通知</h2>
+        </div>
+    </div>
+    <div class="scrollbar-auto">
+        <div class="nav-box">
+            <ul class="nav-list list-unstyled">
+                <li <% if (type === 1) {%>class="active"<% } %>><a href="/notify"><span>用户通知</span></a></li>
+                <li <% if (type === 2) {%>class="active"<% } %>><a href="/notify?type=2"><span>内部通知</span></a></li>
+            </ul>
+        </div>
+    </div>
+</div>

+ 15 - 43
web/users/views/notify/index.html

@@ -1,9 +1,9 @@
-<%include ../layout/second_menu.html %>
+<%include ./common.html %>
 <div class="panel-content">
 <div class="panel-content">
     <div class="panel-title">
     <div class="panel-title">
         <div class="title-main">
         <div class="title-main">
-            <h2>用户通知
-                <a href="news-add.html" class="btn btn-primary btn-sm pull-right">新建通知</a></h2>
+            <h2><%= type === 1 ? '用户' : '内部' %>通知
+                <a href="/notify/add?type=<%= type %>" class="btn btn-primary btn-sm pull-right">新建通知</a></h2>
         </div>
         </div>
     </div>
     </div>
     <div class="content-wrap">
     <div class="content-wrap">
@@ -63,51 +63,23 @@
                 </tr>
                 </tr>
                 </thead>
                 </thead>
                 <tbody>
                 <tbody>
+                <% messageList.forEach(function(message) {%>
                 <tr>
                 <tr>
-                    <td><a href="javascript:void(0)" data-toggle="modal" data-target="#view">标题A chick me</a></td>
-                    <td>陈特</td>
-                    <td>2017-03-01 09:03:09</td>
-                    <td><a href="" class="btn btn-xs">编辑</a></td>
+                    <td><a href="javascript:void(0)" data-toggle="modal" data-target="#view"><%= message.title %></a></td>
+                    <td><%= message.creator %></td>
+                    <td><%= message.release_time === 0 ? '未发布' : moment(message.release_time).format('YYYY-MM-DD HH:mm:ss') %></td>
+                    <td>
+                        <a href="/notify/modify/<%= message._id %>" class="btn btn-xs">编辑</a>
+                        <% if(message.status === 0) { %>
+                        <a href="/notify/release/<%= message._id %>" class="btn btn-xs">发布</a>
+                        <% } %>
+                    </td>
                 </tr>
                 </tr>
-                <tr class="warning">
-                    <td><a href="#">标题B</a></td>
-                    <td>陈特</td>
-                    <td>未发布</td>
-                    <td><a href="" class="btn btn-xs">编辑</a></td>
-                </tr>
-                <tr>
-                    <td><a href="#">标题C</a></td>
-                    <td>陈特</td>
-                    <td>2017-03-01 09:03:09</td>
-                    <td><a href="" class="btn btn-xs">编辑</a></td>
-                </tr>
-                <tr>
-                    <td><a href="#">标题D</a></td>
-                    <td>陈特</td>
-                    <td>2017-03-01 09:03:09</td>
-                    <td><a href="" class="btn btn-xs">编辑</a></td>
-                </tr>
-
+                <% }); %>
                 </tbody>
                 </tbody>
             </table>
             </table>
             <nav aria-label="Page navigation">
             <nav aria-label="Page navigation">
-                <ul class="pagination pagination-sm">
-                    <li class="disabled">
-                        <a href="#" aria-label="Previous">
-                            <span aria-hidden="true">&laquo;</span>
-                        </a>
-                    </li>
-                    <li class="active"><a href="#">1</a></li>
-                    <li><a href="#">2</a></li>
-                    <li><a href="#">3</a></li>
-                    <li><a href="#">4</a></li>
-                    <li><a href="#">5</a></li>
-                    <li>
-                        <a href="#" aria-label="Next">
-                            <span aria-hidden="true">&raquo;</span>
-                        </a>
-                    </li>
-                </ul>
+                <%include ../layout/page.html %>
             </nav>
             </nav>
         </div>
         </div>
     </div>
     </div>

+ 49 - 0
web/users/views/notify/save.html

@@ -0,0 +1,49 @@
+<%include ./common.html %>
+<div class="panel-content">
+    <form method="post" action="/notify/<% if (messageData._id === undefined) { %>add<% }else{ %>modify/<%= messageData._id.toString() %><% } %>" enctype="application/x-www-form-urlencoded">
+        <div class="panel-title">
+            <div class="title-main">
+                <h2><% if (messageData._id === undefined) { %>新建通知<% }else{ %>修改通知<% } %>
+                    <% if (messageData._id === undefined) { %>
+                    <!--新建通知-->
+                    <a href="javascript:void(0);" class="btn btn-default btn-sm pull-right" id="save">保存</a>
+                    <% }else{ %>
+                    <!--编辑通知-->
+                    <a href="javascript:void(0);" class="btn btn-primary btn-sm pull-right" id="save">确定修改</a>
+                    <a href="/notify/delete/<%= messageData._id.toString() %>" class="btn btn-default btn-sm pull-right"><span class="text-danger">删除</span></a>
+                    <% if (messageData.last_update !== undefined) {%>
+                    <span class="pull-right"><h6 class="text-muted">最近保存 <%= messageData.last_update %><br><%= moment(messageData.update_time).format('YYYY-MM-DD HH:mm:ss') %></h6></span>
+                    <% } %>
+                    <% } %>
+                </h2>
+            </div>
+        </div>
+        <div class="content-wrap">
+            <div class="c-body">
+                <form>
+                    <div class="form-group">
+                        <label for="title">通知类型</label>
+                        <div class="radio">
+                            <label>
+                                <input type="radio" name="message_type" value="1" <% if(messageData.message_type === 1) {%>checked="checked"<% } %>> 用户通知
+                            </label>
+                            <label>
+                                <input type="radio" name="message_type" value="2" <% if(messageData.message_type === 2) {%>checked="checked"<% } %>> 内部通知
+                            </label>
+                        </div>
+                    </div>
+                    <div class="form-group has-feedback">
+                        <label for="title">标题</label>
+                        <input type="text" class="form-control" name="title" id="title" placeholder="输入通知标题" value="<%= messageData.title %>">
+                        <span class="form-control-feedback" aria-hidden="true">0/20</span>
+                    </div>
+                    <div class="form-group">
+                        <label for="content">正文</label>
+                        <textarea class="form-control" name="content" id="content" rows="8"><%= messageData.content %></textarea>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </form>
+</div>
+<script type="text/javascript" src="/web/users/js/message.js"></script>