diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/OperatorDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/OperatorDao.java
index da67163..c25df48 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/OperatorDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/OperatorDao.java
@@ -1,10 +1,17 @@
 package com.supwisdom.dlpay.framework.dao;
 
 import com.supwisdom.dlpay.framework.domain.TOperator;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface OperatorDao extends JpaRepository<TOperator, String> {
+public interface OperatorDao extends JpaRepository<TOperator, String>, JpaSpecificationExecutor<TOperator> {
   TOperator findByOpercode(String opercode);
+
+  @Query(value = "select t from TOperator t where (t.opercode=?1 or ?1 is null) and (t.opername like %?2% or ?2 is null)")
+  Page<TOperator> getTOperatorsByPage(String opercode, String opername, String mobile, String status, Pageable pageable);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
index 25eee0d..bd2e5d7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
@@ -2,8 +2,13 @@
 
 import com.supwisdom.dlpay.framework.domain.TRole;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface RoleDao extends JpaRepository<TRole, String> {
+  @Query("from TRole order by createtime asc ")
+  List<TRole> getAllRoles();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
index 520f19a..ec03a6d 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
@@ -33,6 +33,12 @@
   @Column(name = "STATUS", nullable = false, length = 32)
   private String status;
 
+  @Column(name = "MOBILE", length = 20)
+  private String mobile;
+
+  @Column(name = "EMAIL", length = 60)
+  private String email;
+
   @Column(name = "OPENDATE", length = 8)
   private String opendate;
 
@@ -50,12 +56,14 @@
     this.opername = opername;
   }
 
-  public TOperator(String opercode, String opertype, String opername, String operpwd, String status, String opendate, String closedate, Collection<? extends GrantedAuthority> authorities) {
+  public TOperator(String opercode, String opertype, String opername, String operpwd, String status, String mobile, String email, String opendate, String closedate, Collection<? extends GrantedAuthority> authorities) {
     this.opercode = opercode;
     this.opertype = opertype;
     this.opername = opername;
     this.operpwd = operpwd;
     this.status = status;
+    this.mobile = mobile;
+    this.email = email;
     this.opendate = opendate;
     this.closedate = closedate;
     this.authorities = authorities;
@@ -109,6 +117,22 @@
     this.status = status;
   }
 
+  public String getMobile() {
+    return mobile;
+  }
+
+  public void setMobile(String mobile) {
+    this.mobile = mobile;
+  }
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
   public String getOpendate() {
     return opendate;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/PageResult.java b/src/main/java/com/supwisdom/dlpay/framework/util/PageResult.java
new file mode 100644
index 0000000..13921a5
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/PageResult.java
@@ -0,0 +1,63 @@
+package com.supwisdom.dlpay.framework.util;
+
+import java.util.List;
+
+public class PageResult<T> {
+
+  private int code; //状态码, 0表示成功
+
+  private String msg;  //提示信息
+
+  private long count; // 总数量
+
+  private List<T> data; // 当前数据
+
+  public PageResult() {
+  }
+
+  public PageResult(List<T> rows) {
+    this.data = rows;
+    this.count = rows.size();
+    this.code = 0;
+    this.msg = "";
+  }
+
+  public PageResult(long total, List<T> rows) {
+    this.count = total;
+    this.data = rows;
+    this.code = 0;
+    this.msg = "";
+  }
+
+  public int getCode() {
+    return code;
+  }
+
+  public void setCode(int code) {
+    this.code = code;
+  }
+
+  public String getMsg() {
+    return msg;
+  }
+
+  public void setMsg(String msg) {
+    this.msg = msg;
+  }
+
+  public long getCount() {
+    return count;
+  }
+
+  public void setCount(long count) {
+    this.count = count;
+  }
+
+  public List<T> getData() {
+    return data;
+  }
+
+  public void setData(List<T> data) {
+    this.data = data;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/WebConstant.java b/src/main/java/com/supwisdom/dlpay/framework/util/WebConstant.java
new file mode 100644
index 0000000..01df8c7
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WebConstant.java
@@ -0,0 +1,6 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class WebConstant {
+  public static final int PAGENO_DEFAULT = 1;
+  public static final int PAGESIZE_DEFAULT = 10;
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index e2ba3ab..24afe10 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -11,11 +11,11 @@
 import com.supwisdom.dlpay.framework.redisrepo.ApiJwtRepository
 import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil
 import com.supwisdom.dlpay.framework.security.validate.VerifyCode
+import com.supwisdom.dlpay.framework.service.CommonService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.framework.util.HmacUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.system.service.CommonService
 import com.supwisdom.dlpay.system.service.FunctionService
 import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
@@ -175,28 +175,28 @@
 
 
 @Controller
-class WebHomeController {
-
-    private val logger = KotlinLogging.logger {}
+class WebMainController {
     @Autowired
     lateinit var functionService: FunctionService
     @Autowired
     lateinit var commonService: CommonService
 
+    private val logger = KotlinLogging.logger {}
+
     @GetMapping("/login")
     fun loginView() = "login"
 
     @GetMapping("/logout")
     fun logout(request: HttpServletRequest, response: HttpServletResponse): String {
         SecurityContextHolder.getContext().authentication?.also {
-            logger.debug { "user logout!!" }
+            logger.debug { "user logout!! " }
             SecurityContextLogoutHandler().logout(request, response, it)
         }
         return "redirect:/login?logout"
     }
 
     @GetMapping(value = ["/", "/index"])
-    fun homeView(@AuthenticationPrincipal operUser: UserDetails, model: Model): String {
+    fun menuView(@AuthenticationPrincipal operUser: UserDetails, model: Model): String {
         model.addAttribute("loginOper", operUser as TOperator)
         val funclist = functionService.getFunctionsByOperid(operUser.operid)
         model.addAttribute("menus", functionService.getMenuTree(funclist, "-1"))
@@ -204,3 +204,53 @@
         return "index"
     }
 }
+
+@Controller
+@RequestMapping("/home")
+class HomeController {
+    /**
+     * 控制台
+     */
+    @GetMapping("/console")
+    fun console() :String{
+        return "home/console"
+    }
+
+    /**
+     * 消息弹窗
+     */
+    @GetMapping("/message")
+    fun message(): String {
+        return "home/message"
+    }
+
+    /**
+     * 修改密码弹窗
+     */
+    @GetMapping("/password")
+    fun password(): String {
+        return "home/password"
+    }
+
+    /**
+     * 主题设置弹窗
+     */
+    @GetMapping("/theme")
+    fun theme(): String {
+        return "home/theme"
+    }
+
+    /**
+     * 设置主题
+     */
+    @RequestMapping("/setTheme")
+    fun setTheme(themeName: String?, request: HttpServletRequest): String {
+        if (null == themeName) {
+            request.session.removeAttribute("theme")
+        } else {
+            request.session.setAttribute("theme", themeName)
+        }
+        return "redirect:/"
+    }
+
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/service/framework_service.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/service/framework_service.kt
new file mode 100644
index 0000000..b072cc2
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/service/framework_service.kt
@@ -0,0 +1,5 @@
+package com.supwisdom.dlpay.framework.service
+
+interface CommonService{
+    fun getSystemVersion(): String
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
new file mode 100644
index 0000000..7429de9
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
@@ -0,0 +1,17 @@
+package com.supwisdom.dlpay.framework.service.impl
+
+import com.jcabi.manifests.Manifests
+import com.supwisdom.dlpay.framework.service.CommonService
+import org.springframework.stereotype.Service
+
+@Service
+class CommonServiceImpl : CommonService {
+    override fun getSystemVersion(): String {
+        try {
+            return Manifests.read("Payapi-Version") ?: "version 1.0"
+        } catch (ex: Exception) {
+//            ex.printStackTrace()
+            return "unknown"
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/system/bean/system_bean.kt b/src/main/kotlin/com/supwisdom/dlpay/system/bean/system_bean.kt
new file mode 100644
index 0000000..10328b5
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/system/bean/system_bean.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.system.bean
+
+/**
+ *  操作员查询类
+ */
+class OperatorSearchBean {
+    var opercode: String? = ""
+    var opername: String? = ""
+    var mobile: String? = ""
+    var deleteShow: Boolean? = true
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/system/controller/system_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/system/controller/system_controller.kt
index 7477a8f..235309b 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/system/controller/system_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/system/controller/system_controller.kt
@@ -1 +1,34 @@
-package com.supwisdom.dlpay.system.controller
\ No newline at end of file
+package com.supwisdom.dlpay.system.controller
+
+import com.supwisdom.dlpay.system.service.OperatorService
+import com.supwisdom.dlpay.system.service.RoleService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Controller
+import org.springframework.ui.Model
+import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.RequestMapping
+
+@Controller
+@RequestMapping("/operator")
+class OperatorController {
+    @Autowired
+    lateinit var roleService: RoleService
+    @Autowired
+    lateinit var operatorService: OperatorService
+
+    @GetMapping("/index")
+    fun indexView(model: Model): String {
+        model.addAttribute("roles", roleService.findAllRoles())
+        return "system/operator/index"
+    }
+
+}
+
+@Controller
+@RequestMapping("/role")
+class RoleController {
+    @GetMapping("/index")
+    fun indexView(model: Model): String {
+        return "system/role/index"
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/system/service/impl/system_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/system/service/impl/system_service_impl.kt
index 8e017d5..92ce6a9 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/system/service/impl/system_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/system/service/impl/system_service_impl.kt
@@ -2,24 +2,34 @@
 
 import com.jcabi.manifests.Manifests
 import com.supwisdom.dlpay.framework.dao.FunctionDao
+import com.supwisdom.dlpay.framework.dao.OperatorDao
+import com.supwisdom.dlpay.framework.dao.RoleDao
 import com.supwisdom.dlpay.framework.domain.TFunction
-import com.supwisdom.dlpay.system.service.CommonService
+import com.supwisdom.dlpay.framework.domain.TOperator
+import com.supwisdom.dlpay.framework.domain.TRole
+import com.supwisdom.dlpay.framework.util.PageResult
+import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.dlpay.system.bean.OperatorSearchBean
 import com.supwisdom.dlpay.system.service.FunctionService
+import com.supwisdom.dlpay.system.service.OperatorService
+import com.supwisdom.dlpay.system.service.RoleService
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 import java.util.HashMap
+import org.springframework.data.domain.PageRequest
+import org.springframework.data.domain.Sort
+import reactor.core.publisher.Operators.`as`
+import java.util.ArrayList
+import javax.persistence.criteria.CriteriaBuilder
+import java.awt.print.Book
+import org.springframework.data.jpa.domain.Specification
+import org.springframework.data.repository.support.PageableExecutionUtils
+import javax.persistence.criteria.CriteriaQuery
+import javax.persistence.criteria.Predicate
+import javax.persistence.criteria.Root
 
-@Service
-class CommonServiceImpl : CommonService {
-    override fun getSystemVersion(): String {
-        try {
-            return Manifests.read("Payapi-Version") ?: "version 1.0"
-        } catch (ex: Exception) {
-            ex.printStackTrace()
-            return "unknown"
-        }
-    }
-}
+
+
 
 @Service
 class FunctionServiceImpl : FunctionService {
@@ -49,4 +59,22 @@
         return list
     }
 
+}
+
+@Service
+class OperatorServiceImpl : OperatorService {
+    @Autowired
+    lateinit var operatorDao: OperatorDao
+
+}
+
+@Service
+class RoleServiceImpl: RoleService{
+    @Autowired
+    lateinit var roleDao: RoleDao
+
+    override fun findAllRoles(): List<TRole> {
+        return roleDao.getAllRoles() ?: ArrayList(0)
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/system/service/system_service.kt b/src/main/kotlin/com/supwisdom/dlpay/system/service/system_service.kt
index 7133732..d4d7557 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/system/service/system_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/system/service/system_service.kt
@@ -1,12 +1,14 @@
 package com.supwisdom.dlpay.system.service
 
 import com.supwisdom.dlpay.framework.domain.TFunction
+import com.supwisdom.dlpay.framework.domain.TOperator
+import com.supwisdom.dlpay.framework.domain.TRole
+import com.supwisdom.dlpay.framework.util.PageResult
+import com.supwisdom.dlpay.system.bean.OperatorSearchBean
 import org.springframework.transaction.annotation.Propagation
 import org.springframework.transaction.annotation.Transactional
 
-interface CommonService{
-    fun getSystemVersion(): String;
-}
+
 
 interface FunctionService {
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
@@ -16,4 +18,14 @@
     fun getMenuTree(funcList: List<TFunction>, parentId: String): List<Map<String, Any>>
 
 
+}
+
+interface OperatorService{
+//    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+//    fun getOperatorsPageBySearch(pageNo: Int, pageSize: Int, searchBean: OperatorSearchBean): PageResult<TOperator>
+
+}
+
+interface RoleService{
+    fun findAllRoles(): List<TRole>
 }
\ No newline at end of file
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
