页面
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> <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> 
+ <input id="user-search-value" class="layui-input search-input" type="text" placeholder="输入关键字"/> 
+ <button id="user-btn-search" class="layui-btn icon-btn"><i class="layui-icon"></i>搜索</button>
+ <button id="user-btn-add" class="layui-btn icon-btn" lay-tips="新用户密码为123456"><i
+ class="layui-icon"></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