手机通知公告
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index 0a2b535..2c5c6a0 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -35,6 +35,7 @@
 query.third.transdtl.result.cron=7 0/1 * * * ?
 payapi.sourcetype.checker.scheduler=7 3/10 * * * ?
 citizencard.dolosstask.cron=-
+send.delay.notice.task.cron=29 0/1 * * * ?
 ################################################
 # user password
 auth.password.bcrypt.length=10
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index bcdf83c..3bd9798 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -77,6 +77,8 @@
 VALUES (37, NULL, 1, NULL, '', '/user/card', '市民卡查询', 1, 19, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (38, NULL, 1, NULL, '', '/report/shoptodaybusiness', '商户当天统计表', 4, 20, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (39, NULL, 1, NULL, '', '/notice/index', '手机通知公告', 6, 3, '{tenantid}');
 
 
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
@@ -145,6 +147,8 @@
 VALUES ('ff8080816db87e27016db88be41f0015', 37, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
 VALUES ('4028ee9f6e5d95d8016e5d99e8d50012', 38, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('ff8080816f8d8258016f8d85e4d70005', 39, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
@@ -311,6 +315,21 @@
 VALUES (94, '', 37, '修改跳转', '/user/load4modifycard', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (95, '', 37, '修改', '/user/cardupdate', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (96, '', 39, '查询', '/notice/index', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (97, '', 39, '新增修改跳转', '/notice/load4add', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (98, '', 39, '新增修改', '/notice/edit', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (99, '', 39, '删除', '/notice/delete', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (100, '', 39, '发布跳转', '/notice/load4publish', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (101, '', 39, '发布', '/notice/publish', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (102, '', 39, '发布明细', '/notice/load4detail', '{tenantid}');
+
 
 INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
 VALUES ('ff8080816b7947ed016b795577300036', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
@@ -476,7 +495,20 @@
 VALUES ('ff8080816ecaebf8016ecaeedcec0004', 94, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
 VALUES ('ff8080816ecafb4e016ecafd58400005', 95, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
-
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816f8d8258016f8d85e4e20006', 96, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816fa2c2b7016fa2d809780030', 97, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816fa2c2b7016fa2d80978002e', 98, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816fa2c2b7016fa2d809780031', 99, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816fa2c2b7016fa2d809780032', 100, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816fa2c2b7016fa2d80978002f', 101, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816fa2c2b7016fa2d80977002d', 102, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 
 INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
diff --git a/payapi/src/main/resources/static/libs/custom.js b/payapi/src/main/resources/static/libs/custom.js
index d034401..0307a2d 100644
--- a/payapi/src/main/resources/static/libs/custom.js
+++ b/payapi/src/main/resources/static/libs/custom.js
@@ -104,8 +104,9 @@
     }
 
     root.isempty = function (s) {
-        if (s == null || s.length == 0)
+        if (undefined == s || null == s || '' == s || s.length == 0) {
             return true;
-        return /\s/.test(s);
+        }
+        return false;
     }
 }(window));
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/notice/add.html b/payapi/src/main/resources/templates/system/notice/add.html
new file mode 100644
index 0000000..1247eda
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/notice/add.html
@@ -0,0 +1,85 @@
+<form id="notice-add-form" lay-filter="notice-add-form" class="layui-form model-form">
+    <input name="noticeId" id="hidden-notice-add-msgid" type="hidden"/>
+    <div class="layui-form-item">
+        <label class="layui-form-label"><span style="color: red;">*</span>推送终端</label>
+        <div class="layui-input-block">
+            <input type="radio" name="platform" value="all" title="全部" checked/>
+            <input type="radio" name="platform" value="android" title="安卓手机"/>
+            <input type="radio" name="platform" value="ios" title="苹果手机"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label"><span style="color: red;">*</span>公告标题</label>
+        <div class="layui-input-block">
+            <input name="title" placeholder="请填写标题,不能超过16个字" type="text" class="layui-input" maxlength="16"
+                   autocomplete="off" lay-verify="required" required/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label"><span style="color: red;">*</span>公告内容</label>
+        <div class="layui-input-block">
+            <textarea name="content" placeholder="请输入内容,不能超过200个字" autocomplete="off" maxlength="200" class="layui-textarea" rows="6" lay-verify="required" required></textarea>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">链接地址</label>
+        <div class="layui-input-block">
+            <textarea name="linkurl" placeholder="https://www.baidu.com" autocomplete="off" class="layui-textarea" lay-verify="linkurl"></textarea>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="notice-add-form-submit" lay-submit id="notice-add-submit-btn">保存</button>
+    </div>
+</form>
+
+<script>
+    layui.use(['layer', 'admin', 'form'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+
+        form.render('radio');
+        form.verify({
+            linkurl: function (value, item) {
+                if ("" != value) {
+                    if (!/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/.test(value)) {
+                        return "链接格式不正确";
+                    }
+                }
+            }
+        });
+
+        var bean = admin.getTempData('t_noticeTmp');
+        if (bean) {
+            form.val('notice-add-form', bean);
+        }
+        // 表单提交事件
+        form.on('submit(notice-add-form-submit)', function (data) {
+            layer.load(2);
+            var token = $("meta[name='_csrf_token']").attr("value");
+            var param = data.field;
+            param["_csrf"] = token;
+            admin.go('[[@{/notice/edit}]]', param, function (result) {
+                console.log(result);
+                layer.closeAll('loading');
+                if (result.code == 200) {
+                    layer.msg(result.msg, {icon: 1});
+                    admin.finishPopupCenter();
+                } else if (result.code == 401) {
+                    layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                    return;
+                } else {
+                    layer.msg(result.msg, {icon: 2});
+                }
+            }, function (ret) {
+                console.log(ret);
+                admin.errorBack(ret);
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/notice/details.html b/payapi/src/main/resources/templates/system/notice/details.html
new file mode 100644
index 0000000..e2de243
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/notice/details.html
@@ -0,0 +1,86 @@
+<form id="notice-publish-details" lay-filter="notice-publish-details" class="layui-form model-form" style="padding-top: 20px;">
+    <div class="layui-form-item">
+        <label class="layui-form-label">标题</label>
+        <div class="layui-input-block">
+            <input name="title" type="text" class="layui-input" readonly="readonly"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">内容</label>
+        <div class="layui-input-block">
+            <textarea name="content" class="layui-textarea" readonly="readonly" rows="5"></textarea>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <input type="hidden" name="noticeId" id="notice-publish-details-noticeId"/>
+        <div style="margin-left: 45px;" id="noticePublishDetailTableDiv">
+            <table class="layui-table" id="noticePublishDetailTable"
+                   lay-filter="noticePublishDetailTable-filter"></table>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">关闭</button>
+    </div>
+</form>
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'table'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var table = layui.table;
+
+        var bean = admin.getTempData('t_noticePublishDetail');
+        if (bean) {
+            if (isempty(bean.linkurl)) {
+                form.val('notice-publish-details', {
+                    noticeId: bean.id,
+                    title: bean.title,
+                    content: bean.content
+                });
+            } else {
+                form.val('notice-publish-details', {
+                    noticeId: bean.id,
+                    title: bean.title,
+                    content: bean.content + '\n\n链接:' + bean.linkurl
+                });
+            }
+        }
+
+        table.render({
+            elem: '#noticePublishDetailTable',
+            url: '[[@{/notice/detaillist}]]',
+            where: {
+                noticeId: $("#notice-publish-details-noticeId").val()
+            },
+            page: false,
+            size: 'sm',
+            height: 275,
+            cols: [
+                [
+                    {type: 'numbers', title: '编号', align: 'center', width: 65},
+                    {field: 'publisher', title: '发布者', align: 'center', width: 100},
+                    {
+                        field: 'createtime', title: '发布时间', align: 'right', width: 150, templet: function (e) {
+                            return admin.formatDate(e.createtime);
+                        }
+                    },
+                    {
+                        field: 'pushtime', title: '推送时间', align: 'right', width: 175, templet: function (e) {
+                            if (null != e.pushtime) {
+                                return admin.formatDate(e.pushtime);
+                            } else if (null != e.pushSettime) {
+                                return '<span style=\"color:red;\">预计</span> ' + admin.formatDate(e.pushSettime);
+                            } else {
+                                return '-';
+                            }
+                        }
+                    },
+                    {field: 'pushresult', title: '备注', align: 'center'},
+                ]
+            ]
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/notice/index.html b/payapi/src/main/resources/templates/system/notice/index.html
new file mode 100644
index 0000000..02c000c
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/notice/index.html
@@ -0,0 +1,250 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">手机通知公告</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">系统中心</a>
+          <a><cite>手机通知公告</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form" lay-filter="notice-search-form">
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">创建日期</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="startdate" id="notice-search-startdate" placeholder="起始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline">
+                        <input type="text" name="enddate" id="notice-search-enddate" placeholder="截止日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right: 20px;">
+                    <label class="layui-form-label">标题</label>
+                    <div class="layui-input-block" style="width: 265px;">
+                        <input type="text" name="searchkey" id="notice-search-searchkey" maxlength="20"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right: 20px;margin-top: 10px;">
+                    <div class="layui-input-block" style="width: 200px;margin-left: 10px;">
+                        <button id="notice-search-btn" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜 索
+                        </button>
+                        <button id="notice-search-btn-reset" class="layui-btn layui-btn-primary">清 空</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            <button class="layui-btn layui-btn-sm" id="btn-notice-add"><i
+                    class="layui-icon">&#xe654;</i>新 增
+            </button>
+        </div>
+        <table class="layui-table" id="noticeSearchTable" lay-filter="noticeSearchTable-filter"></table>
+    </div>
+</div>
+
+<!-- 表格操作列 -->
+<script type="text/html" id="notice-table-bar">
+    <a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="publish">发布</a>
+    {{# if(d.sendcnt == 0){ }}
+    <a class="layui-btn layui-btn-xs" lay-event="modify">修改</a>
+    <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delete">删除</a>
+    {{# } else{ }}
+    <a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="detail">发布详情</a>
+    {{# } }}
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'laydate'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+
+        laydate.render({
+            elem: '#notice-search-startdate',
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#notice-search-enddate',
+            trigger: 'click'
+        });
+
+        table.render({
+            elem: '#noticeSearchTable',
+            url: '[[@{/notice/list}]]',
+            page: true,
+            cols: [
+                [
+                    {align: 'left', title: '操作', width: 170, toolbar: '#notice-table-bar', fixed: 'left'},
+                    {field: 'title', title: '消息标题', align: 'left', width: 160, fixed: 'left', sort: true},
+                    {field: 'content', title: '消息内容', align: 'left'},
+                    {
+                        field: 'platform',
+                        title: '推送终端',
+                        align: 'center',
+                        width: 120,
+                        sort: true,
+                        templet: function (d) {
+                            if ('all' == d.platform) {
+                                return '全部手机';
+                            } else if ('ios' == d.platform) {
+                                return '苹果手机';
+                            } else if ('android' == d.platform) {
+                                return '安卓手机';
+                            } else {
+                                return d.platform;
+                            }
+                        }
+                    },
+                    {field: 'sendcnt', title: '发布次数', align: 'center', width: 120, sort: true},
+                    {field: 'creator', title: '创建者', align: 'center', width: 140, sort: true},
+                    {
+                        field: 'createdate',
+                        title: '创建时间',
+                        align: 'center',
+                        width: 170,
+                        sort: true,
+                        templet: function (d) {
+                            return admin.formatDate(d.createdate + '' + d.createtime);
+                        }
+                    },
+                    {
+                        field: 'lastsaved',
+                        title: '最后更新时间',
+                        align: 'center',
+                        width: 170,
+                        sort: true,
+                        templet: function (d) {
+                            return admin.formatDate(d.lastsaved);
+                        }
+                    }
+                ]
+            ]
+        });
+
+        $("#notice-search-btn").click(function () {
+            table.reload('noticeSearchTable', {
+                where: {
+                    startdate: $("#notice-search-startdate").val(),
+                    enddate: $("#notice-search-enddate").val(),
+                    searchkey: $("#notice-search-searchkey").val()
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#notice-search-btn-reset").click(function () {
+            $("#notice-search-startdate").val("");
+            $("#notice-search-enddate").val("");
+            $("#notice-search-searchkey").val("");
+        });
+
+        $("#btn-notice-add").click(function () {
+            showNoticeModel("新增公告", {
+                noticeId: '',
+                platform: 'all',
+                title: '',
+                content: '',
+                linkurl: ''
+            })
+        });
+
+        function showNoticeModel(title, data) {
+            admin.putTempData('t_noticeTmp', data);
+            admin.popupCenter({
+                title: title,
+                area: '650px',
+                path: '[[@{/notice/load4add}]]',
+                finish: function () {
+                    table.reload('noticeSearchTable', {});
+                }
+            });
+        }
+
+        function showNoticePublishModel(data) {
+            admin.putTempData('t_noticePubidTmp', {
+                noticeId: data.id,
+                pushmode: 'atonce',
+                settime: ''
+            });
+            admin.popupCenter({
+                title: '发布通知公告【' + data.title + '】',
+                area: '550px',
+                path: '[[@{/notice/load4publish}]]',
+                finish: function () {
+                    table.reload('noticeSearchTable', {});
+                }
+            });
+        }
+
+        function deleteNotice(data) {
+            layer.confirm('确定删除公告【' + data.title + '】吗?', function (i) {
+                layer.close(i);
+                layer.load(2);
+                admin.go('[[@{/notice/delete}]]', {
+                    noticeId: data.id,
+                    _csrf: $("meta[name='_csrf_token']").attr("value")
+                }, function (data) {
+                    layer.closeAll('loading');
+                    if (data.code == 200) {
+                        layer.msg(data.msg, {icon: 1});
+                    } else if (data.code == 401) {
+                        layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else {
+                        layer.msg(data.msg, {icon: 2});
+                    }
+                    table.reload('noticeSearchTable');
+                }, function (ret) {
+                    console.log(ret);
+                    admin.errorBack(ret);
+                });
+            })
+        }
+
+        function showNoticePublishDetailsModel(data) {
+            admin.putTempData('t_noticePublishDetail', data);
+            admin.popupCenter({
+                title: '通知公告【' + data.title + '】发布详情',
+                area: '750px',
+                path: '[[@{/notice/load4detail}]]',
+                finish: function () {
+                    table.reload('noticeSearchTable', {});
+                }
+            });
+        }
+
+
+        //监听单元格
+        table.on('tool(noticeSearchTable-filter)', function (obj) {
+            var data = obj.data;
+            switch (obj.event) {
+                case "publish":
+                    showNoticePublishModel(data);
+                    break;
+                case "modify":
+                    showNoticeModel("修改公告", {
+                        noticeId: data.id,
+                        platform: data.platform,
+                        title: data.title,
+                        content: data.content,
+                        linkurl: data.linkurl
+                    });
+                    break;
+                case "delete":
+                    deleteNotice(data);
+                    break;
+                case "detail":
+                    showNoticePublishDetailsModel(data);
+                    break;
+            }
+        });
+    });
+</script>
diff --git a/payapi/src/main/resources/templates/system/notice/publish.html b/payapi/src/main/resources/templates/system/notice/publish.html
new file mode 100644
index 0000000..621749b
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/notice/publish.html
@@ -0,0 +1,85 @@
+<form id="notice-publish-form" lay-filter="notice-publish-form" class="layui-form model-form">
+    <input name="noticeId" id="hidden-notice-publish-noticeid" type="hidden"/>
+    <div class="layui-form-item">
+        <label class="layui-form-label"><span style="color: red;">*</span>发布时间</label>
+        <div class="layui-input-block">
+            <input type="radio" name="pushmode" value="atonce" title="立即发布" lay-filter="notice-publish-form-pushmode-filter"/>
+            <input type="radio" name="pushmode" value="delay" title="定时发布" lay-filter="notice-publish-form-pushmode-filter"/>
+        </div>
+    </div>
+    <div class="layui-form-item" id="hidden-div-set-delaytime" style="display: none;">
+        <label class="layui-form-label"><span style="color: red;">*</span>设定时间</label>
+        <div class="layui-input-block">
+            <input name="settime" type="text" id="notice-publish-form-settime" style="width: 195px;" class="layui-input" autocomplete="off" lay-verify="pushmode"/>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="notice-publish-form-submit" lay-submit id="notice-publish-submit-btn">保存</button>
+    </div>
+</form>
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'laydate'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var laydate = layui.laydate;
+
+        form.render('radio');
+        form.verify({
+            pushmode: function (value, item) {
+                var pushmode = $("#notice-publish-form").find("input[name='pushmode']:checked").val();
+                if('atonce' != pushmode && isempty(value)){
+                    return "定时发布请设定时间";
+                }
+            }
+        });
+        form.on('radio(notice-publish-form-pushmode-filter)', function (data) {
+            if('atonce'==data.value){
+                $("#notice-publish-form-settime").val("");
+                $("#hidden-div-set-delaytime").hide();
+            }else{
+                $("#hidden-div-set-delaytime").show();
+            }
+        });
+        laydate.render({
+            elem: '#notice-publish-form-settime',
+            type: 'datetime',
+            min: moment().locale('zh-cn').format('YYYY-MM-DD HH:mm:ss'),
+            trigger: 'click'
+        });
+        var bean = admin.getTempData('t_noticePubidTmp');
+        if (bean) {
+            form.val('notice-publish-form', bean);
+        }
+
+        // 表单提交事件
+        form.on('submit(notice-publish-form-submit)', function (data) {
+            layer.load(2);
+            var param = data.field;
+            var token = $("meta[name='_csrf_token']").attr("value");
+            param["_csrf"] = token;
+            admin.go('[[@{/notice/publish}]]', param, function (result) {
+                console.log(result);
+                layer.closeAll('loading');
+                if (result.code == 200) {
+                    layer.msg(result.msg, {icon: 1});
+                    admin.finishPopupCenter();
+                } else if (result.code == 401) {
+                    layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                    return;
+                } else {
+                    layer.msg(result.msg, {icon: 2});
+                }
+            }, function (ret) {
+                console.log(ret);
+                admin.errorBack(ret);
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file