-plugins {
- id 'java'
- id 'org.springframework.boot' version '2.1.6.RELEASE'
- id 'org.jetbrains.kotlin.jvm' version '1.3.31'
- id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31'
- id 'org.jetbrains.kotlin.plugin.spring' version '1.3.31'
- id "com.palantir.git-version" version "0.12.0-rc2"
- id 'com.palantir.docker' version '0.22.1'
-}
-
-apply plugin: 'java'
-apply plugin: 'io.spring.dependency-management'
-
-payapiVersion = gitVersion()
-
-group = 'com.supwisdom'
-version = '1'
-sourceCompatibility = jdkVersion
-def startClass = 'com.supwisdom.dlpay.PayApiApplicationKt'
-
-println("Build version: $payapiVersion")
allprojects {
repositories {
jcenter()
version = '1.0'
}
-bootJar {
- mainClassName = startClass
- manifest {
- attributes('Payapi-Version': payapiVersion)
- }
-}
-
-jar {
- baseName = 'payapi'
-}
-
-docker {
- name 'harbor.supwisdom.com/dali/payapi:' + version
- println(jar.archivePath)
- files jar.archivePath
-}
-
-docker.dependsOn(jar)
-
-dependencies {
- implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
- implementation 'org.springframework.boot:spring-boot-starter-data-redis'
- implementation 'org.springframework.boot:spring-boot-starter-web'
- implementation 'org.springframework.boot:spring-boot-starter-security'
- implementation 'org.springframework.boot:spring-boot-starter-cache'
- implementation 'org.springframework.boot:spring-boot-autoconfigure'
- implementation 'org.springframework.security:spring-security-oauth2-jose'
- implementation 'org.springframework.security:spring-security-oauth2-client'
- implementation 'org.springframework.security:spring-security-oauth2-jose'
- implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.5.RELEASE'
- implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
- implementation 'org.springframework.session:spring-session-data-redis'
- implementation 'org.springframework.boot:spring-boot-starter-cache'
- implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
- implementation 'org.jetbrains.kotlin:kotlin-reflect'
- implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
- implementation 'commons-codec:commons-codec:1.12'
-
- implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery:2.1.2.RELEASE'
-
- implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
-
- runtime("org.springframework.boot:spring-boot-devtools")
-
- implementation 'org.postgresql:postgresql:42.2.5'
- implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
- implementation 'com.jcabi:jcabi-manifests:1.1'
- implementation 'org.bitbucket.b_c:jose4j:0.6.3'
- implementation 'io.github.microutils:kotlin-logging:1.6.26'
- implementation 'org.slf4j:slf4j-parent:1.7.26'
- implementation 'com.github.penggle:kaptcha:2.3.2'
- implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
- implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
- implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
- implementation group: 'taglibs', name: 'standard', version: '1.1.2'
- implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
- implementation files('libs/ojdbc6.jar')
- implementation 'commons-dbcp:commons-dbcp:1.4'
-
- implementation project(':common')
-
- annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
- annotationProcessor 'org.projectlombok:lombok:1.18.8'
- compileOnly 'org.projectlombok:lombok:1.18.8'
-
-// providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
- testImplementation 'org.springframework.boot:spring-boot-starter-test'
- testImplementation 'io.rest-assured:rest-assured:3.3.0'
- testImplementation 'io.rest-assured:spring-mock-mvc:3.3.0'
- testImplementation 'org.hamcrest:hamcrest:2.1'
-}
-
compileKotlin {
kotlinOptions {
freeCompilerArgs = ['-Xjsr305=strict']
--- /dev/null
+plugins {
+ id 'java'
+ id 'org.springframework.boot' version '2.1.6.RELEASE'
+ id 'org.jetbrains.kotlin.jvm' version '1.3.31'
+ id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31'
+ id 'org.jetbrains.kotlin.plugin.spring' version '1.3.31'
+ id "com.palantir.git-version" version "0.12.0-rc2"
+ id 'com.palantir.docker' version '0.22.1'
+}
+
+apply plugin: 'java'
+apply plugin: 'io.spring.dependency-management'
+
+payapiVersion = gitVersion()
+
+group = 'com.supwisdom'
+version = '1'
+sourceCompatibility = jdkVersion
+def startClass = 'com.supwisdom.dlpay.PayApiApplicationKt'
+
+println("Build version: $payapiVersion")
+allprojects {
+ repositories {
+ jcenter()
+ mavenCentral()
+ }
+}
+
+subprojects {
+ version = '1.0'
+}
+
+bootJar {
+ mainClassName = startClass
+ manifest {
+ attributes('Payapi-Version': payapiVersion)
+ }
+}
+
+jar {
+ baseName = 'payapi'
+}
+
+docker {
+ name 'harbor.supwisdom.com/dali/payapi:' + version
+ println(jar.archivePath)
+ files jar.archivePath
+}
+
+docker.dependsOn(jar)
+
+dependencies {
+ implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
+ implementation 'org.springframework.boot:spring-boot-starter-data-redis'
+ implementation 'org.springframework.boot:spring-boot-starter-web'
+ implementation 'org.springframework.boot:spring-boot-starter-security'
+ implementation 'org.springframework.boot:spring-boot-starter-cache'
+ implementation 'org.springframework.boot:spring-boot-autoconfigure'
+ implementation 'org.springframework.security:spring-security-oauth2-jose'
+ implementation 'org.springframework.security:spring-security-oauth2-client'
+ implementation 'org.springframework.security:spring-security-oauth2-jose'
+ implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.5.RELEASE'
+ implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
+ implementation 'org.springframework.session:spring-session-data-redis'
+ implementation 'org.springframework.boot:spring-boot-starter-cache'
+ implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
+ implementation 'org.jetbrains.kotlin:kotlin-reflect'
+ implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
+ implementation 'commons-codec:commons-codec:1.12'
+
+ implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery:2.1.2.RELEASE'
+
+ implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
+
+ runtime("org.springframework.boot:spring-boot-devtools")
+
+ implementation 'org.postgresql:postgresql:42.2.5'
+ implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
+ implementation 'com.jcabi:jcabi-manifests:1.1'
+ implementation 'org.bitbucket.b_c:jose4j:0.6.3'
+ implementation 'io.github.microutils:kotlin-logging:1.6.26'
+ implementation 'org.slf4j:slf4j-parent:1.7.26'
+ implementation 'com.github.penggle:kaptcha:2.3.2'
+ implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
+ implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
+ implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
+ implementation group: 'taglibs', name: 'standard', version: '1.1.2'
+ implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
+ implementation files('libs/ojdbc6.jar')
+ implementation 'commons-dbcp:commons-dbcp:1.4'
+
+ implementation project(':common')
+
+ annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
+ annotationProcessor 'org.projectlombok:lombok:1.18.8'
+ compileOnly 'org.projectlombok:lombok:1.18.8'
+
+// providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
+ testImplementation 'org.springframework.boot:spring-boot-starter-test'
+ testImplementation 'io.rest-assured:rest-assured:3.3.0'
+ testImplementation 'io.rest-assured:spring-mock-mvc:3.3.0'
+ testImplementation 'org.hamcrest:hamcrest:2.1'
+}
+
+compileKotlin {
+ kotlinOptions {
+ freeCompilerArgs = ['-Xjsr305=strict']
+ jvmTarget = jdkVersion
+ }
+}
+
+compileTestKotlin {
+ kotlinOptions {
+ freeCompilerArgs = ['-Xjsr305=strict']
+ jvmTarget = jdkVersion
+ }
+}
-package com.supwisdom.dlpay.api.bean;\r
-\r
-import java.util.HashMap;\r
-\r
-public class JsonResult extends HashMap<String, Object> {\r
- public JsonResult() {\r
- }\r
-\r
- /**\r
- * 返回成功\r
- */\r
- public static JsonResult ok() {\r
- return ok("操作成功");\r
- }\r
-\r
- /**\r
- * 返回成功\r
- */\r
- public static JsonResult ok(String message) {\r
- return ok(200, message);\r
- }\r
-\r
- /**\r
- * 返回成功\r
- */\r
- public static JsonResult ok(int code, String message) {\r
- JsonResult jsonResult = new JsonResult();\r
- jsonResult.put("code", code);\r
- jsonResult.put("msg", message);\r
- return jsonResult;\r
- }\r
-\r
- /**\r
- * 返回失败\r
- */\r
- public static JsonResult error() {\r
- return error("操作失败");\r
- }\r
-\r
- /**\r
- * 返回失败\r
- */\r
- public static JsonResult error(String messag) {\r
- return error(500, messag);\r
- }\r
-\r
- /**\r
- * 返回失败\r
- */\r
- public static JsonResult error(int code, String message) {\r
- return ok(code, message);\r
- }\r
-\r
- /**\r
- * 设置code\r
- */\r
- public JsonResult setCode(int code) {\r
- super.put("code", code);\r
- return this;\r
- }\r
-\r
- /**\r
- * 设置message\r
- */\r
- public JsonResult setMessage(String message) {\r
- super.put("msg", message);\r
- return this;\r
- }\r
-\r
- /**\r
- * 放入object\r
- */\r
- @Override\r
- public JsonResult put(String key, Object object) {\r
- super.put(key, object);\r
- return this;\r
- }\r
+package com.supwisdom.dlpay.api.bean;
+
+import java.util.HashMap;
+
+public class JsonResult extends HashMap<String, Object> {
+ public JsonResult() {
+ }
+
+ /**
+ * 返回成功
+ */
+ public static JsonResult ok() {
+ return ok("操作成功");
+ }
+
+ /**
+ * 返回成功
+ */
+ public static JsonResult ok(String message) {
+ return ok(200, message);
+ }
+
+ /**
+ * 返回成功
+ */
+ public static JsonResult ok(int code, String message) {
+ JsonResult jsonResult = new JsonResult();
+ jsonResult.put("code", code);
+ jsonResult.put("msg", message);
+ return jsonResult;
+ }
+
+ /**
+ * 返回失败
+ */
+ public static JsonResult error() {
+ return error("操作失败");
+ }
+
+ /**
+ * 返回失败
+ */
+ public static JsonResult error(String messag) {
+ return error(500, messag);
+ }
+
+ /**
+ * 返回失败
+ */
+ public static JsonResult error(int code, String message) {
+ return ok(code, message);
+ }
+
+ /**
+ * 设置code
+ */
+ public JsonResult setCode(int code) {
+ super.put("code", code);
+ return this;
+ }
+
+ /**
+ * 设置message
+ */
+ public JsonResult setMessage(String message) {
+ super.put("msg", message);
+ return this;
+ }
+
+ /**
+ * 放入object
+ */
+ @Override
+ public JsonResult put(String key, Object object) {
+ super.put(key, object);
+ return this;
+ }
}
\ No newline at end of file
-/**\r
- * \r
- */\r
-package com.supwisdom.dlpay.exception;\r
-\r
-import org.springframework.security.core.AuthenticationException;\r
-\r
-/**\r
- * @author lenovo\r
- *\r
- */\r
-public class ValidateCodeException extends AuthenticationException {\r
-\r
- /**\r
- * \r
- */\r
- private static final long serialVersionUID = 1170189980006964105L;\r
-\r
- \r
- public ValidateCodeException(String msg) {\r
- super(msg);\r
- }\r
-}\r
+/**
+ *
+ */
+package com.supwisdom.dlpay.exception;
+
+import org.springframework.security.core.AuthenticationException;
+
+/**
+ * @author lenovo
+ *
+ */
+public class ValidateCodeException extends AuthenticationException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1170189980006964105L;
+
+
+ public ValidateCodeException(String msg) {
+ super(msg);
+ }
+}
-package com.supwisdom.dlpay.framework.filter;\r
-\r
-\r
-import com.supwisdom.dlpay.exception.ValidateCodeException;\r
-import com.supwisdom.dlpay.framework.security.CodeUtil;\r
-import com.supwisdom.dlpay.framework.security.MyAuthenticationFailureHandler;\r
-import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil;\r
-import com.supwisdom.dlpay.framework.security.validate.VerifyCode;\r
-import com.supwisdom.dlpay.framework.util.StringUtil;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.stereotype.Component;\r
-import org.springframework.web.filter.OncePerRequestFilter;\r
-\r
-import javax.servlet.FilterChain;\r
-import javax.servlet.ServletException;\r
-import javax.servlet.http.HttpServletRequest;\r
-import javax.servlet.http.HttpServletResponse;\r
-import java.io.IOException;\r
-\r
-\r
-@Component("validateCodeFilter")\r
-public class ValidateCodeFilter extends OncePerRequestFilter {\r
-\r
- /**\r
- * 校验失败处理器\r
- */\r
- @Autowired\r
- private MyAuthenticationFailureHandler myAuthenticationFailureHandler;\r
-\r
-\r
- @Override\r
- protected void doFilterInternal(HttpServletRequest request,\r
- HttpServletResponse response, FilterChain filterChain)\r
- throws ServletException, IOException {\r
- String context = request.getContextPath();\r
- if (context == null || "" == context.trim()) {\r
- context = "/";\r
- }\r
- if (request.getRequestURI().isEmpty()) {\r
- filterChain.doFilter(request, response);\r
- return;\r
- }\r
- String url = request.getRequestURI();\r
- if (!"/".equals(context)) {\r
- url = url.replace(context, "");\r
- }\r
- if (StringUtil.equals("/login/form", url)\r
- && StringUtil.equalsIgnoreCase(request.getMethod(), "post")) {\r
- try {\r
- validate(request);\r
- } catch (ValidateCodeException e) {\r
- //response.setStatus(HttpStatus.OK.value());\r
- //response.setContentType("application/json;charset=UTF-8");\r
- //response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));\r
- //response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());\r
- myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);\r
- return;\r
- }\r
- }\r
- filterChain.doFilter(request, response);\r
- }\r
-\r
- private void validate(HttpServletRequest request) throws ValidateCodeException {\r
- if (!CodeUtil.checkVerifyCode(request)) {\r
- throw new ValidateCodeException("验证码不匹配");\r
- } else {\r
- request.getSession().removeAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);\r
- }\r
-// VerifyCode imageCode = (VerifyCode) request.getSession().getAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);\r
-// String inputCode;\r
-// try {\r
-// inputCode = request.getParameter("imageCode");\r
-// } catch (Exception e) {\r
-// throw new ValidateCodeException("获取验证码的值失败");\r
-// }\r
-// if (StringUtil.isEmpty(inputCode)) {\r
-// throw new ValidateCodeException("验证码不能为空");\r
-// }\r
-// if (null == imageCode) {\r
-// throw new ValidateCodeException("验证码不存在");\r
-// }\r
-// if (imageCode.isExpired()) {\r
-// request.getSession().removeAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);\r
-// throw new ValidateCodeException("验证码已过期");\r
-// }\r
-// if (!StringUtil.equalsIgnoreCase(imageCode.getText(), inputCode)) {\r
-// throw new ValidateCodeException("验证码不匹配");\r
-// }\r
-// request.getSession().removeAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);\r
- }\r
-\r
-}\r
+package com.supwisdom.dlpay.framework.filter;
+
+
+import com.supwisdom.dlpay.exception.ValidateCodeException;
+import com.supwisdom.dlpay.framework.security.CodeUtil;
+import com.supwisdom.dlpay.framework.security.MyAuthenticationFailureHandler;
+import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil;
+import com.supwisdom.dlpay.framework.security.validate.VerifyCode;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+@Component("validateCodeFilter")
+public class ValidateCodeFilter extends OncePerRequestFilter {
+
+ /**
+ * 校验失败处理器
+ */
+ @Autowired
+ private MyAuthenticationFailureHandler myAuthenticationFailureHandler;
+
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request,
+ HttpServletResponse response, FilterChain filterChain)
+ throws ServletException, IOException {
+ String context = request.getContextPath();
+ if (context == null || "" == context.trim()) {
+ context = "/";
+ }
+ if (request.getRequestURI().isEmpty()) {
+ filterChain.doFilter(request, response);
+ return;
+ }
+ String url = request.getRequestURI();
+ if (!"/".equals(context)) {
+ url = url.replace(context, "");
+ }
+ if (StringUtil.equals("/login/form", url)
+ && StringUtil.equalsIgnoreCase(request.getMethod(), "post")) {
+ try {
+ validate(request);
+ } catch (ValidateCodeException e) {
+ //response.setStatus(HttpStatus.OK.value());
+ //response.setContentType("application/json;charset=UTF-8");
+ //response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));
+ //response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());
+ myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);
+ return;
+ }
+ }
+ filterChain.doFilter(request, response);
+ }
+
+ private void validate(HttpServletRequest request) throws ValidateCodeException {
+ if (!CodeUtil.checkVerifyCode(request)) {
+ throw new ValidateCodeException("验证码不匹配");
+ } else {
+ request.getSession().removeAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
+ }
+// VerifyCode imageCode = (VerifyCode) request.getSession().getAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);
+// String inputCode;
+// try {
+// inputCode = request.getParameter("imageCode");
+// } catch (Exception e) {
+// throw new ValidateCodeException("获取验证码的值失败");
+// }
+// if (StringUtil.isEmpty(inputCode)) {
+// throw new ValidateCodeException("验证码不能为空");
+// }
+// if (null == imageCode) {
+// throw new ValidateCodeException("验证码不存在");
+// }
+// if (imageCode.isExpired()) {
+// request.getSession().removeAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);
+// throw new ValidateCodeException("验证码已过期");
+// }
+// if (!StringUtil.equalsIgnoreCase(imageCode.getText(), inputCode)) {
+// throw new ValidateCodeException("验证码不匹配");
+// }
+// request.getSession().removeAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);
+ }
+
+}
-package com.supwisdom.dlpay.framework.security;\r
-\r
-import com.supwisdom.dlpay.framework.domain.TOperator;\r
-import org.springframework.security.core.Authentication;\r
-import org.springframework.security.core.GrantedAuthority;\r
-import org.springframework.security.core.context.SecurityContextHolder;\r
-\r
-import java.util.Collection;\r
-\r
-public class OperUtil {\r
-\r
- public static TOperator getCurrentOper() {\r
- Authentication au = SecurityContextHolder.getContext()\r
- .getAuthentication();\r
- if (au == null)\r
- return null;\r
- if (au.getPrincipal() == null)\r
- return null;\r
- if (au != null && au.getPrincipal() instanceof TOperator) {\r
- return (TOperator) au.getPrincipal();\r
- } else {\r
- TOperator oper = new TOperator();\r
- oper.setOpername(au.getPrincipal().toString());\r
- oper.setOperpwd(au.getCredentials() == null ? null : au\r
- .getCredentials().toString());\r
- return oper;\r
- }\r
- }\r
-\r
- public static String getCurrentOperid() {\r
- TOperator oper = getCurrentOper();\r
- if (oper == null)\r
- return null;\r
- return oper.getOperid() == null ? oper.getOpercode() : oper.getOperid();\r
- }\r
-\r
- public static boolean isLogined() {\r
- Authentication au = SecurityContextHolder.getContext()\r
- .getAuthentication();\r
- if (au == null)\r
- return false;\r
- if (au.getPrincipal() == null)\r
- return false;\r
- if (au.getPrincipal() instanceof TOperator)\r
- return true;\r
- return false;\r
- }\r
-\r
- public static boolean isAdmin() {\r
- TOperator loginOper = OperUtil.getCurrentOper();\r
- if (loginOper != null) {\r
- Collection<? extends GrantedAuthority> gas = loginOper.getAuthorities();\r
- if (gas == null) {\r
- return false;\r
- }\r
- boolean flag = false;\r
- for (GrantedAuthority grantedAuthority : gas) {\r
- if ("ROLE_ADMIN".equals(grantedAuthority.getAuthority())) {\r
- flag = true;\r
- }\r
- }\r
- return flag;\r
- } else {\r
- return false;\r
- }\r
- }\r
-\r
-}\r
+package com.supwisdom.dlpay.framework.security;
+
+import com.supwisdom.dlpay.framework.domain.TOperator;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+import java.util.Collection;
+
+public class OperUtil {
+
+ public static TOperator getCurrentOper() {
+ Authentication au = SecurityContextHolder.getContext()
+ .getAuthentication();
+ if (au == null)
+ return null;
+ if (au.getPrincipal() == null)
+ return null;
+ if (au != null && au.getPrincipal() instanceof TOperator) {
+ return (TOperator) au.getPrincipal();
+ } else {
+ TOperator oper = new TOperator();
+ oper.setOpername(au.getPrincipal().toString());
+ oper.setOperpwd(au.getCredentials() == null ? null : au
+ .getCredentials().toString());
+ return oper;
+ }
+ }
+
+ public static String getCurrentOperid() {
+ TOperator oper = getCurrentOper();
+ if (oper == null)
+ return null;
+ return oper.getOperid() == null ? oper.getOpercode() : oper.getOperid();
+ }
+
+ public static boolean isLogined() {
+ Authentication au = SecurityContextHolder.getContext()
+ .getAuthentication();
+ if (au == null)
+ return false;
+ if (au.getPrincipal() == null)
+ return false;
+ if (au.getPrincipal() instanceof TOperator)
+ return true;
+ return false;
+ }
+
+ public static boolean isAdmin() {
+ TOperator loginOper = OperUtil.getCurrentOper();
+ if (loginOper != null) {
+ Collection<? extends GrantedAuthority> gas = loginOper.getAuthorities();
+ if (gas == null) {
+ return false;
+ }
+ boolean flag = false;
+ for (GrantedAuthority grantedAuthority : gas) {
+ if ("ROLE_ADMIN".equals(grantedAuthority.getAuthority())) {
+ flag = true;
+ }
+ }
+ return flag;
+ } else {
+ return false;
+ }
+ }
+
+}
-package com.supwisdom.dlpay.framework.security.validate;\r
-\r
-import java.awt.image.BufferedImage;\r
-\r
-public class ImageCode extends ValidateCode {\r
- private BufferedImage image;\r
-\r
- public ImageCode(BufferedImage image, String code, int expireTime) {\r
- super(code, expireTime);\r
- this.image = image;\r
- }\r
-\r
- public BufferedImage getImage() {\r
- return image;\r
- }\r
-\r
- public void setImage(BufferedImage image) {\r
- this.image = image;\r
- }\r
-\r
-}\r
+package com.supwisdom.dlpay.framework.security.validate;
+
+import java.awt.image.BufferedImage;
+
+public class ImageCode extends ValidateCode {
+ private BufferedImage image;
+
+ public ImageCode(BufferedImage image, String code, int expireTime) {
+ super(code, expireTime);
+ this.image = image;
+ }
+
+ public BufferedImage getImage() {
+ return image;
+ }
+
+ public void setImage(BufferedImage image) {
+ this.image = image;
+ }
+
+}
-package com.supwisdom.dlpay.framework.security.validate;\r
-\r
-import com.fasterxml.jackson.annotation.JsonIgnore;\r
-import com.supwisdom.dlpay.framework.util.DateUtil;\r
-import java.util.Date;\r
-\r
-\r
-public class ValidateCode{\r
-\r
- private String code;\r
- \r
- private Date expireTime;\r
-\r
- public ValidateCode() {\r
- super();\r
- }\r
-\r
- public ValidateCode(String code, Date expireTime) {\r
- super();\r
- this.code = code;\r
- this.expireTime = expireTime;\r
- }\r
-\r
- public ValidateCode(String code, int expireTime) {\r
- super();\r
- this.code = code;\r
- this.expireTime = DateUtil.setMinutes(new Date(), expireTime);\r
- }\r
-\r
- public String getCode() {\r
- return code;\r
- }\r
-\r
- public void setCode(String code) {\r
- this.code = code;\r
- }\r
-\r
- public Date getExpireTime() {\r
- return expireTime;\r
- }\r
-\r
- public void setExpireTime(Date expireTime) {\r
- this.expireTime = expireTime;\r
- }\r
-\r
- @JsonIgnore\r
- public boolean isExpired() {\r
- return new Date().compareTo(expireTime) > 0;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return "ValidateCode [code=" + code + ", expireTime=" + expireTime + "]";\r
- }\r
-}\r
+package com.supwisdom.dlpay.framework.security.validate;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import java.util.Date;
+
+
+public class ValidateCode{
+
+ private String code;
+
+ private Date expireTime;
+
+ public ValidateCode() {
+ super();
+ }
+
+ public ValidateCode(String code, Date expireTime) {
+ super();
+ this.code = code;
+ this.expireTime = expireTime;
+ }
+
+ public ValidateCode(String code, int expireTime) {
+ super();
+ this.code = code;
+ this.expireTime = DateUtil.setMinutes(new Date(), expireTime);
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public Date getExpireTime() {
+ return expireTime;
+ }
+
+ public void setExpireTime(Date expireTime) {
+ this.expireTime = expireTime;
+ }
+
+ @JsonIgnore
+ public boolean isExpired() {
+ return new Date().compareTo(expireTime) > 0;
+ }
+
+ @Override
+ public String toString() {
+ return "ValidateCode [code=" + code + ", expireTime=" + expireTime + "]";
+ }
+}
-layui.define(['layer'], function (exports) {\r
- var layer = layui.layer;\r
- var popupRightIndex, popupCenterIndex, popupCenterParam;\r
- var baseUrl = window.location.pathname;\r
-\r
- var admin = {\r
- isRefresh: false,\r
- // 设置侧栏折叠\r
- flexible: function (expand) {\r
- var isExapnd = $('.layui-layout-admin').hasClass('admin-nav-mini');\r
- if (isExapnd == !expand) {\r
- return;\r
- }\r
- if (expand) {\r
- $('.layui-layout-admin').removeClass('admin-nav-mini');\r
- } else {\r
- $('.layui-layout-admin').addClass('admin-nav-mini');\r
- }\r
- },\r
- // 设置导航栏选中\r
- activeNav: function (url) {\r
- $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child dd').removeClass('layui-this');\r
- $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-this');\r
- if (url && url != '') {\r
- $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-nav-itemed');\r
- var $a = $('.layui-layout-admin .layui-side .layui-nav a[href="#!' + url + '"]');\r
- $a.parent('li').addClass('layui-this');\r
- $a.parent('dd').addClass('layui-this');\r
- $a.parent('dd').parent('.layui-nav-child').parent('.layui-nav-item').addClass('layui-nav-itemed');\r
- }\r
- },\r
- // 右侧弹出\r
- popupRight: function (path) {\r
- var param = new Object();\r
- param.path = path;\r
- param.id = 'adminPopupR';\r
- param.title = false;\r
- param.anim = 2;\r
- param.isOutAnim = false;\r
- param.closeBtn = false;\r
- param.offset = 'r';\r
- param.shadeClose = true;\r
- param.area = '336px';\r
- param.skin = 'layui-layer-adminRight';\r
- param.end = function () {\r
- layer.closeAll('tips');\r
- };\r
- popupRightIndex = admin.open(param);\r
- return popupRightIndex;\r
- },\r
- // 关闭右侧弹出\r
- closePopupRight: function () {\r
- layer.close(popupRightIndex);\r
- },\r
- // 中间弹出\r
- popupCenter: function (param) {\r
- param.id = 'adminPopupC';\r
- popupCenterParam = param;\r
- popupCenterIndex = admin.open(param);\r
- return popupCenterIndex;\r
- },\r
- // 关闭中间弹出并且触发finish回调\r
- finishPopupCenter: function () {\r
- layer.close(popupCenterIndex);\r
- popupCenterParam.finish ? popupCenterParam.finish() : '';\r
- },\r
- // 关闭中间弹出\r
- closePopupCenter: function () {\r
- layer.close(popupCenterIndex);\r
- },\r
- // 封装layer.open\r
- open: function (param) {\r
- var sCallBack = param.success;\r
- param.type = 1;\r
- param.area = param.area ? param.area : '450px';\r
- param.offset = param.offset ? param.offset : '120px';\r
- param.resize ? param.resize : false;\r
- param.shade ? param.shade : .2;\r
- param.success = function (layero, index) {\r
- sCallBack ? sCallBack(layero, index) : '';\r
- admin.ajax({\r
- url: param.path,\r
- type: 'GET',\r
- dataType: 'html',\r
- success: function (result, status, xhr) {\r
- $(layero).children('.layui-layer-content').html(result);\r
- }\r
- });\r
- };\r
- return layer.open(param);\r
- },\r
- \r
- go:function(url,data,success,error){\r
- $.ajax({\r
- url: url,\r
- data: data,\r
- async: false,\r
- dataType: 'json',\r
- type: 'post',\r
- success: success,\r
- error:error\r
- })\r
- },\r
- dgo:function(url,data,success,error){\r
- $.ajax({\r
- url: url,\r
- data: data,\r
- async: false,\r
- dataType: 'json',\r
- type: 'get',\r
- success: success,\r
- error:error\r
- })\r
- },\r
- // 封装ajax请求,返回数据类型为json\r
- req: function (url, data, success, method) {\r
- admin.ajax({\r
- url: url,\r
- data: data,\r
- async: false,\r
- type: method,\r
- dataType: 'json',\r
- success: success\r
- });\r
- },\r
- // 封装ajax请求\r
- ajax: function (param) {\r
- console.log(param);\r
- var successCallback = param.success;\r
- param.success = function (result, status, xhr) {\r
- // 判断登录过期和没有权限\r
- var jsonRs;\r
- if ('json' == param.dataType.toLowerCase()) {\r
- jsonRs = result;\r
- } else if ('html' == param.dataType.toLowerCase() || 'text' == param.dataType.toLowerCase()) {\r
- jsonRs = admin.parseJSON(result);\r
- }\r
- if (jsonRs) {\r
- if (jsonRs.code == 401) {\r
- layer.msg(jsonRs.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('/login');\r
- }, 1000);\r
- return;\r
- } else if ('html' == param.dataType.toLowerCase() && jsonRs.code == 403) {\r
- layer.msg(jsonRs.msg, {icon: 2});\r
- }\r
- }\r
- successCallback(result, status, xhr);\r
- };\r
- param.error = function (xhr) {\r
- //{code: xhr.status, msg: xhr.statusText}\r
- param.success(xhr.responseText,xhr.status,xhr);\r
- };\r
- $.ajax(param);\r
- },\r
- // 显示加载动画\r
- showLoading: function (element) {\r
- $(element).append('<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop admin-loading"></i>');\r
- },\r
- // 移除加载动画\r
- removeLoading: function (element) {\r
- $(element + '>.admin-loading').remove();\r
- },\r
- // 缓存临时数据\r
- putTempData: function (key, value) {\r
- if (value) {\r
- layui.sessionData('tempData', {key: key, value: value});\r
- } else {\r
- layui.sessionData('tempData', {key: key, remove: true});\r
- }\r
- },\r
- // 获取缓存临时数据\r
- getTempData: function (key) {\r
- return layui.sessionData('tempData')[key];\r
- },\r
- // 滑动选项卡\r
- rollPage: function (d) {\r
- var $tabTitle = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');\r
- var left = $tabTitle.scrollLeft();\r
- if ('left' === d) {\r
- $tabTitle.scrollLeft(left - 120);\r
- } else if ('auto' === d) {\r
- var autoLeft = 0;\r
- $tabTitle.children("li").each(function () {\r
- if ($(this).hasClass('layui-this')) {\r
- return false;\r
- } else {\r
- autoLeft += $(this).outerWidth();\r
- }\r
- });\r
- $tabTitle.scrollLeft(autoLeft - 47);\r
- } else {\r
- $tabTitle.scrollLeft(left + 120);\r
- }\r
- },\r
- // 刷新主题部分\r
- refresh: function () {\r
- admin.isRefresh = true;\r
- Q.refresh();\r
- },\r
- // 判断是否为json\r
- parseJSON: function (str) {\r
- if (typeof str == 'string') {\r
- try {\r
- var obj = JSON.parse(str);\r
- if (typeof obj == 'object' && obj) {\r
- return obj;\r
- }\r
- } catch (e) {\r
- }\r
- }\r
- },\r
- formatDate:function (str) {\r
- if (str == null || str == "") {\r
- return;\r
- }\r
- switch (str.length) {\r
- case 8:\r
- str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);\r
- return str;\r
- case 12:\r
- str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)\r
- + ":" + str.substring(10, 12);\r
- return str;\r
- case 14:\r
- str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)\r
- + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);\r
- return str;\r
- default:\r
- return str;\r
- }\r
- },\r
- errorBack: function (err) {\r
- layer.closeAll('loading');\r
- if (403 == err.status) {\r
- layer.msg("无资源权限!", {icon: 2, time: 1500});\r
- return;\r
- }\r
- if (200 == err.status) {\r
- layer.msg("请求异常,请刷新页面重新操作", {icon: 2, time: 1500});\r
- return;\r
- } else {\r
- layer.msg("请求服务器失败!", {icon: 2});\r
- }\r
- }\r
- };\r
-\r
- // ewAdmin提供的事件\r
- admin.events = {\r
- // 折叠侧导航\r
- flexible: function (e) {\r
- var expand = $('.layui-layout-admin').hasClass('admin-nav-mini');\r
- admin.flexible(expand);\r
- },\r
- // 刷新主体部分\r
- refresh: function () {\r
- admin.refresh();\r
- },\r
- //后退\r
- back: function () {\r
- history.back();\r
- },\r
- // 设置主题\r
- theme: function () {\r
- admin.popupRight(baseUrl+'home/theme');\r
- },\r
- // 全屏\r
- fullScreen: function (e) {\r
- var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';\r
- var ti = $(this).find('i');\r
-\r
- var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;\r
- if (isFullscreen) {\r
- var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;\r
- if (efs) {\r
- efs.call(document);\r
- } else if (window.ActiveXObject) {\r
- var ws = new ActiveXObject('WScript.Shell');\r
- ws && ws.SendKeys('{F11}');\r
- }\r
- ti.addClass(ac).removeClass(ic);\r
- } else {\r
- var el = document.documentElement;\r
- var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;\r
- if (rfs) {\r
- rfs.call(el);\r
- } else if (window.ActiveXObject) {\r
- var ws = new ActiveXObject('WScript.Shell');\r
- ws && ws.SendKeys('{F11}');\r
- }\r
- ti.addClass(ic).removeClass(ac);\r
- }\r
- },\r
- // 左滑动tab\r
- leftPage: function () {\r
- admin.rollPage("left");\r
- },\r
- // 右滑动tab\r
- rightPage: function () {\r
- admin.rollPage();\r
- },\r
- // 关闭当前选项卡\r
- closeThisTabs: function () {\r
- var $title = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');\r
- if ($title.find('li').first().hasClass('layui-this')) {\r
- return;\r
- }\r
- $title.find('li.layui-this').find(".layui-tab-close").trigger("click");\r
- },\r
- // 关闭其他选项卡\r
- closeOtherTabs: function () {\r
- $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');\r
- },\r
- // 关闭所有选项卡\r
- closeAllTabs: function () {\r
- $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');\r
- },\r
- // 关闭所有弹窗\r
- closeDialog: function () {\r
- layer.closeAll('page');\r
- },\r
- //刷新字典\r
- refreshDict: function (){\r
- layer.confirm('确定要刷新数据字典吗?', {\r
- btn: ['确定', '取消']\r
- }, function (index, layero) {\r
- layer.closeAll('dialog'); //加入这个信息点击确定 会关闭这个消息框\r
- admin.dgo(baseUrl+"dictrefresh", {}, function (data) {\r
- if (data.code == 200) {\r
- layer.msg("刷新数据字典成功!", {icon: 1, time: 1000});\r
- DictPoolToolkit().initAll(baseUrl+"dictpool");\r
- } else if (data.code == 401) {\r
- layer.msg(data.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('/login');\r
- }, 1000);\r
- return;\r
- } else {\r
- layer.msg(data.msg, {icon: 2, time: 1500});\r
- }\r
- }, function () {\r
- layer.msg("数据字典刷新失败,访问服务器失败!", {icon: 2, time: 1500});\r
- });\r
- });\r
- }\r
- };\r
-\r
- // 所有ew-event\r
- $('body').on('click', '*[ew-event]', function () {\r
- var event = $(this).attr('ew-event');\r
- var te = admin.events[event];\r
- te && te.call(this, $(this));\r
- });\r
-\r
- // 移动设备遮罩层点击事件\r
- $('.site-mobile-shade').click(function () {\r
- admin.flexible(true);\r
- });\r
-\r
- // 侧导航折叠状态下鼠标经过显示提示\r
- $('body').on('mouseenter', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {\r
- var tipText = $(this).find('cite').text();\r
- if (document.body.clientWidth > 750) {\r
- layer.tips(tipText, this);\r
- }\r
- }).on('mouseleave', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {\r
- layer.closeAll('tips');\r
- });\r
-\r
- // 侧导航折叠状态下点击展开\r
- $('body').on('click', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {\r
- if (document.body.clientWidth > 750) {\r
- layer.closeAll('tips');\r
- admin.flexible(true);\r
- }\r
- });\r
-\r
- // 所有lay-tips处理\r
- $('body').on('mouseenter', '*[lay-tips]', function () {\r
- var tipText = $(this).attr('lay-tips');\r
- var dt = $(this).attr('lay-direction');\r
- layer.tips(tipText, this, {tips: dt || 1, time: -1});\r
- }).on('mouseleave', '*[lay-tips]', function () {\r
- layer.closeAll('tips');\r
- });\r
-\r
- exports('admin', admin);\r
-});\r
+layui.define(['layer'], function (exports) {
+ var layer = layui.layer;
+ var popupRightIndex, popupCenterIndex, popupCenterParam;
+ var baseUrl = window.location.pathname;
+
+ var admin = {
+ isRefresh: false,
+ // 设置侧栏折叠
+ flexible: function (expand) {
+ var isExapnd = $('.layui-layout-admin').hasClass('admin-nav-mini');
+ if (isExapnd == !expand) {
+ return;
+ }
+ if (expand) {
+ $('.layui-layout-admin').removeClass('admin-nav-mini');
+ } else {
+ $('.layui-layout-admin').addClass('admin-nav-mini');
+ }
+ },
+ // 设置导航栏选中
+ activeNav: function (url) {
+ $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child dd').removeClass('layui-this');
+ $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-this');
+ if (url && url != '') {
+ $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-nav-itemed');
+ var $a = $('.layui-layout-admin .layui-side .layui-nav a[href="#!' + url + '"]');
+ $a.parent('li').addClass('layui-this');
+ $a.parent('dd').addClass('layui-this');
+ $a.parent('dd').parent('.layui-nav-child').parent('.layui-nav-item').addClass('layui-nav-itemed');
+ }
+ },
+ // 右侧弹出
+ popupRight: function (path) {
+ var param = new Object();
+ param.path = path;
+ param.id = 'adminPopupR';
+ param.title = false;
+ param.anim = 2;
+ param.isOutAnim = false;
+ param.closeBtn = false;
+ param.offset = 'r';
+ param.shadeClose = true;
+ param.area = '336px';
+ param.skin = 'layui-layer-adminRight';
+ param.end = function () {
+ layer.closeAll('tips');
+ };
+ popupRightIndex = admin.open(param);
+ return popupRightIndex;
+ },
+ // 关闭右侧弹出
+ closePopupRight: function () {
+ layer.close(popupRightIndex);
+ },
+ // 中间弹出
+ popupCenter: function (param) {
+ param.id = 'adminPopupC';
+ popupCenterParam = param;
+ popupCenterIndex = admin.open(param);
+ return popupCenterIndex;
+ },
+ // 关闭中间弹出并且触发finish回调
+ finishPopupCenter: function () {
+ layer.close(popupCenterIndex);
+ popupCenterParam.finish ? popupCenterParam.finish() : '';
+ },
+ // 关闭中间弹出
+ closePopupCenter: function () {
+ layer.close(popupCenterIndex);
+ },
+ // 封装layer.open
+ open: function (param) {
+ var sCallBack = param.success;
+ param.type = 1;
+ param.area = param.area ? param.area : '450px';
+ param.offset = param.offset ? param.offset : '120px';
+ param.resize ? param.resize : false;
+ param.shade ? param.shade : .2;
+ param.success = function (layero, index) {
+ sCallBack ? sCallBack(layero, index) : '';
+ admin.ajax({
+ url: param.path,
+ type: 'GET',
+ dataType: 'html',
+ success: function (result, status, xhr) {
+ $(layero).children('.layui-layer-content').html(result);
+ }
+ });
+ };
+ return layer.open(param);
+ },
+
+ go:function(url,data,success,error){
+ $.ajax({
+ url: url,
+ data: data,
+ async: false,
+ dataType: 'json',
+ type: 'post',
+ success: success,
+ error:error
+ })
+ },
+ dgo:function(url,data,success,error){
+ $.ajax({
+ url: url,
+ data: data,
+ async: false,
+ dataType: 'json',
+ type: 'get',
+ success: success,
+ error:error
+ })
+ },
+ // 封装ajax请求,返回数据类型为json
+ req: function (url, data, success, method) {
+ admin.ajax({
+ url: url,
+ data: data,
+ async: false,
+ type: method,
+ dataType: 'json',
+ success: success
+ });
+ },
+ // 封装ajax请求
+ ajax: function (param) {
+ console.log(param);
+ var successCallback = param.success;
+ param.success = function (result, status, xhr) {
+ // 判断登录过期和没有权限
+ var jsonRs;
+ if ('json' == param.dataType.toLowerCase()) {
+ jsonRs = result;
+ } else if ('html' == param.dataType.toLowerCase() || 'text' == param.dataType.toLowerCase()) {
+ jsonRs = admin.parseJSON(result);
+ }
+ if (jsonRs) {
+ if (jsonRs.code == 401) {
+ layer.msg(jsonRs.msg, {icon: 2, time: 1500}, function () {
+ location.replace('/login');
+ }, 1000);
+ return;
+ } else if ('html' == param.dataType.toLowerCase() && jsonRs.code == 403) {
+ layer.msg(jsonRs.msg, {icon: 2});
+ }
+ }
+ successCallback(result, status, xhr);
+ };
+ param.error = function (xhr) {
+ //{code: xhr.status, msg: xhr.statusText}
+ param.success(xhr.responseText,xhr.status,xhr);
+ };
+ $.ajax(param);
+ },
+ // 显示加载动画
+ showLoading: function (element) {
+ $(element).append('<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop admin-loading"></i>');
+ },
+ // 移除加载动画
+ removeLoading: function (element) {
+ $(element + '>.admin-loading').remove();
+ },
+ // 缓存临时数据
+ putTempData: function (key, value) {
+ if (value) {
+ layui.sessionData('tempData', {key: key, value: value});
+ } else {
+ layui.sessionData('tempData', {key: key, remove: true});
+ }
+ },
+ // 获取缓存临时数据
+ getTempData: function (key) {
+ return layui.sessionData('tempData')[key];
+ },
+ // 滑动选项卡
+ rollPage: function (d) {
+ var $tabTitle = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');
+ var left = $tabTitle.scrollLeft();
+ if ('left' === d) {
+ $tabTitle.scrollLeft(left - 120);
+ } else if ('auto' === d) {
+ var autoLeft = 0;
+ $tabTitle.children("li").each(function () {
+ if ($(this).hasClass('layui-this')) {
+ return false;
+ } else {
+ autoLeft += $(this).outerWidth();
+ }
+ });
+ $tabTitle.scrollLeft(autoLeft - 47);
+ } else {
+ $tabTitle.scrollLeft(left + 120);
+ }
+ },
+ // 刷新主题部分
+ refresh: function () {
+ admin.isRefresh = true;
+ Q.refresh();
+ },
+ // 判断是否为json
+ parseJSON: function (str) {
+ if (typeof str == 'string') {
+ try {
+ var obj = JSON.parse(str);
+ if (typeof obj == 'object' && obj) {
+ return obj;
+ }
+ } catch (e) {
+ }
+ }
+ },
+ formatDate:function (str) {
+ if (str == null || str == "") {
+ return;
+ }
+ switch (str.length) {
+ case 8:
+ str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
+ return str;
+ case 12:
+ str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
+ + ":" + str.substring(10, 12);
+ return str;
+ case 14:
+ str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
+ + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);
+ return str;
+ default:
+ return str;
+ }
+ },
+ errorBack: function (err) {
+ layer.closeAll('loading');
+ if (403 == err.status) {
+ layer.msg("无资源权限!", {icon: 2, time: 1500});
+ return;
+ }
+ if (200 == err.status) {
+ layer.msg("请求异常,请刷新页面重新操作", {icon: 2, time: 1500});
+ return;
+ } else {
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ }
+ };
+
+ // ewAdmin提供的事件
+ admin.events = {
+ // 折叠侧导航
+ flexible: function (e) {
+ var expand = $('.layui-layout-admin').hasClass('admin-nav-mini');
+ admin.flexible(expand);
+ },
+ // 刷新主体部分
+ refresh: function () {
+ admin.refresh();
+ },
+ //后退
+ back: function () {
+ history.back();
+ },
+ // 设置主题
+ theme: function () {
+ admin.popupRight(baseUrl+'home/theme');
+ },
+ // 全屏
+ fullScreen: function (e) {
+ var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';
+ var ti = $(this).find('i');
+
+ var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
+ if (isFullscreen) {
+ var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
+ if (efs) {
+ efs.call(document);
+ } else if (window.ActiveXObject) {
+ var ws = new ActiveXObject('WScript.Shell');
+ ws && ws.SendKeys('{F11}');
+ }
+ ti.addClass(ac).removeClass(ic);
+ } else {
+ var el = document.documentElement;
+ var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;
+ if (rfs) {
+ rfs.call(el);
+ } else if (window.ActiveXObject) {
+ var ws = new ActiveXObject('WScript.Shell');
+ ws && ws.SendKeys('{F11}');
+ }
+ ti.addClass(ic).removeClass(ac);
+ }
+ },
+ // 左滑动tab
+ leftPage: function () {
+ admin.rollPage("left");
+ },
+ // 右滑动tab
+ rightPage: function () {
+ admin.rollPage();
+ },
+ // 关闭当前选项卡
+ closeThisTabs: function () {
+ var $title = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');
+ if ($title.find('li').first().hasClass('layui-this')) {
+ return;
+ }
+ $title.find('li.layui-this').find(".layui-tab-close").trigger("click");
+ },
+ // 关闭其他选项卡
+ closeOtherTabs: function () {
+ $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
+ },
+ // 关闭所有选项卡
+ closeAllTabs: function () {
+ $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
+ },
+ // 关闭所有弹窗
+ closeDialog: function () {
+ layer.closeAll('page');
+ },
+ //刷新字典
+ refreshDict: function (){
+ layer.confirm('确定要刷新数据字典吗?', {
+ btn: ['确定', '取消']
+ }, function (index, layero) {
+ layer.closeAll('dialog'); //加入这个信息点击确定 会关闭这个消息框
+ admin.dgo(baseUrl+"dictrefresh", {}, function (data) {
+ if (data.code == 200) {
+ layer.msg("刷新数据字典成功!", {icon: 1, time: 1000});
+ DictPoolToolkit().initAll(baseUrl+"dictpool");
+ } 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, time: 1500});
+ }
+ }, function () {
+ layer.msg("数据字典刷新失败,访问服务器失败!", {icon: 2, time: 1500});
+ });
+ });
+ }
+ };
+
+ // 所有ew-event
+ $('body').on('click', '*[ew-event]', function () {
+ var event = $(this).attr('ew-event');
+ var te = admin.events[event];
+ te && te.call(this, $(this));
+ });
+
+ // 移动设备遮罩层点击事件
+ $('.site-mobile-shade').click(function () {
+ admin.flexible(true);
+ });
+
+ // 侧导航折叠状态下鼠标经过显示提示
+ $('body').on('mouseenter', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
+ var tipText = $(this).find('cite').text();
+ if (document.body.clientWidth > 750) {
+ layer.tips(tipText, this);
+ }
+ }).on('mouseleave', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
+ layer.closeAll('tips');
+ });
+
+ // 侧导航折叠状态下点击展开
+ $('body').on('click', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
+ if (document.body.clientWidth > 750) {
+ layer.closeAll('tips');
+ admin.flexible(true);
+ }
+ });
+
+ // 所有lay-tips处理
+ $('body').on('mouseenter', '*[lay-tips]', function () {
+ var tipText = $(this).attr('lay-tips');
+ var dt = $(this).attr('lay-direction');
+ layer.tips(tipText, this, {tips: dt || 1, time: -1});
+ }).on('mouseleave', '*[lay-tips]', function () {
+ layer.closeAll('tips');
+ });
+
+ exports('admin', admin);
+});
-<!DOCTYPE html>\r
-<html xmlns:th="http://www.thymeleaf.org" >\r
-<head>\r
- <meta charset="utf-8">\r
- <title>403 无权限</title>\r
- <meta name="renderer" content="webkit">\r
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\r
- <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">\r
- <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>\r
- <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}" media="all"/>\r
-</head>\r
-<body>\r
-<div class="layui-fluid">\r
- <div class="layadmin-tips">\r
- <i class="layui-icon" face></i>\r
- <div class="layui-text">\r
- <p>没有权限</p>\r
- <h1>\r
- <span class="layui-anim layui-anim-loop layui-anim-">4</span> \r
- <span class="layui-anim layui-anim-loop layui-anim-rotate">0</span> \r
- <span class="layui-anim layui-anim-loop layui-anim-">3</span>\r
- </h1>\r
- </div>\r
- </div>\r
-</div>\r
-</body>\r
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" >
+<head>
+ <meta charset="utf-8">
+ <title>403 无权限</title>
+ <meta name="renderer" content="webkit">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+ <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>
+ <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}" media="all"/>
+</head>
+<body>
+<div class="layui-fluid">
+ <div class="layadmin-tips">
+ <i class="layui-icon" face></i>
+ <div class="layui-text">
+ <p>没有权限</p>
+ <h1>
+ <span class="layui-anim layui-anim-loop layui-anim-">4</span>
+ <span class="layui-anim layui-anim-loop layui-anim-rotate">0</span>
+ <span class="layui-anim layui-anim-loop layui-anim-">3</span>
+ </h1>
+ </div>
+ </div>
+</div>
+</body>
</html>
\ No newline at end of file
-<!DOCTYPE html>\r
-<html xmlns:th="http://www.thymeleaf.org" >\r
-<head>\r
- <meta charset="utf-8">\r
- <title>404 页面不存在</title>\r
- <meta name="renderer" content="webkit">\r
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\r
- <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">\r
- <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>\r
- <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}" media="all"/>\r
-</head>\r
-<body>\r
-\r
-<div class="layui-fluid">\r
- <div class="layadmin-tips">\r
- <i class="layui-icon" face></i>\r
- <div class="layui-text">\r
- <p>页面不存在</p>\r
- <h1>\r
- <span class="layui-anim layui-anim-loop layui-anim-">4</span> \r
- <span class="layui-anim layui-anim-loop layui-anim-rotate">0</span> \r
- <span class="layui-anim layui-anim-loop layui-anim-">4</span>\r
- </h1>\r
- </div>\r
- </div>\r
-</div>\r
-</body>\r
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" >
+<head>
+ <meta charset="utf-8">
+ <title>404 页面不存在</title>
+ <meta name="renderer" content="webkit">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+ <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>
+ <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}" media="all"/>
+</head>
+<body>
+
+<div class="layui-fluid">
+ <div class="layadmin-tips">
+ <i class="layui-icon" face></i>
+ <div class="layui-text">
+ <p>页面不存在</p>
+ <h1>
+ <span class="layui-anim layui-anim-loop layui-anim-">4</span>
+ <span class="layui-anim layui-anim-loop layui-anim-rotate">0</span>
+ <span class="layui-anim layui-anim-loop layui-anim-">4</span>
+ </h1>
+ </div>
+ </div>
+</div>
+</body>
</html>
\ No newline at end of file
-<!DOCTYPE html>\r
-<html xmlns:th="http://www.thymeleaf.org" >\r
-<head>\r
- <meta charset="utf-8">\r
- <title>500 服务出错</title>\r
- <meta name="renderer" content="webkit">\r
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\r
- <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">\r
- <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>\r
- <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}" media="all"/>\r
-</head>\r
-<body>\r
-\r
-<div class="layui-fluid">\r
- <div class="layadmin-tips">\r
- <i class="layui-icon" face></i>\r
- <div class="layui-text">\r
- <p>服务器出错了</p>\r
- <h1>\r
- <span class="layui-anim layui-anim-loop layui-anim-">5</span>\r
- <span class="layui-anim layui-anim-loop layui-anim-rotate">0</span> \r
- <span class="layui-anim layui-anim-loop layui-anim-">0</span>\r
- </h1>\r
- </div>\r
- </div>\r
-</div>\r
-</body>\r
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" >
+<head>
+ <meta charset="utf-8">
+ <title>500 服务出错</title>
+ <meta name="renderer" content="webkit">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+ <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>
+ <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}" media="all"/>
+</head>
+<body>
+
+<div class="layui-fluid">
+ <div class="layadmin-tips">
+ <i class="layui-icon" face></i>
+ <div class="layui-text">
+ <p>服务器出错了</p>
+ <h1>
+ <span class="layui-anim layui-anim-loop layui-anim-">5</span>
+ <span class="layui-anim layui-anim-loop layui-anim-rotate">0</span>
+ <span class="layui-anim layui-anim-loop layui-anim-">0</span>
+ </h1>
+ </div>
+ </div>
+</div>
+</body>
</html>
\ No newline at end of file
-<div class="layui-row layui-col-space15">\r
-\r
-</div>\r
-\r
-\r
-\r
- \r
-\r
-<script>\r
- layui.use(['carousel', 'element'], function () {\r
- var carousel = layui.carousel;\r
- var element = layui.element;\r
- var device = layui.device;\r
-\r
- layui.link('[[@{/static/custom/css/console.css}]]');\r
-\r
- // 渲染轮播\r
- carousel.render({\r
- elem: '.layui-carousel',\r
- width: '100%',\r
- height: '60px',\r
- arrow: 'none',\r
- autoplay: true,\r
- trigger: device.ios || device.android ? 'click' : 'hover',\r
- anim: 'fade'\r
- });\r
- });\r
-</script>\r
+<div class="layui-row layui-col-space15">
+
+</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>
-<div class="layui-card-header">\r
- <h2 class="header-title">修改密码</h2>\r
-</div>\r
-<div class="layui-card-body" style="padding: 30px;">\r
- <form class="layui-form" id="form-psw">\r
- <div class="layui-form-item">\r
- <input type="password" name="oldPsw" required lay-verify="required" class="layui-input"\r
- placeholder="请输入原密码" lay-verType="tips">\r
- </div>\r
- <div class="layui-form-item">\r
- <input type="password" name="newPsw" required lay-verify="required|psw" class="layui-input"\r
- placeholder="请输入新密码" lay-verType="tips">\r
- </div>\r
- <div class="layui-form-item">\r
- <input type="password" name="rePsw" required lay-verify="required|repsw" class="layui-input"\r
- placeholder="再次输入新密码" lay-verType="tips">\r
- </div>\r
- <div class="layui-form-item">\r
- <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="submit-psw">确认修改</button>\r
- </div>\r
- </form>\r
-</div>\r
-\r
-<script>\r
- layui.use(['form', 'admin', 'layer'], function () {\r
- var form = layui.form;\r
- var admin = layui.admin;\r
- var layer = layui.layer;\r
-\r
- // 监听提交\r
- form.on('submit(submit-psw)', function (data) {\r
- layer.load(2);\r
- $.post('[[@{/system/user/updatePsw}]]', data.field, function (data) {\r
- if (data.code == 200) {\r
- layer.closeAll('loading');\r
- admin.closePopupRight();\r
- layer.msg(data.msg, {icon: 1, time: 1000}, function () {\r
- location.replace('logout');\r
- });\r
- } else {\r
- layer.closeAll('loading');\r
- layer.msg(data.msg, {icon: 2});\r
- }\r
- });\r
- return false;\r
- });\r
-\r
- // 添加表单验证方法\r
- form.verify({\r
- psw: [/^[\S]{5,12}$/, '密码必须5到12位,且不能出现空格'],\r
- repsw: function (t) {\r
- if (t !== $('#form-psw input[name=newPsw]').val()) {\r
- return '两次密码输入不一致';\r
- }\r
- }\r
- });\r
- });\r
+<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
-<div class="layui-card-header">\r
- <h2 class="header-title">多标签:</h2>\r
- <div class="pull-right layui-form">\r
- <input type="checkbox" lay-skin="switch" lay-text="ON|OFF" id="set-tab" lay-filter="set-tab" checked/>\r
- </div>\r
-</div>\r
-\r
-<div class="layui-card-header"><h2 class="header-title">设置主题:</h2></div>\r
-<div class="layui-card-body layui-text">\r
- <a th:href="@{/home/setTheme}" class="layui-btn" style="background-color: #009688;">默认主题</a>\r
- <a th:href="@{/home/setTheme?themeName=blue}" class="layui-btn layui-btn-normal">蓝色主题</a>\r
- <br><br><br>\r
- \r
-</div>\r
-\r
-<script>\r
- layui.use(['form', 'index', 'admin'], function () {\r
- var form = layui.form;\r
- var index = layui.index;\r
- var admin = layui.admin;\r
-\r
- $('#set-tab').prop('checked', index.pageTabs);\r
- form.render('checkbox');\r
-\r
- form.on('switch(set-tab)', function (data) {\r
- if (data.elem.checked) {\r
- location.reload();\r
- } else {\r
- index.pageTabs = false;\r
- index.checkPageTabs();\r
- admin.refresh();\r
- admin.closePopupRight();\r
- }\r
- });\r
-\r
- });\r
+<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 th:href="@{/home/setTheme}" class="layui-btn" style="background-color: #009688;">默认主题</a>
+ <a th: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
-<!DOCTYPE html>\r
-<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">\r
-\r
-<head>\r
- <title>首页</title>\r
- <meta name="_csrf_header" th:content="${_csrf.headerName}" />\r
- <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />\r
- <meta charset="utf-8"/>\r
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\r
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">\r
- <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>\r
- <link rel="stylesheet" th:href="@{/static/libs/zTree/css/zTreeStyle/zTreeStyle.css}"/>\r
- <link rel="stylesheet" th:href="@{/static/custom/module/formSelects/formSelects-v4.css}"/>\r
- <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}"/>\r
- <link th:if="${session.theme != null}" rel="stylesheet" th:href="@{/static/custom/css/theme-blue.css}"/>\r
-</head>\r
-\r
-<body class="layui-layout-body">\r
-<div class="layui-layout layui-layout-admin">\r
- <!-- 头部 -->\r
- <div class="layui-header">\r
- <div class="layui-logo">\r
- <img th:src="@{/static/custom/images/logo.png}"/>\r
- <cite>支付中心</cite>\r
- </div>\r
- <ul class="layui-nav layui-layout-left">\r
- <li class="layui-nav-item" lay-unselect>\r
- <a ew-event="flexible" title="侧边伸缩"><i class="layui-icon layui-icon-shrink-right"></i></a>\r
- </li>\r
- <li class="layui-nav-item" lay-unselect>\r
- <a ew-event="refresh" title="刷新"><i class="layui-icon layui-icon-refresh-3"></i></a>\r
- </li>\r
- </ul>\r
- <ul class="layui-nav layui-layout-right">\r
- <li class="layui-nav-item" lay-unselect>\r
- <a ew-event="refreshDict" title="刷新字典"><i class="layui-icon layui-icon-read"></i></a>\r
- </li>\r
- <!--<li class="layui-nav-item" lay-unselect>-->\r
- <!--<a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>-->\r
- <!--</li>-->\r
- <li class="layui-nav-item layui-hide-xs" lay-unselect>\r
- <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>\r
- </li>\r
- <li class="layui-nav-item" lay-unselect>\r
- <a href="javascript:;">\r
- <img th:src="@{/static/custom/images/head.png}" class="layui-nav-img">\r
- <cite>[[${loginOper.opername}]]</cite>\r
- </a>\r
- <dl class="layui-nav-child">\r
- <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>\r
- <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>\r
- <hr>\r
- <dd layadmin-event="logout" style="text-align: center;" ><a th:href="@{/logout}">退出</a></dd>\r
- </dl>\r
- </li>\r
- <li class="layui-nav-item" lay-unselect>\r
- <a ew-event="theme" title="主题"><i class="layui-icon layui-icon-more-vertical"></i></a>\r
- </li>\r
- </ul>\r
- </div>\r
-\r
- <!-- 侧边栏 -->\r
- <div class="layui-side">\r
- <div class="layui-side-scroll">\r
- <ul class="layui-nav layui-nav-tree" style="margin-top: 15px;">\r
-\r
- <li class="layui-nav-item" th:each="menu : ${menus}">\r
- <a th:lay-href="${menu.menuUrl}"><i th:class="'layui-icon '+${menu.menuIcon}"></i> <cite>[[${menu.menuName}]]</cite></a>\r
- <dl class="layui-nav-child" th:if="${menu.subMenus.size()} > 0">\r
- <dd th:each="subMenu : ${menu.subMenus}">\r
- <a th:lay-href="${subMenu.menuUrl}">[[${subMenu.menuName}]]</a>\r
- <dl class="layui-nav-child" th:if="${subMenu.subMenus.size()} > 0">\r
- <dd th:each="temp : ${subMenu.subMenus}"><a th:lay-href="${temp.menuUrl}">\r
- <i th:class="'layui-icon '+${temp.menuIcon}"></i>\r
- [[${temp.menuName}]]\r
- </a>\r
- </dd>\r
- </dl>\r
- </dd>\r
- </dl>\r
- </li>\r
-\r
- <!--<li class="layui-nav-item">-->\r
- <!--<a href="javascript:;"><i class="layui-icon layui-icon-unlink"></i> <cite>多级菜单</cite></a>-->\r
- <!--<dl class="layui-nav-child">-->\r
- <!--<dd>-->\r
- <!--<a href="javascript:;">二级菜单</a>-->\r
- <!--<dl class="layui-nav-child">-->\r
- <!--<dd><a href="javascript:;">三级菜单</a></dd>-->\r
- <!--<dd><a href="javascript:;">三级菜单</a></dd>-->\r
- <!--</dl>-->\r
- <!--</dd>-->\r
- <!--</dl>-->\r
- <!--</li>-->\r
- </ul>\r
- </div>\r
- </div>\r
-\r
-\r
- <!-- 主体部分 -->\r
- <div class="layui-body">\r
- <div class="layui-tab" lay-allowClose="true" lay-filter="admin-pagetabs">\r
- <ul class="layui-tab-title">\r
- </ul>\r
- <div class="layui-tab-content">\r
- </div>\r
- </div>\r
- <div class="layui-icon admin-tabs-control layui-icon-prev" ew-event="leftPage"></div>\r
- <div class="layui-icon admin-tabs-control layui-icon-next" ew-event="rightPage"></div>\r
- <div class="layui-icon admin-tabs-control layui-icon-down">\r
- <ul class="layui-nav admin-tabs-select" lay-filter="admin-pagetabs-nav">\r
- <li class="layui-nav-item" lay-unselect>\r
- <a href="javascript:;"></a>\r
- <dl class="layui-nav-child layui-anim-fadein">\r
- <dd ew-event="closeThisTabs" lay-unselect><a href="javascript:;">关闭当前标签页</a></dd>\r
- <dd ew-event="closeOtherTabs" lay-unselect><a href="javascript:;">关闭其它标签页</a></dd>\r
- <dd ew-event="closeAllTabs" lay-unselect><a href="javascript:;">关闭全部标签页</a></dd>\r
- </dl>\r
- </li>\r
- </ul>\r
- </div>\r
- </div>\r
-\r
- <!-- 底部 -->\r
- <div class="layui-footer">Copyright © 2018 supwisdom All rights reserved. <span class="pull-right" th:text="${payapiVersion}">Version 1.0</span>\r
- </div>\r
-\r
- <!-- 手机屏幕遮罩层 -->\r
- <div class="site-mobile-shade"></div>\r
-</div>\r
-\r
-<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>\r
-<script type="text/javascript" th:src="@{/static/libs/q.js}"></script>\r
-<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>\r
-<script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>\r
-<script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>\r
-\r
-<script>\r
- layui.config({\r
- base: 'static/custom/module/'\r
- }).extend({\r
- formSelects: 'formSelects/formSelects-v4',\r
- treetable: 'treetable-lay/treetable',\r
- treeSelect: 'treeSelect/treeSelect'\r
- }).use(['admin'], function () {\r
- var admin = layui.admin;\r
- });\r
-</script>\r
-\r
-<script>\r
- layui.use(['index'], function () {\r
- var index = layui.index;\r
- index.checkPageTabs(true); // 检查多标签是否开启\r
- index.initRouter(); // 导航栏和tab联动\r
- index.bindEvent(); // 绑定事件\r
-\r
- var dictpool = DictPoolToolkit();\r
- dictpool.initAll("[[@{/dictpool}]]"); //加载字典\r
- });\r
-</script>\r
-</body>\r
-\r
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+ <title>首页</title>
+ <meta name="_csrf_header" th:content="${_csrf.headerName}" />
+ <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />
+ <meta charset="utf-8"/>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+ <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>
+ <link rel="stylesheet" th:href="@{/static/libs/zTree/css/zTreeStyle/zTreeStyle.css}"/>
+ <link rel="stylesheet" th:href="@{/static/custom/module/formSelects/formSelects-v4.css}"/>
+ <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}"/>
+ <link th:if="${session.theme != null}" rel="stylesheet" th:href="@{/static/custom/css/theme-blue.css}"/>
+</head>
+
+<body class="layui-layout-body">
+<div class="layui-layout layui-layout-admin">
+ <!-- 头部 -->
+ <div class="layui-header">
+ <div class="layui-logo">
+ <img th:src="@{/static/custom/images/logo.png}"/>
+ <cite>支付中心</cite>
+ </div>
+ <ul class="layui-nav layui-layout-left">
+ <li class="layui-nav-item" lay-unselect>
+ <a ew-event="flexible" title="侧边伸缩"><i class="layui-icon layui-icon-shrink-right"></i></a>
+ </li>
+ <li class="layui-nav-item" lay-unselect>
+ <a ew-event="refresh" title="刷新"><i class="layui-icon layui-icon-refresh-3"></i></a>
+ </li>
+ </ul>
+ <ul class="layui-nav layui-layout-right">
+ <li class="layui-nav-item" lay-unselect>
+ <a ew-event="refreshDict" title="刷新字典"><i class="layui-icon layui-icon-read"></i></a>
+ </li>
+ <!--<li class="layui-nav-item" lay-unselect>-->
+ <!--<a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>-->
+ <!--</li>-->
+ <li class="layui-nav-item layui-hide-xs" lay-unselect>
+ <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>
+ </li>
+ <li class="layui-nav-item" lay-unselect>
+ <a href="javascript:;">
+ <img th:src="@{/static/custom/images/head.png}" class="layui-nav-img">
+ <cite>[[${loginOper.opername}]]</cite>
+ </a>
+ <dl class="layui-nav-child">
+ <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>
+ <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>
+ <hr>
+ <dd layadmin-event="logout" style="text-align: center;" ><a th:href="@{/logout}">退出</a></dd>
+ </dl>
+ </li>
+ <li class="layui-nav-item" lay-unselect>
+ <a ew-event="theme" title="主题"><i class="layui-icon layui-icon-more-vertical"></i></a>
+ </li>
+ </ul>
+ </div>
+
+ <!-- 侧边栏 -->
+ <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">
+ <dd th:each="subMenu : ${menu.subMenus}">
+ <a th:lay-href="${subMenu.menuUrl}">[[${subMenu.menuName}]]</a>
+ <dl class="layui-nav-child" th:if="${subMenu.subMenus.size()} > 0">
+ <dd th:each="temp : ${subMenu.subMenus}"><a th:lay-href="${temp.menuUrl}">
+ <i th:class="'layui-icon '+${temp.menuIcon}"></i>
+ [[${temp.menuName}]]
+ </a>
+ </dd>
+ </dl>
+ </dd>
+ </dl>
+ </li>
+
+ <!--<li class="layui-nav-item">-->
+ <!--<a href="javascript:;"><i class="layui-icon layui-icon-unlink"></i> <cite>多级菜单</cite></a>-->
+ <!--<dl class="layui-nav-child">-->
+ <!--<dd>-->
+ <!--<a href="javascript:;">二级菜单</a>-->
+ <!--<dl class="layui-nav-child">-->
+ <!--<dd><a href="javascript:;">三级菜单</a></dd>-->
+ <!--<dd><a href="javascript:;">三级菜单</a></dd>-->
+ <!--</dl>-->
+ <!--</dd>-->
+ <!--</dl>-->
+ <!--</li>-->
+ </ul>
+ </div>
+ </div>
+
+
+ <!-- 主体部分 -->
+ <div class="layui-body">
+ <div class="layui-tab" lay-allowClose="true" lay-filter="admin-pagetabs">
+ <ul class="layui-tab-title">
+ </ul>
+ <div class="layui-tab-content">
+ </div>
+ </div>
+ <div class="layui-icon admin-tabs-control layui-icon-prev" ew-event="leftPage"></div>
+ <div class="layui-icon admin-tabs-control layui-icon-next" ew-event="rightPage"></div>
+ <div class="layui-icon admin-tabs-control layui-icon-down">
+ <ul class="layui-nav admin-tabs-select" lay-filter="admin-pagetabs-nav">
+ <li class="layui-nav-item" lay-unselect>
+ <a href="javascript:;"></a>
+ <dl class="layui-nav-child layui-anim-fadein">
+ <dd ew-event="closeThisTabs" lay-unselect><a href="javascript:;">关闭当前标签页</a></dd>
+ <dd ew-event="closeOtherTabs" lay-unselect><a href="javascript:;">关闭其它标签页</a></dd>
+ <dd ew-event="closeAllTabs" lay-unselect><a href="javascript:;">关闭全部标签页</a></dd>
+ </dl>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ <!-- 底部 -->
+ <div class="layui-footer">Copyright © 2018 supwisdom All rights reserved. <span class="pull-right" th:text="${payapiVersion}">Version 1.0</span>
+ </div>
+
+ <!-- 手机屏幕遮罩层 -->
+ <div class="site-mobile-shade"></div>
+</div>
+
+<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/q.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>
+
+<script>
+ layui.config({
+ base: 'static/custom/module/'
+ }).extend({
+ formSelects: 'formSelects/formSelects-v4',
+ treetable: 'treetable-lay/treetable',
+ treeSelect: 'treeSelect/treeSelect'
+ }).use(['admin'], function () {
+ var admin = layui.admin;
+ });
+</script>
+
+<script>
+ layui.use(['index'], function () {
+ var index = layui.index;
+ index.checkPageTabs(true); // 检查多标签是否开启
+ index.initRouter(); // 导航栏和tab联动
+ index.bindEvent(); // 绑定事件
+
+ var dictpool = DictPoolToolkit();
+ dictpool.initAll("[[@{/dictpool}]]"); //加载字典
+ });
+</script>
+</body>
+
</html>
\ No newline at end of file
-<!-- operator表单弹窗 -->\r
-<form id="form" lay-filter="form" class="layui-form model-form">\r
- <input name="id" id="id" type="hidden"/>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">功能名称</label>\r
- <div class="layui-input-block">\r
- <input name="name" placeholder="请输入功能名称" type="text" class="layui-input" maxlength="20"\r
- lay-verify="required|name" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">路径</label>\r
- <div class="layui-input-block">\r
- <input name="menuUrl" placeholder="请输入路径,父节点默认为 # " type="text" class="layui-input" maxlength="60" value="#" lay-verify="required" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">节点</label>\r
- <div class="layui-input-block">\r
- <input type="radio" name="isLeaf" value="0" title="父" checked/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">序号</label>\r
- <div class="layui-input-block">\r
- <input name="orderNum" placeholder="请输入序号" type="text" class="layui-input" />\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">图标</label>\r
- <div class="layui-input-block">\r
- <input name="menuIcon" placeholder="请输入图标 例:layui-icon-xx " type="text" class="layui-input" />\r
- </div>\r
- </div>\r
-\r
- <div class="layui-form-item model-form-footer">\r
- <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>\r
- <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">保存</button>\r
- </div>\r
-</form>\r
-\r
-<script>\r
- layui.use(['layer', 'admin', 'form', 'formSelects'], function () {\r
- var layer = layui.layer;\r
- var admin = layui.admin;\r
- var form = layui.form;\r
- var formSelects = layui.formSelects;\r
- form.render('radio');\r
- form.verify({\r
- "name": function (e) {\r
- var msg = "";\r
- $.ajax({\r
- type: "GET",\r
- url: '[[@{/function/checkname}]]',\r
- async: false,\r
- data: {\r
- name: e,\r
- id: $("#id").val()\r
- },\r
- success: function (result) {\r
- if (result.code != 200) {\r
- msg = result.msg;\r
- }\r
- },\r
- error: function (error) {\r
- msg = "请求服务器校验账号失败";\r
- }\r
- });\r
- }\r
- });\r
-\r
- var url = '[[@{/function/add}]]';\r
- // 回显user数据\r
- var func = admin.getTempData('t_func');\r
- if (func) {\r
- $('input[name="id"]').attr('readonly', 'readonly');\r
- form.val('form', func);\r
- }\r
- // 表单提交事件\r
- form.on('submit(form-submit)', function (data) {\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- debugger\r
- $.ajax({\r
- type : "POST",\r
- dataType : "json",\r
- url : url,\r
- headers: {\r
- 'Accept': 'application/json',\r
- 'Content-Type': 'application/json',\r
- 'X-CSRF-TOKEN':token,\r
- },\r
- data : JSON.stringify(data.field),\r
- success : function(result) {\r
- layer.closeAll('loading');\r
- if (result.code == 200) {\r
- layer.msg(result.msg, {icon: 1});\r
- admin.finishPopupCenter();\r
- } else if (result.code == 401) {\r
- layer.msg(result.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- } else {\r
- console.log('err:' + result.code);\r
- layer.msg(result.msg, {icon: 2});\r
- }\r
- },\r
- error : function() {\r
- layer.closeAll('loading');\r
- layer.msg("请求服务器失败!", {icon: 2});\r
- }\r
- });\r
- return false;\r
- });\r
- });\r
+<!-- operator表单弹窗 -->
+<form id="form" lay-filter="form" class="layui-form model-form">
+ <input name="id" id="id" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label">功能名称</label>
+ <div class="layui-input-block">
+ <input name="name" placeholder="请输入功能名称" type="text" class="layui-input" maxlength="20"
+ lay-verify="required|name" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">路径</label>
+ <div class="layui-input-block">
+ <input name="menuUrl" placeholder="请输入路径,父节点默认为 # " type="text" class="layui-input" maxlength="60" value="#" lay-verify="required" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">节点</label>
+ <div class="layui-input-block">
+ <input type="radio" name="isLeaf" value="0" title="父" checked/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">序号</label>
+ <div class="layui-input-block">
+ <input name="orderNum" placeholder="请输入序号" type="text" class="layui-input" />
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">图标</label>
+ <div class="layui-input-block">
+ <input name="menuIcon" placeholder="请输入图标 例:layui-icon-xx " type="text" class="layui-input" />
+ </div>
+ </div>
+
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ var formSelects = layui.formSelects;
+ form.render('radio');
+ form.verify({
+ "name": function (e) {
+ var msg = "";
+ $.ajax({
+ type: "GET",
+ url: '[[@{/function/checkname}]]',
+ async: false,
+ data: {
+ name: e,
+ id: $("#id").val()
+ },
+ success: function (result) {
+ if (result.code != 200) {
+ msg = result.msg;
+ }
+ },
+ error: function (error) {
+ msg = "请求服务器校验账号失败";
+ }
+ });
+ }
+ });
+
+ var url = '[[@{/function/add}]]';
+ // 回显user数据
+ var func = admin.getTempData('t_func');
+ if (func) {
+ $('input[name="id"]').attr('readonly', 'readonly');
+ form.val('form', func);
+ }
+ // 表单提交事件
+ form.on('submit(form-submit)', function (data) {
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ debugger
+ $.ajax({
+ type : "POST",
+ dataType : "json",
+ url : url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN':token,
+ },
+ data : JSON.stringify(data.field),
+ success : function(result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ return;
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error : function() {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
</script>
\ No newline at end of file
-<div class="layui-card">\r
- <div class="layui-card-header">\r
- <h2 class="header-title">功能维护</h2>\r
- <span class="layui-breadcrumb pull-right">\r
- <a href="#">系统中心</a>\r
- <a><cite>功能维护</cite></a>\r
- </span>\r
- </div>\r
- <div class="layui-card-body">\r
- <div class="layui-form toolbar">\r
- 搜索:\r
- <input id="search-value" class="layui-input search-input" type="text" placeholder="输入功能名称"/> \r
- <button id="btn-search-func" class="layui-btn icon-btn" data-type="search"><i class="layui-icon"></i>搜索\r
- </button>\r
- <button id="btn-add-func" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加父功能</button>\r
- </div>\r
- <table class="layui-table" id="table" lay-filter="table"></table>\r
- </div>\r
-</div>\r
-\r
-<script>\r
- layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {\r
- let form = layui.form;\r
- let table = layui.table;\r
- let admin = layui.admin;\r
-\r
- form.render('select');\r
-\r
- // 渲染表格\r
- table.render({\r
- elem: '#table',\r
- url: '[[@{/function/list}]]',\r
- page: true,\r
- cols: [\r
- [\r
- {field: 'id', title: '功能ID', width: 80,fixed: 'left', sort: true},\r
- {field: 'name', title: '功能名称', sort: true},\r
- {\r
- field: 'isLeaf', title: '节点', sort: true, width: 80, align: 'center', templet: function (item) {\r
- if (item.isLeaf == 0) {\r
- return '<span class="layui-badge ">父</span>'\r
- } else if (item.isLeaf == 1) {\r
- return '<span class="layui-badge layui-bg-green">子</span>'\r
- } else {\r
- return ''\r
- }\r
- }\r
- },\r
- {field: 'menuUrl', title: '路径'},\r
- {field: 'orderNum', sort: true, width: 80,title: '序号'},\r
- {\r
- field: 'menuIcon', title: '图标', width: 80,align: 'center', templet: function (item) {\r
- return '<i class="layui-icon ' + item.menuIcon + '"></i> '\r
- }\r
- },\r
- {\r
- field: 'id', align: 'center', title: '操作', fixed: 'right', width:350, templet: function (item) {\r
- if (item.isLeaf == 0) {\r
- return ' <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +\r
- ' <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="addsub"><i class="layui-icon layui-icon-set-sm"></i>添加子功能</a> ' +\r
- ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'\r
- } else {\r
- return ' <a class="layui-btn layui-btn-xs" lay-event="editsub"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +\r
- ' <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="addres"><i class="layui-icon layui-icon-set-sm"></i>添加资源</a> ' +\r
- ' <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="listres"><i class="layui-icon layui-icon-set-sm"></i>维护资源</a> ' +\r
- ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'\r
- }\r
- }\r
- }\r
- ]\r
- ]\r
- });\r
- // 搜索按钮点击事件\r
- $('#btn-search-func').click(function () {\r
- let key = $('#search-value').val();\r
- table.reload('table', {where: {searchkey: key}, page: {curr: 1}});\r
- });\r
- $('#btn-add-func').click(function () {\r
- showModel();\r
- });\r
- let showModel = function (data) {\r
- let title = data ? '编辑父功能' : '添加父功能';\r
- admin.putTempData('t_func', data);\r
- admin.popupCenter({\r
- title: title,\r
- path: '[[@{/function/loadadd}]]',\r
- finish: function () {\r
- table.reload('table', {});\r
- }\r
- });\r
- };\r
- let showModelSub = function (data,parentid) {\r
- let title = data ? '编辑子功能' : '添加子功能';\r
- admin.putTempData('parentId', parentid);\r
- admin.putTempData('t_func', data);\r
- admin.popupCenter({\r
- title: title,\r
- path: '[[@{/function/loadsubadd}]]',\r
- finish: function () {\r
- table.reload('table', {});\r
- }\r
- });\r
- };\r
-\r
- let showResModel = function (functionid) {\r
- let title = '维护资源';\r
- admin.putTempData('functionid', functionid);\r
- admin.popupCenter({\r
- title: title,\r
- area:'70%',\r
- path: '[[@{/function/loadres}]]?functionid='+functionid\r
- });\r
- };\r
- let showAddResModelSub = function (functionid) {\r
- let title = '添加资源';\r
- admin.putTempData('functionid', functionid);\r
- admin.popupCenter({\r
- title: title,\r
- path: '[[@{/function/loadresadd}]]',\r
- finish: function () {\r
- table.reload('table', {});\r
- }\r
- });\r
- };\r
- // 工具条点击事件\r
- table.on('tool(table)', function (obj) {\r
- let data = obj.data;\r
- let layEvent = obj.event;\r
- console.log(data);\r
- if (layEvent === 'edit') {\r
- showModel(data);\r
- } else if (layEvent === 'addsub') {\r
- showModelSub(null,data.id);\r
- } else if (layEvent === 'editsub') {\r
- showModelSub(data,data.parentId);\r
- } else if (layEvent === 'del') {\r
- showDelete(data);\r
- } else if(layEvent === 'listres'){\r
- showResModel(data.id);\r
- } else if(layEvent === 'addres'){\r
- showAddResModelSub(data.id);\r
- }\r
- });\r
- let showDelete = function (data) {\r
- layer.confirm('确定删除吗,该功能下的子功能、资源、角色分配的该功能都将被删除?', function (i) {\r
- layer.close(i);\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- admin.go('[[@{/function/delfunc}]]', {\r
- funcid: data.id,\r
- _csrf:token\r
- }, function (data) {\r
- console.log(data.code);\r
- layer.closeAll('loading');\r
- if (data.code == 200) {\r
- layer.msg(data.msg, {icon: 1});\r
- } else if (data.code == 401) {\r
- layer.msg(data.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- }\r
- else {\r
- layer.msg(data.msg, {icon: 2});\r
- }\r
- table.reload('table', {});\r
- },function(ret){\r
- console.log(ret);\r
- layer.closeAll('loading');\r
- layer.msg('请求失败了,请稍后再试', {icon: 2});\r
- });\r
- });\r
- }\r
- });\r
-</script>\r
+<div class="layui-card">
+ <div class="layui-card-header">
+ <h2 class="header-title">功能维护</h2>
+ <span class="layui-breadcrumb pull-right">
+ <a href="#">系统中心</a>
+ <a><cite>功能维护</cite></a>
+ </span>
+ </div>
+ <div class="layui-card-body">
+ <div class="layui-form toolbar">
+ 搜索:
+ <input id="search-value" class="layui-input search-input" type="text" placeholder="输入功能名称"/> 
+ <button id="btn-search-func" class="layui-btn icon-btn" data-type="search"><i class="layui-icon"></i>搜索
+ </button>
+ <button id="btn-add-func" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加父功能</button>
+ </div>
+ <table class="layui-table" id="table" lay-filter="table"></table>
+ </div>
+</div>
+
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ let form = layui.form;
+ let table = layui.table;
+ let admin = layui.admin;
+
+ form.render('select');
+
+ // 渲染表格
+ table.render({
+ elem: '#table',
+ url: '[[@{/function/list}]]',
+ page: true,
+ cols: [
+ [
+ {field: 'id', title: '功能ID', width: 80,fixed: 'left', sort: true},
+ {field: 'name', title: '功能名称', sort: true},
+ {
+ field: 'isLeaf', title: '节点', sort: true, width: 80, align: 'center', templet: function (item) {
+ if (item.isLeaf == 0) {
+ return '<span class="layui-badge ">父</span>'
+ } else if (item.isLeaf == 1) {
+ return '<span class="layui-badge layui-bg-green">子</span>'
+ } else {
+ return ''
+ }
+ }
+ },
+ {field: 'menuUrl', title: '路径'},
+ {field: 'orderNum', sort: true, width: 80,title: '序号'},
+ {
+ field: 'menuIcon', title: '图标', width: 80,align: 'center', templet: function (item) {
+ return '<i class="layui-icon ' + item.menuIcon + '"></i> '
+ }
+ },
+ {
+ field: 'id', align: 'center', title: '操作', fixed: 'right', width:350, templet: function (item) {
+ if (item.isLeaf == 0) {
+ return ' <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +
+ ' <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="addsub"><i class="layui-icon layui-icon-set-sm"></i>添加子功能</a> ' +
+ ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
+ } else {
+ return ' <a class="layui-btn layui-btn-xs" lay-event="editsub"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +
+ ' <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="addres"><i class="layui-icon layui-icon-set-sm"></i>添加资源</a> ' +
+ ' <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="listres"><i class="layui-icon layui-icon-set-sm"></i>维护资源</a> ' +
+ ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
+ }
+ }
+ }
+ ]
+ ]
+ });
+ // 搜索按钮点击事件
+ $('#btn-search-func').click(function () {
+ let key = $('#search-value').val();
+ table.reload('table', {where: {searchkey: key}, page: {curr: 1}});
+ });
+ $('#btn-add-func').click(function () {
+ showModel();
+ });
+ let showModel = function (data) {
+ let title = data ? '编辑父功能' : '添加父功能';
+ admin.putTempData('t_func', data);
+ admin.popupCenter({
+ title: title,
+ path: '[[@{/function/loadadd}]]',
+ finish: function () {
+ table.reload('table', {});
+ }
+ });
+ };
+ let showModelSub = function (data,parentid) {
+ let title = data ? '编辑子功能' : '添加子功能';
+ admin.putTempData('parentId', parentid);
+ admin.putTempData('t_func', data);
+ admin.popupCenter({
+ title: title,
+ path: '[[@{/function/loadsubadd}]]',
+ finish: function () {
+ table.reload('table', {});
+ }
+ });
+ };
+
+ let showResModel = function (functionid) {
+ let title = '维护资源';
+ admin.putTempData('functionid', functionid);
+ admin.popupCenter({
+ title: title,
+ area:'70%',
+ path: '[[@{/function/loadres}]]?functionid='+functionid
+ });
+ };
+ let showAddResModelSub = function (functionid) {
+ let title = '添加资源';
+ admin.putTempData('functionid', functionid);
+ admin.popupCenter({
+ title: title,
+ path: '[[@{/function/loadresadd}]]',
+ finish: function () {
+ table.reload('table', {});
+ }
+ });
+ };
+ // 工具条点击事件
+ table.on('tool(table)', function (obj) {
+ let data = obj.data;
+ let layEvent = obj.event;
+ console.log(data);
+ if (layEvent === 'edit') {
+ showModel(data);
+ } else if (layEvent === 'addsub') {
+ showModelSub(null,data.id);
+ } else if (layEvent === 'editsub') {
+ showModelSub(data,data.parentId);
+ } else if (layEvent === 'del') {
+ showDelete(data);
+ } else if(layEvent === 'listres'){
+ showResModel(data.id);
+ } else if(layEvent === 'addres'){
+ showAddResModelSub(data.id);
+ }
+ });
+ let showDelete = function (data) {
+ layer.confirm('确定删除吗,该功能下的子功能、资源、角色分配的该功能都将被删除?', function (i) {
+ layer.close(i);
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ admin.go('[[@{/function/delfunc}]]', {
+ funcid: data.id,
+ _csrf:token
+ }, 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});
+ }
+ table.reload('table', {});
+ },function(ret){
+ console.log(ret);
+ layer.closeAll('loading');
+ layer.msg('请求失败了,请稍后再试', {icon: 2});
+ });
+ });
+ }
+ });
+</script>
-<!-- operator表单弹窗 -->\r
-<form id="resform" lay-filter="resform" class="layui-form model-form">\r
- <input name="id" id="id" type="hidden"/>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">资源名称</label>\r
- <div class="layui-input-block">\r
- <input name="name" placeholder="请输入资源名称" type="text" class="layui-input" maxlength="60"\r
- lay-verify="required|name" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">路径</label>\r
- <div class="layui-input-block">\r
- <input name="uri" placeholder="请输入资源路径 " type="text" class="layui-input" maxlength="100"\r
- lay-verify="required" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">所属功能</label>\r
- <div class="layui-input-block">\r
- <select name="functionId" id="functionId" lay-verify="required">\r
- <option th:each="func : ${list}" th:value="${func.id}">[[${func.name}]]</option>\r
- </select>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">代码</label>\r
- <div class="layui-input-block">\r
- <input name="code" placeholder="请输入代码" type="text" class="layui-input"/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item model-form-footer">\r
- <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>\r
- <button class="layui-btn" lay-filter="resform-submit" lay-submit id="submitbtn">保存</button>\r
- </div>\r
-</form>\r
-\r
-<script>\r
- layui.use(['layer', 'admin', 'form', 'formSelects'], function () {\r
- var layer = layui.layer;\r
- var admin = layui.admin;\r
- var form = layui.form;\r
- form.render('select');\r
- form.render('radio');\r
- var url = '[[@{/function/addres}]]';\r
- // 回显user数据\r
- var func = admin.getTempData('t_res');\r
- if (func) {\r
- $('input[name="id"]').attr('readonly', 'readonly');\r
- form.val('resform', func);\r
- }\r
- let functionid = admin.getTempData("functionid");\r
- if (functionid) {\r
- form.val('resform', {"functionId": functionid});\r
- }\r
- // 表单提交事件\r
- form.on('submit(resform-submit)', function (data) {\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- debugger\r
- $.ajax({\r
- type: "POST",\r
- dataType: "json",\r
- url: url,\r
- headers: {\r
- 'Accept': 'application/json',\r
- 'Content-Type': 'application/json',\r
- 'X-CSRF-TOKEN': token,\r
- },\r
- data: JSON.stringify(data.field),\r
- success: function (result) {\r
- layer.closeAll('loading');\r
- if (result.code == 200) {\r
- layer.msg(result.msg, {icon: 1});\r
- admin.finishPopupCenter();\r
- } else if (result.code == 401) {\r
- layer.msg(result.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- } else {\r
- console.log('err:' + result.code);\r
- layer.msg(result.msg, {icon: 2});\r
- }\r
- },\r
- error: function () {\r
- layer.closeAll('loading');\r
- layer.msg("请求服务器失败!", {icon: 2});\r
- }\r
- });\r
- return false;\r
- });\r
- });\r
+<!-- operator表单弹窗 -->
+<form id="resform" lay-filter="resform" class="layui-form model-form">
+ <input name="id" id="id" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label">资源名称</label>
+ <div class="layui-input-block">
+ <input name="name" placeholder="请输入资源名称" type="text" class="layui-input" maxlength="60"
+ lay-verify="required|name" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">路径</label>
+ <div class="layui-input-block">
+ <input name="uri" placeholder="请输入资源路径 " type="text" class="layui-input" maxlength="100"
+ lay-verify="required" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">所属功能</label>
+ <div class="layui-input-block">
+ <select name="functionId" id="functionId" lay-verify="required">
+ <option th:each="func : ${list}" th:value="${func.id}">[[${func.name}]]</option>
+ </select>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">代码</label>
+ <div class="layui-input-block">
+ <input name="code" placeholder="请输入代码" type="text" class="layui-input"/>
+ </div>
+ </div>
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="resform-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ form.render('select');
+ form.render('radio');
+ var url = '[[@{/function/addres}]]';
+ // 回显user数据
+ var func = admin.getTempData('t_res');
+ if (func) {
+ $('input[name="id"]').attr('readonly', 'readonly');
+ form.val('resform', func);
+ }
+ let functionid = admin.getTempData("functionid");
+ if (functionid) {
+ form.val('resform', {"functionId": functionid});
+ }
+ // 表单提交事件
+ form.on('submit(resform-submit)', function (data) {
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ debugger
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(data.field),
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ return;
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
</script>
\ No newline at end of file
-<div style="padding:20px;">\r
- <table class="layui-table" id="restable" lay-filter="restable">\r
- </table>\r
- <input type="hidden" id="functionid" th:value="${function.id}">\r
- <input type="hidden" id="functionname" th:value="${function.name}">\r
-</div>\r
-<script>\r
- layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {\r
- let form = layui.form;\r
- let admin = layui.admin;\r
- form.render('select');\r
- let table = layui.table;\r
- let func = admin.getTempData('functionid');\r
- table.render({\r
- elem: '#restable',\r
- url: '[[@{/function/reslist}]]?functionid=' + func,\r
- cols: [\r
- [\r
- {field: 'id', title: '资源ID', width: 80, fixed: 'left', sort: true},\r
- {field: 'name', title: '资源名称', sort: true},\r
- {\r
- field: 'functionId', title: '所属功能', sort: true, align: 'center', templet: function (item) {\r
- return $("#functionname").val();\r
- }\r
- },\r
- {field: 'uri', title: '路径'},\r
- {field: 'code', sort: true, width: 80, title: '代码'},\r
- {\r
- field: 'id', align: 'center', title: '操作', templet: function (item) {\r
- return '<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'\r
- }\r
- }\r
- ]\r
- ]\r
- });\r
- // 工具条点击事件\r
- table.on('tool(restable)', function (obj) {\r
- let data = obj.data;\r
- let layEvent = obj.event;\r
- console.log(data);\r
- if (layEvent === 'edit') {\r
- showAddResModelSub(data);\r
- } else if (layEvent === 'del') {\r
- showDelete(data);\r
- }\r
- });\r
- let showAddResModelSub = function (data) {\r
- let title = '编辑资源';\r
- admin.putTempData('functionid', $("#functionid").val());\r
- admin.putTempData('t_data',data);\r
- admin.popupCenter({\r
- title: title,\r
- path: '[[@{/function/loadresadd}]]',\r
- finish: function () {\r
- table.reload('table', {});\r
- }\r
- });\r
- };\r
- let showDelete = function (data) {\r
- layer.confirm('确定删除吗?', function (i) {\r
- layer.close(i);\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- admin.go('[[@{/function/delres}]]', {\r
- resid: data.id,\r
- _csrf:token\r
- }, function (data) {\r
- console.log(data.code);\r
- layer.closeAll('loading');\r
- if (data.code == 200) {\r
- layer.msg(data.msg, {icon: 1});\r
- } else if (data.code == 401) {\r
- layer.msg(data.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- }\r
- else {\r
- layer.msg(data.msg, {icon: 2});\r
- }\r
- table.reload('restable', {});\r
- },function(ret){\r
- console.log(ret);\r
- layer.closeAll('loading');\r
- layer.msg('请求失败了,请稍后再试', {icon: 2});\r
- });\r
- });\r
- }\r
- });\r
-</script>\r
+<div style="padding:20px;">
+ <table class="layui-table" id="restable" lay-filter="restable">
+ </table>
+ <input type="hidden" id="functionid" th:value="${function.id}">
+ <input type="hidden" id="functionname" th:value="${function.name}">
+</div>
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ let form = layui.form;
+ let admin = layui.admin;
+ form.render('select');
+ let table = layui.table;
+ let func = admin.getTempData('functionid');
+ table.render({
+ elem: '#restable',
+ url: '[[@{/function/reslist}]]?functionid=' + func,
+ cols: [
+ [
+ {field: 'id', title: '资源ID', width: 80, fixed: 'left', sort: true},
+ {field: 'name', title: '资源名称', sort: true},
+ {
+ field: 'functionId', title: '所属功能', sort: true, align: 'center', templet: function (item) {
+ return $("#functionname").val();
+ }
+ },
+ {field: 'uri', title: '路径'},
+ {field: 'code', sort: true, width: 80, title: '代码'},
+ {
+ field: 'id', align: 'center', title: '操作', templet: function (item) {
+ return '<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
+ }
+ }
+ ]
+ ]
+ });
+ // 工具条点击事件
+ table.on('tool(restable)', function (obj) {
+ let data = obj.data;
+ let layEvent = obj.event;
+ console.log(data);
+ if (layEvent === 'edit') {
+ showAddResModelSub(data);
+ } else if (layEvent === 'del') {
+ showDelete(data);
+ }
+ });
+ let showAddResModelSub = function (data) {
+ let title = '编辑资源';
+ admin.putTempData('functionid', $("#functionid").val());
+ admin.putTempData('t_data',data);
+ admin.popupCenter({
+ title: title,
+ path: '[[@{/function/loadresadd}]]',
+ finish: function () {
+ table.reload('table', {});
+ }
+ });
+ };
+ let showDelete = function (data) {
+ layer.confirm('确定删除吗?', function (i) {
+ layer.close(i);
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ admin.go('[[@{/function/delres}]]', {
+ resid: data.id,
+ _csrf:token
+ }, 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});
+ }
+ table.reload('restable', {});
+ },function(ret){
+ console.log(ret);
+ layer.closeAll('loading');
+ layer.msg('请求失败了,请稍后再试', {icon: 2});
+ });
+ });
+ }
+ });
+</script>
-<!-- operator表单弹窗 -->\r
-<form id="form" lay-filter="subform" class="layui-form model-form">\r
- <input name="id" id="id" type="hidden"/>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">功能名称</label>\r
- <div class="layui-input-block">\r
- <input name="name" placeholder="请输入功能名称" type="text" class="layui-input" maxlength="20"\r
- lay-verify="required|name" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">路径</label>\r
- <div class="layui-input-block">\r
- <input name="menuUrl" placeholder="请输入路径,父节点默认为 # " type="text" class="layui-input" maxlength="60" lay-verify="required" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">父功能</label>\r
- <div class="layui-input-block">\r
- <select name="parentId" id="parentId" lay-verify="required">\r
- <option th:each="func : ${list}" th:value="${func.id}">[[${func.name}]]</option>\r
- </select>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">节点</label>\r
- <div class="layui-input-block">\r
- <input type="radio" name="isLeaf" value="1" title="子" checked/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">序号</label>\r
- <div class="layui-input-block">\r
- <input name="orderNum" placeholder="请输入序号" type="text" class="layui-input" />\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">图标</label>\r
- <div class="layui-input-block">\r
- <input name="menuIcon" placeholder="请输入图标 例:layui-icon-xx " type="text" class="layui-input" />\r
- </div>\r
- </div>\r
-\r
- <div class="layui-form-item model-form-footer">\r
- <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>\r
- <button class="layui-btn" lay-filter="subform-submit" lay-submit id="submitbtn">保存</button>\r
- </div>\r
-</form>\r
-\r
-<script>\r
- layui.use(['layer', 'admin', 'form', 'formSelects'], function () {\r
- var layer = layui.layer;\r
- var admin = layui.admin;\r
- var form = layui.form;\r
- form.render('select');\r
- form.render('radio');\r
- var url = '[[@{/function/add}]]';\r
- // 回显user数据\r
- var func = admin.getTempData('t_func');\r
- if (func) {\r
- $('input[name="id"]').attr('readonly', 'readonly');\r
- form.val('subform', func);\r
- }\r
- let parentId = admin.getTempData("parentId");\r
- if(parentId){\r
- form.val('subform', {"parentId":parentId});\r
- }\r
- // 表单提交事件\r
- form.on('submit(subform-submit)', function (data) {\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- debugger\r
- $.ajax({\r
- type : "POST",\r
- dataType : "json",\r
- url : url,\r
- headers: {\r
- 'Accept': 'application/json',\r
- 'Content-Type': 'application/json',\r
- 'X-CSRF-TOKEN':token,\r
- },\r
- data : JSON.stringify(data.field),\r
- success : function(result) {\r
- layer.closeAll('loading');\r
- if (result.code == 200) {\r
- layer.msg(result.msg, {icon: 1});\r
- admin.finishPopupCenter();\r
- } else if (result.code == 401) {\r
- layer.msg(result.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- } else {\r
- console.log('err:' + result.code);\r
- layer.msg(result.msg, {icon: 2});\r
- }\r
- },\r
- error : function() {\r
- layer.closeAll('loading');\r
- layer.msg("请求服务器失败!", {icon: 2});\r
- }\r
- });\r
- return false;\r
- });\r
- });\r
+<!-- operator表单弹窗 -->
+<form id="form" lay-filter="subform" class="layui-form model-form">
+ <input name="id" id="id" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label">功能名称</label>
+ <div class="layui-input-block">
+ <input name="name" placeholder="请输入功能名称" type="text" class="layui-input" maxlength="20"
+ lay-verify="required|name" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">路径</label>
+ <div class="layui-input-block">
+ <input name="menuUrl" placeholder="请输入路径,父节点默认为 # " type="text" class="layui-input" maxlength="60" lay-verify="required" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">父功能</label>
+ <div class="layui-input-block">
+ <select name="parentId" id="parentId" lay-verify="required">
+ <option th:each="func : ${list}" th:value="${func.id}">[[${func.name}]]</option>
+ </select>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">节点</label>
+ <div class="layui-input-block">
+ <input type="radio" name="isLeaf" value="1" title="子" checked/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">序号</label>
+ <div class="layui-input-block">
+ <input name="orderNum" placeholder="请输入序号" type="text" class="layui-input" />
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">图标</label>
+ <div class="layui-input-block">
+ <input name="menuIcon" placeholder="请输入图标 例:layui-icon-xx " type="text" class="layui-input" />
+ </div>
+ </div>
+
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="subform-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ form.render('select');
+ form.render('radio');
+ var url = '[[@{/function/add}]]';
+ // 回显user数据
+ var func = admin.getTempData('t_func');
+ if (func) {
+ $('input[name="id"]').attr('readonly', 'readonly');
+ form.val('subform', func);
+ }
+ let parentId = admin.getTempData("parentId");
+ if(parentId){
+ form.val('subform', {"parentId":parentId});
+ }
+ // 表单提交事件
+ form.on('submit(subform-submit)', function (data) {
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ debugger
+ $.ajax({
+ type : "POST",
+ dataType : "json",
+ url : url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN':token,
+ },
+ data : JSON.stringify(data.field),
+ success : function(result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ return;
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error : function() {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
</script>
\ No newline at end of file
-<!-- operator表单弹窗 -->\r
-<form id="form" lay-filter="form" class="layui-form model-form">\r
- <input name="roleId" id="roleId" type="hidden"/>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">角色名称</label>\r
- <div class="layui-input-block">\r
- <input name="roleName" placeholder="请输入角色名称" type="text" class="layui-input" maxlength="20"\r
- lay-verify="required|roleName" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">角色描述</label>\r
- <div class="layui-input-block">\r
- <textarea name="roleDesc" placeholder="请输入描述" class="layui-textarea"></textarea>\r
- </div>\r
- </div>\r
-\r
- <div class="layui-form-item model-form-footer">\r
- <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>\r
- <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">保存</button>\r
- </div>\r
-</form>\r
-\r
-<script>\r
- layui.use(['layer', 'admin', 'form', 'formSelects'], function () {\r
- var layer = layui.layer;\r
- var admin = layui.admin;\r
- var form = layui.form;\r
- var url = '[[@{/role/add}]]';\r
- // 回显user数据\r
- var func = admin.getTempData('t_func');\r
- if (func) {\r
- $('input[name="roleId"]').attr('readonly', 'readonly');\r
- form.val('form', func);\r
- }\r
- // 表单提交事件\r
- form.on('submit(form-submit)', function (data) {\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- $.ajax({\r
- type : "POST",\r
- dataType : "json",\r
- url : url,\r
- headers: {\r
- 'Accept': 'application/json',\r
- 'Content-Type': 'application/json',\r
- 'X-CSRF-TOKEN':token,\r
- },\r
- data : JSON.stringify(data.field),\r
- success : function(result) {\r
- layer.closeAll('loading');\r
- if (result.code == 200) {\r
- layer.msg(result.msg, {icon: 1});\r
- admin.finishPopupCenter();\r
- } else if (result.code == 401) {\r
- layer.msg(result.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- } else {\r
- console.log('err:' + result.code);\r
- layer.msg(result.msg, {icon: 2});\r
- }\r
- },\r
- error : function() {\r
- layer.closeAll('loading');\r
- layer.msg("请求服务器失败!", {icon: 2});\r
- }\r
- });\r
- return false;\r
- });\r
- });\r
+<!-- operator表单弹窗 -->
+<form id="form" lay-filter="form" class="layui-form model-form">
+ <input name="roleId" id="roleId" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label">角色名称</label>
+ <div class="layui-input-block">
+ <input name="roleName" placeholder="请输入角色名称" type="text" class="layui-input" maxlength="20"
+ lay-verify="required|roleName" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">角色描述</label>
+ <div class="layui-input-block">
+ <textarea name="roleDesc" placeholder="请输入描述" class="layui-textarea"></textarea>
+ </div>
+ </div>
+
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ var url = '[[@{/role/add}]]';
+ // 回显user数据
+ var func = admin.getTempData('t_func');
+ if (func) {
+ $('input[name="roleId"]').attr('readonly', 'readonly');
+ form.val('form', func);
+ }
+ // 表单提交事件
+ form.on('submit(form-submit)', function (data) {
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ $.ajax({
+ type : "POST",
+ dataType : "json",
+ url : url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN':token,
+ },
+ data : JSON.stringify(data.field),
+ success : function(result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ return;
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error : function() {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
</script>
\ No newline at end of file
-<div style="padding: 0 20px">\r
- <div class="layui-form-item" style="max-height: 490px;overflow: auto;">\r
- <ul id="funclist" class="ztree"></ul>\r
- </div>\r
- <div class="layui-form-item model-form-footer">\r
- <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>\r
- <button class="layui-btn" lay-filter="form-submit" id="submitbtn">保存</button>\r
- </div>\r
-</div>\r
-<script>\r
- layui.use(['layer', 'admin', 'form', 'formSelects'], function () {\r
- var layer = layui.layer;\r
- var admin = layui.admin;\r
- var form = layui.form;\r
- var func = admin.getTempData('roleId');\r
- let initTree = function (nodes) {\r
- let menuSetting = {\r
- view: {\r
- dblClickExpand: true,\r
- showLine: true,\r
- showIcon: false\r
- },\r
- check: {\r
- enable: true,\r
- },\r
- data: {\r
- simpleData: {\r
- enable: true\r
- }\r
- }\r
- };\r
- $.fn.zTree.init($("#funclist"), menuSetting, nodes);\r
- }\r
- admin.dgo('[[@{/role/func}]]', {\r
- roleId: func,\r
- }, function (data) {\r
- layer.closeAll('loading');\r
- if (data.code == 200) {\r
- initTree(data.node);\r
- } else if (data.code == 401) {\r
- layer.msg(data.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- } else {\r
- layer.msg(data.msg, {icon: 2});\r
- }\r
- }, function (ret) {\r
- layer.closeAll('loading');\r
- layer.msg('请求失败了,请稍后再试', {icon: 2});\r
- });\r
- $("#submitbtn").on('click', function (e) {\r
- let ids = [];\r
- let treeObj = $.fn.zTree.getZTreeObj("funclist");\r
- let nodes = treeObj.getCheckedNodes(true);\r
- for (let i = 0; i < nodes.length; i++) {\r
-\r
- ids.push(nodes[i].id);//存功能ID\r
- }\r
- if (ids.length < 1) {\r
- return;\r
- }\r
- let idStr = ids.toString();\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- admin.go('[[@{/role/addfunc}]]', {\r
- roleId: func,\r
- funcs: idStr,\r
- _csrf: token,\r
- }, function (data) {\r
- layer.closeAll('loading');\r
- if (data.code == 200) {\r
- layer.msg(data.msg, {icon: 1});\r
- admin.finishPopupCenter();\r
- } else if (data.code == 401) {\r
- layer.msg(data.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- } else {\r
- layer.msg(data.msg, {icon: 2});\r
- }\r
- }, function (ret) {\r
- console.log(ret);\r
- layer.closeAll('loading');\r
- layer.msg('请求失败了,请稍后再试', {icon: 2});\r
- });\r
- })\r
- });\r
+<div style="padding: 0 20px">
+ <div class="layui-form-item" style="max-height: 490px;overflow: auto;">
+ <ul id="funclist" class="ztree"></ul>
+ </div>
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="form-submit" id="submitbtn">保存</button>
+ </div>
+</div>
+<script>
+ layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ var func = admin.getTempData('roleId');
+ let initTree = function (nodes) {
+ let menuSetting = {
+ view: {
+ dblClickExpand: true,
+ showLine: true,
+ showIcon: false
+ },
+ check: {
+ enable: true,
+ },
+ data: {
+ simpleData: {
+ enable: true
+ }
+ }
+ };
+ $.fn.zTree.init($("#funclist"), menuSetting, nodes);
+ }
+ admin.dgo('[[@{/role/func}]]', {
+ roleId: func,
+ }, function (data) {
+ layer.closeAll('loading');
+ if (data.code == 200) {
+ initTree(data.node);
+ } 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});
+ }
+ }, function (ret) {
+ layer.closeAll('loading');
+ layer.msg('请求失败了,请稍后再试', {icon: 2});
+ });
+ $("#submitbtn").on('click', function (e) {
+ let ids = [];
+ let treeObj = $.fn.zTree.getZTreeObj("funclist");
+ let nodes = treeObj.getCheckedNodes(true);
+ for (let i = 0; i < nodes.length; i++) {
+
+ ids.push(nodes[i].id);//存功能ID
+ }
+ if (ids.length < 1) {
+ return;
+ }
+ let idStr = ids.toString();
+ let token = $("meta[name='_csrf_token']").attr("value");
+ admin.go('[[@{/role/addfunc}]]', {
+ roleId: func,
+ funcs: idStr,
+ _csrf: token,
+ }, function (data) {
+ layer.closeAll('loading');
+ if (data.code == 200) {
+ layer.msg(data.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } 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});
+ }
+ }, function (ret) {
+ console.log(ret);
+ layer.closeAll('loading');
+ layer.msg('请求失败了,请稍后再试', {icon: 2});
+ });
+ })
+ });
</script>
\ No newline at end of file
-<!-- operator表单弹窗 -->\r
-<form id="user-form" lay-filter="user-form" class="layui-form model-form">\r
- <input name="userid" id="userid" type="hidden"/>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">姓名*</label>\r
- <div class="layui-input-block">\r
- <input name="name" placeholder="请输入名称" type="text" class="layui-input" maxlength="100"\r
- lay-verify="required" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">性别</label>\r
- <div class="layui-input-block">\r
- <input type="radio" name="sex" value="male" title="男" checked/>\r
- <input type="radio" name="sex" value="female" title="女"/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">证件类型*</label>\r
- <div class="layui-input-block">\r
- <select name="idtype" id="idtype" lay-verify="required">\r
- <option th:each="bean : ${idtypeList}" th:value="${bean.dictval}">[[${bean.dictcaption}]]</option>\r
- </select>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">证件号*</label>\r
- <div class="layui-input-block">\r
- <input name="idno" placeholder="请输入证件号" type="text" class="layui-input" maxlength="100"\r
- lay-verify="required" required/>\r
- </div>\r
- </div>\r
-\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">手机号*</label>\r
- <div class="layui-input-block">\r
- <input name="mobile" placeholder="请输入手机号" type="text" class="layui-input" maxlength="11"\r
- lay-verify="required" required/>\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">邮箱</label>\r
- <div class="layui-input-block">\r
- <input name="email" placeholder="请输入邮箱" type="text" class="layui-input" maxlength="100" />\r
- </div>\r
- </div>\r
- <div class="layui-form-item">\r
- <label class="layui-form-label">地址</label>\r
- <div class="layui-input-block">\r
- <input name="addr" placeholder="请输入地址" type="text" class="layui-input" maxlength="300" />\r
- </div>\r
- </div>\r
-\r
- <div class="layui-form-item model-form-footer">\r
- <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>\r
- <button class="layui-btn" lay-filter="user-form-submit" lay-submit id="submitbtn">保存</button>\r
- </div>\r
-</form>\r
-\r
-<script>\r
- layui.use(['layer', 'admin', 'form', 'formSelects'], function () {\r
- var layer = layui.layer;\r
- var admin = layui.admin;\r
- var form = layui.form;\r
- var url = '[[@{/user/add}]]';\r
- form.render('radio');\r
- form.render('select');\r
- // 回显user数据\r
- var bean = admin.getTempData('t_bean');\r
- if (bean) {\r
- form.val('user-form', bean);\r
- }\r
- // 表单提交事件\r
- form.on('submit(user-form-submit)', function (data) {\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- $.ajax({\r
- type : "POST",\r
- dataType : "json",\r
- url : url,\r
- headers: {\r
- 'Accept': 'application/json',\r
- 'Content-Type': 'application/json',\r
- 'X-CSRF-TOKEN':token,\r
- },\r
- data : JSON.stringify(data.field),\r
- success : function(result) {\r
- layer.closeAll('loading');\r
- if (result.code == 200) {\r
- layer.msg(result.msg, {icon: 1});\r
- admin.finishPopupCenter();\r
- } else if (result.code == 401) {\r
- layer.msg(result.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- } else {\r
- console.log('err:' + result.code);\r
- layer.msg(result.msg, {icon: 2});\r
- }\r
- },\r
- error : function() {\r
- layer.closeAll('loading');\r
- layer.msg("请求服务器失败!", {icon: 2});\r
- }\r
- });\r
- return false;\r
- });\r
- });\r
+<!-- operator表单弹窗 -->
+<form id="user-form" lay-filter="user-form" class="layui-form model-form">
+ <input name="userid" id="userid" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label">姓名*</label>
+ <div class="layui-input-block">
+ <input name="name" placeholder="请输入名称" type="text" class="layui-input" maxlength="100"
+ lay-verify="required" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">性别</label>
+ <div class="layui-input-block">
+ <input type="radio" name="sex" value="male" title="男" checked/>
+ <input type="radio" name="sex" value="female" title="女"/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">证件类型*</label>
+ <div class="layui-input-block">
+ <select name="idtype" id="idtype" lay-verify="required">
+ <option th:each="bean : ${idtypeList}" th:value="${bean.dictval}">[[${bean.dictcaption}]]</option>
+ </select>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">证件号*</label>
+ <div class="layui-input-block">
+ <input name="idno" placeholder="请输入证件号" type="text" class="layui-input" maxlength="100"
+ lay-verify="required" required/>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">手机号*</label>
+ <div class="layui-input-block">
+ <input name="mobile" placeholder="请输入手机号" type="text" class="layui-input" maxlength="11"
+ lay-verify="required" required/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">邮箱</label>
+ <div class="layui-input-block">
+ <input name="email" placeholder="请输入邮箱" type="text" class="layui-input" maxlength="100" />
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">地址</label>
+ <div class="layui-input-block">
+ <input name="addr" placeholder="请输入地址" type="text" class="layui-input" maxlength="300" />
+ </div>
+ </div>
+
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="user-form-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ var url = '[[@{/user/add}]]';
+ form.render('radio');
+ form.render('select');
+ // 回显user数据
+ var bean = admin.getTempData('t_bean');
+ if (bean) {
+ form.val('user-form', bean);
+ }
+ // 表单提交事件
+ form.on('submit(user-form-submit)', function (data) {
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ $.ajax({
+ type : "POST",
+ dataType : "json",
+ url : url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN':token,
+ },
+ data : JSON.stringify(data.field),
+ success : function(result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ return;
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error : function() {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
</script>
\ No newline at end of file
-<div style="padding:20px;">\r
- <table class="layui-table" id="userbindtable" lay-filter="userbindtable">\r
- </table>\r
- <input type="hidden" id="userid" th:value="${userid}">\r
-</div>\r
-<script>\r
- layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {\r
- let form = layui.form;\r
- let admin = layui.admin;\r
- form.render('select');\r
- let table = layui.table;\r
- let userid = admin.getTempData('userid');\r
- table.render({\r
- elem: '#userbindtable',\r
- url: '[[@{/user/bind}]]?userid=' + userid,\r
- cols: [\r
- [\r
- {field: 'id', title: '资源ID', width: 80, fixed: 'left', sort: true},\r
- {field: 'name', title: '资源名称', sort: true},\r
- {\r
- field: 'functionId', title: '所属功能', sort: true, align: 'center', templet: function (item) {\r
- return $("#functionname").val();\r
- }\r
- },\r
- {field: 'uri', title: '路径'},\r
- {field: 'code', sort: true, width: 80, title: '代码'},\r
- {\r
- field: 'id', align: 'center', title: '操作', templet: function (item) {\r
- return '<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'\r
- }\r
- }\r
- ]\r
- ]\r
- });\r
- // 工具条点击事件\r
- table.on('tool(userbindtable)', function (obj) {\r
- let data = obj.data;\r
- let layEvent = obj.event;\r
- console.log(data);\r
- if (layEvent === 'del') {\r
- showDelete(data);\r
- }\r
- });\r
-\r
- let showDelete = function (data) {\r
- layer.confirm('确定删除吗?', function (i) {\r
- layer.close(i);\r
- layer.load(2);\r
- let token = $("meta[name='_csrf_token']").attr("value");\r
- admin.go('[[@{/user/delbind}]]', {\r
- resid: data.id,\r
- _csrf:token\r
- }, function (data) {\r
- console.log(data.code);\r
- layer.closeAll('loading');\r
- if (data.code == 200) {\r
- layer.msg(data.msg, {icon: 1});\r
- } else if (data.code == 401) {\r
- layer.msg(data.msg, {icon: 2, time: 1500}, function () {\r
- location.replace('[[@{/login}]]');\r
- }, 1000);\r
- return;\r
- }\r
- else {\r
- layer.msg(data.msg, {icon: 2});\r
- }\r
- table.reload('restable', {});\r
- },function(ret){\r
- console.log(ret);\r
- layer.closeAll('loading');\r
- layer.msg('请求失败了,请稍后再试', {icon: 2});\r
- });\r
- });\r
- }\r
- });\r
-</script>\r
+<div style="padding:20px;">
+ <table class="layui-table" id="userbindtable" lay-filter="userbindtable">
+ </table>
+ <input type="hidden" id="userid" th:value="${userid}">
+</div>
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ let form = layui.form;
+ let admin = layui.admin;
+ form.render('select');
+ let table = layui.table;
+ let userid = admin.getTempData('userid');
+ table.render({
+ elem: '#userbindtable',
+ url: '[[@{/user/bind}]]?userid=' + userid,
+ cols: [
+ [
+ {field: 'id', title: '资源ID', width: 80, fixed: 'left', sort: true},
+ {field: 'name', title: '资源名称', sort: true},
+ {
+ field: 'functionId', title: '所属功能', sort: true, align: 'center', templet: function (item) {
+ return $("#functionname").val();
+ }
+ },
+ {field: 'uri', title: '路径'},
+ {field: 'code', sort: true, width: 80, title: '代码'},
+ {
+ field: 'id', align: 'center', title: '操作', templet: function (item) {
+ return '<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
+ }
+ }
+ ]
+ ]
+ });
+ // 工具条点击事件
+ table.on('tool(userbindtable)', function (obj) {
+ let data = obj.data;
+ let layEvent = obj.event;
+ console.log(data);
+ if (layEvent === 'del') {
+ showDelete(data);
+ }
+ });
+
+ let showDelete = function (data) {
+ layer.confirm('确定删除吗?', function (i) {
+ layer.close(i);
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ admin.go('[[@{/user/delbind}]]', {
+ resid: data.id,
+ _csrf:token
+ }, 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});
+ }
+ table.reload('restable', {});
+ },function(ret){
+ console.log(ret);
+ layer.closeAll('loading');
+ layer.msg('请求失败了,请稍后再试', {icon: 2});
+ });
+ });
+ }
+ });
+</script>
rootProject.name = 'payapi'
-include 'payapi-sdk', 'common'
+include 'payapi', 'payapi-sdk', 'common'