页面
diff --git a/src/main/resources/db/migration/V1.0__init_data.sql b/src/main/resources/db/migration/V1.0__init_data.sql
index a28028b..e735951 100644
--- a/src/main/resources/db/migration/V1.0__init_data.sql
+++ b/src/main/resources/db/migration/V1.0__init_data.sql
@@ -2,7 +2,7 @@
 values ('100001', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal', 'ROLE_THIRD_ADMIN');
 INSERT INTO tb_operator(
 	operid, closedate, opendate, opercode, opername, operpwd, opertype, status)
-	VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', '', 'normal');
+	VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal');
 
 INSERT INTO tb_role(
 	roleid, createtime, editflag, lastsaved, rolecode, roledesc, rolename)
@@ -19,4 +19,19 @@
 values ('2','1','管理员维护',1,'#','layui-icon-set',1);
 
 Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('1','1','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('2','2','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
\ No newline at end of file
+Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('2','2','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+
+Insert into TB_FUNCTION (ID,CREATETIME,ISLEAF,LASTSAVED,MENUICON,MENUURL,NAME,ORDERNUM,PARENTID) values ('1',null,0,null,'layui-icon-home','#','主页',1,'-1');
+Insert into TB_FUNCTION (ID,CREATETIME,ISLEAF,LASTSAVED,MENUICON,MENUURL,NAME,ORDERNUM,PARENTID) values ('2',null,1,null,'layui-icon-home','/home/console','控制台',1,'1');
+Insert into TB_FUNCTION (ID,CREATETIME,ISLEAF,LASTSAVED,MENUICON,MENUURL,NAME,ORDERNUM,PARENTID) values ('3',null,0,null,'layui-icon-set','#','系统中心',2,'-1');
+Insert into TB_FUNCTION (ID,CREATETIME,ISLEAF,LASTSAVED,MENUICON,MENUURL,NAME,ORDERNUM,PARENTID) values ('4',null,1,null,'layui-icon-set','/operator/index','管理员维护',1,'3');
+Insert into TB_FUNCTION (ID,CREATETIME,ISLEAF,LASTSAVED,MENUICON,MENUURL,NAME,ORDERNUM,PARENTID) values ('5',null,1,null,'layui-icon-set','/role/index','角色管理',2,'3');
+
+
+Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('5','5','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('1','1','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('2','2','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('3','3','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('4','4','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+
+commit;
diff --git a/src/main/resources/static/custom/css/console.css b/src/main/resources/static/custom/css/console.css
new file mode 100755
index 0000000..1e550bf
--- /dev/null
+++ b/src/main/resources/static/custom/css/console.css
@@ -0,0 +1,29 @@
+/** 卡片轮播图样式 */
+.admin-carousel .layui-carousel-ind {
+    position: absolute;
+    top: -41px;
+    text-align: right;
+}
+
+.admin-carousel .layui-carousel-ind ul {
+    background: 0 0;
+}
+
+.admin-carousel .layui-carousel-ind li {
+    background-color: #e2e2e2;
+}
+
+.admin-carousel .layui-carousel-ind li.layui-this {
+    background-color: #999;
+}
+
+/** 广告位轮播图 */
+.admin-news .layui-carousel-ind {
+    height: 45px;
+}
+
+.admin-news a {
+    display: block;
+    line-height: 60px;
+    text-align: center;
+}
diff --git a/src/main/resources/static/libs/q.js b/src/main/resources/static/libs/q.js
index a809434..b235b20 100755
--- a/src/main/resources/static/libs/q.js
+++ b/src/main/resources/static/libs/q.js
@@ -85,7 +85,6 @@
             return this
         },
         V: function () {
-            console.log('q.js <https://github.com/itorr/q.js> 2014/12/28');
             return this
         },
         go: function (u) {
diff --git a/src/main/resources/templates/home/console.html b/src/main/resources/templates/home/console.html
new file mode 100755
index 0000000..027897c
--- /dev/null
+++ b/src/main/resources/templates/home/console.html
@@ -0,0 +1,71 @@
+<div class="layui-row layui-col-space15">

+    <div class="layui-col-xs6 layui-col-md3">

+        <div class="layui-card">

+            <div class="layui-card-header">

+                访问量<span class="layui-badge layui-bg-blue pull-right">周</span>

+            </div>

+            <div class="layui-card-body">

+                <p class="lay-big-font">9,999,666</p>

+                <p>总计访问量<span class="pull-right">88万 <i class="layui-icon layui-icon-flag"></i></span></p>

+            </div>

+        </div>

+    </div>

+    <div class="layui-col-xs6 layui-col-md3">

+        <div class="layui-card">

+            <div class="layui-card-header">

+                下载<span class="layui-badge layui-bg-black pull-right">月</span>

+            </div>

+            <div class="layui-card-body">

+                <p class="lay-big-font">33,555</p>

+                <p>新下载<span class="pull-right">10% <i class="layui-icon layui-icon-download-circle"></i></span></p>

+            </div>

+        </div>

+    </div>

+    <div class="layui-col-xs6 layui-col-md3">

+        <div class="layui-card">

+            <div class="layui-card-header">

+                Start<span class="layui-badge layui-bg-green pull-right">周</span>

+            </div>

+            <div class="layui-card-body">

+                <p class="lay-big-font">999,666</p>

+                <p>总Start数<span class="pull-right">88万 <i class="layui-icon layui-icon-rate"></i></span></p>

+            </div>

+        </div>

+    </div>

+    <div class="layui-col-xs6 layui-col-md3">

+        <div class="layui-card">

+            <div class="layui-card-header">

+                活跃用户<span class="layui-badge layui-bg-orange pull-right">月</span>

+            </div>

+            <div class="layui-card-body">

+                <p class="lay-big-font">66,666</p>

+                <p>最近一个月<span class="pull-right">15% <i class="layui-icon layui-icon-user"></i></span></p>

+            </div>

+        </div>

+    </div>

+</div>

+

+

+

+    

+

+<script>

+    layui.use(['carousel', 'element'], function () {

+        var carousel = layui.carousel;

+        var element = layui.element;

+        var device = layui.device;

+

+        layui.link('/static/custom/css/console.css');

+

+        // 渲染轮播

+        carousel.render({

+            elem: '.layui-carousel',

+            width: '100%',

+            height: '60px',

+            arrow: 'none',

+            autoplay: true,

+            trigger: device.ios || device.android ? 'click' : 'hover',

+            anim: 'fade'

+        });

+    });

+</script>

diff --git a/src/main/resources/templates/home/message.html b/src/main/resources/templates/home/message.html
new file mode 100755
index 0000000..71a097b
--- /dev/null
+++ b/src/main/resources/templates/home/message.html
@@ -0,0 +1,92 @@
+<div id="message-view" class="layui-card-body layui-tab layui-tab-brief" style="padding: 5px 0;margin: 0;">
+    <ul class="layui-tab-title" style="text-align: center;">
+        <li class="layui-this">通知(5)</li>
+        <li>私信(12)</li>
+        <li>待办(3)</li>
+    </ul>
+    <div class="layui-tab-content" style="padding: 5px 0;">
+        <!-- tab1 -->
+        <div class="layui-tab-item message-list layui-show">
+            <!-- 实际项目请使用后台数据循环出来 -->
+            <a class="message-list-item" href="javascript:;">
+                <img class="message-item-icon" th:src="@{/static/assets/images/message.png}">
+                <div class="message-item-right">
+                    <h2 class="message-item-title">你收到了14份新周报</h2>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+            <a class="message-list-item" href="javascript:;">
+                <img class="message-item-icon" th:src="@{/static/assets/images/message.png}">
+                <div class="message-item-right">
+                    <h2 class="message-item-title">你收到了14份新周报</h2>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+            <a class="message-list-item" href="javascript:;">
+                <img class="message-item-icon" th:src="@{/static/assets/images/message.png}">
+                <div class="message-item-right">
+                    <h2 class="message-item-title">你收到了14份新周报</h2>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+        </div>
+        <!-- tab2 -->
+        <div class="layui-tab-item">
+            <a class="message-list-item" href="javascript:;">
+                <img class="message-item-icon" th:src="@{/static/assets/images/head.png}">
+                <div class="message-item-right">
+                    <h2 class="message-item-title">xx评论了你</h2>
+                    <p class="message-item-text">哈哈哈哈哈哈</p>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+            <a class="message-list-item" href="javascript:;">
+                <img class="message-item-icon" th:src="@{/static/assets/images/head.png}">
+                <div class="message-item-right">
+                    <h2 class="message-item-title">xx评论了你</h2>
+                    <p class="message-item-text">哈哈哈哈哈哈</p>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+            <a class="message-list-item" href="javascript:;">
+                <img class="message-item-icon" th:src="@{/static/assets/images/head.png}">
+                <div class="message-item-right">
+                    <h2 class="message-item-title">xx评论了你</h2>
+                    <p class="message-item-text">哈哈哈哈哈哈</p>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+        </div>
+        <!-- tab3 -->
+        <div class="layui-tab-item">
+            <a class="message-list-item" href="javascript:;">
+                <div class="message-item-right">
+                    <span class="layui-badge pull-right">待完成</span>
+                    <h2 class="message-item-title">你收到了14份新周报</h2>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+            <a class="message-list-item" href="javascript:;">
+                <div class="message-item-right">
+                    <span class="layui-badge layui-bg-gray pull-right">已完成</span>
+                    <h2 class="message-item-title">你收到了14份新周报</h2>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+            <a class="message-list-item" href="javascript:;">
+                <div class="message-item-right">
+                    <span class="layui-badge layui-bg-gray pull-right">已完成</span>
+                    <h2 class="message-item-title">你收到了14份新周报</h2>
+                    <p class="message-item-text">10个月前</p>
+                </div>
+            </a>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use('element', function () {
+        var element = layui.element;
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/home/password.html b/src/main/resources/templates/home/password.html
new file mode 100755
index 0000000..931eb25
--- /dev/null
+++ b/src/main/resources/templates/home/password.html
@@ -0,0 +1,58 @@
+<div class="layui-card-header">

+    <h2 class="header-title">修改密码</h2>

+</div>

+<div class="layui-card-body" style="padding: 30px;">

+    <form class="layui-form" id="form-psw">

+        <div class="layui-form-item">

+            <input type="password" name="oldPsw" required lay-verify="required" class="layui-input"

+                   placeholder="请输入原密码" lay-verType="tips">

+        </div>

+        <div class="layui-form-item">

+            <input type="password" name="newPsw" required lay-verify="required|psw" class="layui-input"

+                   placeholder="请输入新密码" lay-verType="tips">

+        </div>

+        <div class="layui-form-item">

+            <input type="password" name="rePsw" required lay-verify="required|repsw" class="layui-input"

+                   placeholder="再次输入新密码" lay-verType="tips">

+        </div>

+        <div class="layui-form-item">

+            <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="submit-psw">确认修改</button>

+        </div>

+    </form>

+</div>

+

+<script>

+    layui.use(['form', 'admin', 'layer'], function () {

+        var form = layui.form;

+        var admin = layui.admin;

+        var layer = layui.layer;

+

+        // 监听提交

+        form.on('submit(submit-psw)', function (data) {

+            layer.load(2);

+            $.post('/system/user/updatePsw', data.field, function (data) {

+                if (data.code == 200) {

+                    layer.closeAll('loading');

+                    admin.closePopupRight();

+                    layer.msg(data.msg, {icon: 1, time: 1000}, function () {

+                        location.replace('logout');

+                    });

+                } else {

+                    layer.closeAll('loading');

+                    layer.msg(data.msg, {icon: 2});

+                }

+            });

+            return false;

+        });

+

+        // 添加表单验证方法

+        form.verify({

+            psw: [/^[\S]{5,12}$/, '密码必须5到12位,且不能出现空格'],

+            repsw: function (t) {

+                if (t !== $('#form-psw input[name=newPsw]').val()) {

+                    return '两次密码输入不一致';

+                }

+            }

+        });

+    });

+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/home/theme.html b/src/main/resources/templates/home/theme.html
new file mode 100755
index 0000000..67cb12a
--- /dev/null
+++ b/src/main/resources/templates/home/theme.html
@@ -0,0 +1,37 @@
+<div class="layui-card-header">

+    <h2 class="header-title">多标签:</h2>

+    <div class="pull-right layui-form">

+        <input type="checkbox" lay-skin="switch" lay-text="ON|OFF" id="set-tab" lay-filter="set-tab" checked/>

+    </div>

+</div>

+

+<div class="layui-card-header"><h2 class="header-title">设置主题:</h2></div>

+<div class="layui-card-body layui-text">

+    <a href="/home/setTheme" class="layui-btn" style="background-color: #009688;">默认主题</a>

+    <a href="/home/setTheme?themeName=blue" class="layui-btn layui-btn-normal">蓝色主题</a>

+    <br><br><br>

+  

+</div>

+

+<script>

+    layui.use(['form', 'index', 'admin'], function () {

+        var form = layui.form;

+        var index = layui.index;

+        var admin = layui.admin;

+

+        $('#set-tab').prop('checked', index.pageTabs);

+        form.render('checkbox');

+

+        form.on('switch(set-tab)', function (data) {

+            if (data.elem.checked) {

+                location.reload();

+            } else {

+                index.pageTabs = false;

+                index.checkPageTabs();

+                admin.refresh();

+                admin.closePopupRight();

+            }

+        });

+

+    });

+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 95f2dee..011e8f8 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -65,6 +65,7 @@
     <div class="layui-side">

         <div class="layui-side-scroll">

             <ul class="layui-nav layui-nav-tree" style="margin-top: 15px;">

+

                 <li class="layui-nav-item" th:each="menu : ${menus}">

                     <a th:lay-href="${menu.menuUrl}"><i th:class="'layui-icon '+${menu.menuIcon}"></i>&emsp;<cite>[[${menu.menuName}]]</cite></a>

                     <dl class="layui-nav-child" th:if="${menu.subMenus.size()} > 0">

diff --git a/src/main/resources/templates/system/operator/index.html b/src/main/resources/templates/system/operator/index.html
new file mode 100644
index 0000000..d191a52
--- /dev/null
+++ b/src/main/resources/templates/system/operator/index.html
@@ -0,0 +1,157 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">管理员维护</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_operator_index">系统中心</a>
+          <a><cite>管理员维护</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索:
+            <select id="user-search-key">
+                <option value="">-请选择-</option>
+                <option value="opercode">账号</option>
+                <option value="opername">用户名</option>
+                <option value="mobile">手机号</option>
+            </select>&emsp;
+            <input id="user-search-value" class="layui-input search-input" type="text" placeholder="输入关键字"/>&emsp;
+            <button id="user-btn-search" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button>
+            <button id="user-btn-add" class="layui-btn icon-btn" lay-tips="新用户密码为123456"><i
+                    class="layui-icon">&#xe654;</i>添加
+            </button>
+        </div>
+
+        <table class="layui-table" id="user-table" lay-filter="user-table"></table>
+    </div>
+</div>
+
+
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="user-table-bar">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">修改</a>
+    <a class="layui-btn layui-btn-xs" lay-event="reset">重置密码</a>
+</script>
+
+<!-- 表格状态列 -->
+<script type="text/html" id="user-tpl-state">
+    <input type="checkbox" lay-filter="user-tpl-state" value="{{d.userId}}" lay-skin="switch" lay-text="正常|锁定"
+           {{d.state==0?'checked':''}}/>
+</script>
+<script>
+    layui.use(['form', 'table','layer', 'util', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var layer = layui.layer;
+        var util = layui.util;
+        var admin = layui.admin;
+        var element = layui.element;
+
+        form.render('select');
+
+        // 渲染表格
+        table.render({
+            elem: '#user-table',
+            url: '/system/user/list',
+            page: true,
+            cols: [
+                [
+                    {type: 'numbers'},
+                    {field: 'username', sort: true, title: '账号'},
+                    {field: 'nickName', sort: true, title: '用户名'},
+                    {field: 'phone', sort: true, title: '手机号'},
+                    {field: 'sex', sort: true, title: '性别'},
+                    {
+                        sort: true, templet: function (d) {
+                            return util.toDateString(d.createTime);
+                        }, title: '创建时间'
+                    },
+                    {field: 'state', sort: true, templet: '#user-tpl-state', title: '状态'},
+                    {align: 'center', toolbar: '#user-table-bar', title: '操作'}
+                ]
+            ]
+        });
+
+        // 添加按钮点击事件
+        $('#user-btn-add').click(function () {
+            showEditModel();
+        });
+
+
+        // 工具条点击事件
+        table.on('tool(user-table)', function (obj) {
+            console.log(obj);
+            var data = obj.data;
+            var layEvent = obj.event;
+
+            if (layEvent === 'edit') { // 修改
+                showEditModel(data);
+            } else if (layEvent === 'reset') { // 重置密码
+                layer.confirm('确定重置此用户的密码吗?', function (i) {
+                    layer.close(i);
+                    layer.load(2);
+                    admin.go('/system/user/restPsw', {
+                        userId: obj.data.userId
+                    }, function (data) {
+                        console.log(data.code);
+                        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});
+                        }
+                    });
+                });
+            }
+        });
+
+        // 显示表单弹窗
+        var showEditModel = function (data) {
+            var title = data ? '修改用户' : '添加用户';
+            admin.putTempData('t_user', data);
+            admin.popupCenter({
+                title: title,
+                path: '/system/user/editForm',
+                finish: function () {
+                    table.reload('user-table', {});
+                }
+            });
+        };
+
+        // 搜索按钮点击事件
+        $('#user-btn-search').click(function () {
+            var key = $('#user-search-key').val();
+            var value = $('#user-search-value').val();
+            table.reload('user-table', {where: {searchKey: key, searchValue: value}});
+        });
+
+        // 修改user状态
+        form.on('switch(user-tpl-state)', function (obj) {
+            layer.load(2);
+            admin.go('/system/user/updateState', {
+                userId: obj.elem.value,
+                state: obj.elem.checked ? 0 : 1
+            }, function (data) {
+                layer.closeAll('loading');
+                if (data.code == 200) {
+                    layer.msg(data.msg, {icon: 1});
+                    //table.reload('table-user', {});
+                }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});
+                    $(obj.elem).prop('checked', !obj.elem.checked);
+                    form.render('checkbox');
+                }
+            });
+        });
+
+    });
+</script>
diff --git a/src/main/resources/templates/system/role/index.html b/src/main/resources/templates/system/role/index.html
new file mode 100644
index 0000000..df1c415
--- /dev/null
+++ b/src/main/resources/templates/system/role/index.html
@@ -0,0 +1,12 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">角色管理</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_operator_index">系统中心</a>
+          <a><cite>角色管理</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <table class="layui-table" id="user-table" lay-filter="user-table"></table>
+    </div>
+</div>
\ No newline at end of file