diff --git a/config/application-devel-oracle.properties b/config/application-devel-oracle.properties
index 1357d12..d1fe9ba 100644
--- a/config/application-devel-oracle.properties
+++ b/config/application-devel-oracle.properties
@@ -19,4 +19,6 @@
 # jwt settings
 jwt.secret=Zj5taLomEbrM0lk+NMQZbHfSxaDU1wekjT+kiC3YzDw=
 # timeout seconds
-jwt.expiration=3600
\ No newline at end of file
+jwt.expiration=3600
+# user password
+auth.password.bcrypt.seed=
\ No newline at end of file
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
