15个文件已修改
761个文件已删除
79个文件已添加
127 文件已重命名
| | |
| | | <modules> |
| | | <module>zy-asrs-common</module> |
| | | <module>zy-asrs-framework</module> |
| | | <module>zy-asrs-wcs</module> |
| | | <module>zy-asrs-wms</module> |
| | | <module>zy-asrs-openapi</module> |
| | | </modules> |
| | |
| | | package com.zy.asrs.wcs.system.controller; |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wcs.common.annotation.OperationLog; |
| | | import com.zy.asrs.wcs.common.domain.BaseParam; |
| | | import com.zy.asrs.wcs.common.domain.KeyValVo; |
| | | import com.zy.asrs.wcs.common.domain.PageParam; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import @{COMPANYNAME}.entity.@{ENTITYNAME}; |
| | | import @{COMPANYNAME}.service.@{ENTITYNAME}Service; |
| | | import com.zy.asrs.wcs.utils.ExcelUtil; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | |
| | | import lombok.Data; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wcs.system.service.UserService; |
| | | import com.zy.asrs.wcs.system.service.HostService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-web</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.microsoft.sqlserver</groupId> |
| | | <artifactId>mssql-jdbc</artifactId> |
| | | <version>8.2.2.jre8</version> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-security</artifactId> |
| | | </dependency> |
| | | <!-- mybatis-plus --> |
| | | |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-boot-starter</artifactId> |
| | | <version>3.4.1</version> |
| | | <groupId>io.jsonwebtoken</groupId> |
| | | <artifactId>jjwt-impl</artifactId> |
| | | <version>0.11.2</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-generator</artifactId> |
| | | <version>3.4.1</version> |
| | | <groupId>io.jsonwebtoken</groupId> |
| | | <artifactId>jjwt-jackson</artifactId> |
| | | <version>0.11.2</version> |
| | | </dependency> |
| | | |
| | | <!-- okHttp3 --> |
| | | <dependency> |
| | | <groupId>com.squareup.okhttp3</groupId> |
| | | <artifactId>okhttp</artifactId> |
| | | <version>3.10.0</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.springframework</groupId> |
| | | <artifactId>spring-aspects</artifactId> |
| | | <version>5.2.5.RELEASE</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | |
| | | package com.zy.asrs.wms; |
| | | |
| | | import com.zy.asrs.common.utils.RandomValidateCodeUtil; |
| | | import org.mybatis.spring.annotation.MapperScan; |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.boot.autoconfigure.SpringBootApplication; |
| | | import org.springframework.scheduling.annotation.EnableScheduling; |
| | | |
| | | @MapperScan("com.zy.**.mapper") |
| | | @MapperScan("com.zy.asrs.wms.**.mapper") |
| | | @EnableScheduling |
| | | @SpringBootApplication |
| | | public class WmsBoot { |
| | | |
| | | public static void main(String[] args) { |
| | | RandomValidateCodeUtil.init(); |
| | | SpringApplication.run(WmsBoot.class, args); |
| | | } |
| | | |
| New file |
| | |
| | | package com.zy.asrs.wms.common.annotation; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * æä½æ¥å¿è®°å½æ³¨è§£ |
| | | * |
| | | * @author vincent |
| | | * @since 2020-03-21 17:03:08 |
| | | */ |
| | | @Documented |
| | | @Target({ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface OperationLog { |
| | | |
| | | /** |
| | | * æä½åè½ |
| | | */ |
| | | String value() default ""; |
| | | |
| | | /** |
| | | * æä½æ¨¡å |
| | | */ |
| | | String module() default ""; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | String comments() default ""; |
| | | |
| | | /** |
| | | * æ¯å¦è®°å½è¯·æ±åæ° |
| | | */ |
| | | boolean param() default true; |
| | | |
| | | /** |
| | | * æ¯å¦è®°å½è¿åç»æ |
| | | */ |
| | | boolean result() default true; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.aspect; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.asrs.common.utils.IpTools; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.system.entity.OperationRecord; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import com.zy.asrs.wms.system.service.OperationRecordService; |
| | | import com.zy.asrs.wms.utils.Utils; |
| | | import org.aspectj.lang.JoinPoint; |
| | | import org.aspectj.lang.annotation.*; |
| | | import org.aspectj.lang.reflect.MethodSignature; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.lang.reflect.Method; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æä½æ¥å¿è®°å½ |
| | | * |
| | | * @author vincent |
| | | * @since 2020-03-21 16:58:16:05 |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | public class OperationLogAspect { |
| | | |
| | | @Resource |
| | | private OperationRecordService operationRecordService; |
| | | // åæ°ãè¿åç»æãé误信æ¯çæå¤§ä¿åé¿åº¦ |
| | | private static final int MAX_LENGTH = 1000; |
| | | // ç¨äºè®°å½è¯·æ±èæ¶ |
| | | private final ThreadLocal<Long> startTime = new ThreadLocal<>(); |
| | | |
| | | @Pointcut("@annotation(com.zy.asrs.wms.common.annotation.OperationLog)") |
| | | public void operationLog() { |
| | | } |
| | | |
| | | @Before("operationLog()") |
| | | public void doBefore(JoinPoint joinPoint) throws Throwable { |
| | | startTime.set(System.currentTimeMillis()); |
| | | } |
| | | |
| | | @AfterReturning(pointcut = "operationLog()", returning = "result") |
| | | public void doAfterReturning(JoinPoint joinPoint, Object result) { |
| | | saveLog(joinPoint, result, null); |
| | | } |
| | | |
| | | @AfterThrowing(value = "operationLog()", throwing = "e") |
| | | public void doAfterThrowing(JoinPoint joinPoint, Exception e) { |
| | | saveLog(joinPoint, null, e); |
| | | } |
| | | |
| | | /** |
| | | * ä¿åæä½è®°å½ |
| | | */ |
| | | private void saveLog(JoinPoint joinPoint, Object result, Exception e) { |
| | | // è®°å½æ¨¡ååãæä½åè½ãè¯·æ±æ¹æ³ã请æ±åæ°ãè¿åç»æ |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | if (null == method) { |
| | | return; |
| | | } |
| | | OperationLog ol = method.getAnnotation(OperationLog.class); |
| | | if (null == ol) { |
| | | return; |
| | | } |
| | | String desc = getDescription(method, ol); |
| | | if (Cools.isEmpty(desc)) { |
| | | return; |
| | | } |
| | | OperationRecord record = new OperationRecord(); |
| | | Long endTime = startTime.get(); |
| | | record.setCreateTime(new Date()); |
| | | // è®°å½æä½èæ¶ |
| | | if (endTime != null) { |
| | | record.setSpendTime((int) (System.currentTimeMillis() - endTime)); |
| | | } |
| | | record.setTimestamp(String.valueOf(endTime)); |
| | | // è®°å½å½åç»å½ç¨æ·idãç§æ·id |
| | | User user = getLoginUser(); |
| | | if (user != null) { |
| | | record.setUserId(user.getId()); |
| | | record.setHostId(user.getHostId()); |
| | | } |
| | | // è®°å½è¯·æ±å°åãè¯·æ±æ¹å¼ãip |
| | | ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
| | | HttpServletRequest request = (attributes == null ? null : attributes.getRequest()); |
| | | if (request != null) { |
| | | record.setUrl(request.getRequestURI()); |
| | | record.setClientIp(IpTools.gainRealIp(request)); |
| | | } |
| | | // è®°å½å¼å¸¸ä¿¡æ¯ |
| | | if (e != null) { |
| | | record.setResult(0); |
| | | record.setErr(Utils.sub(e.toString(), MAX_LENGTH)); |
| | | } else { |
| | | record.setResult(1); |
| | | } |
| | | // è®°å½æä½åè½ |
| | | record.setNamespace(desc); |
| | | // è®°å½å¤æ³¨ |
| | | if (!Cools.isEmpty(ol.comments())) { |
| | | record.setMemo(ol.comments()); |
| | | } |
| | | // è®°å½è¯·æ±åæ° |
| | | if (ol.param() && request != null) { |
| | | record.setRequest(Utils.sub(getParams(joinPoint, request), MAX_LENGTH)); |
| | | } |
| | | // è®°å½è¯·æ±ç»æ |
| | | if (ol.result() && result != null) { |
| | | record.setResponse(Utils.sub(JSON.toJSONString(result), MAX_LENGTH)); |
| | | } |
| | | operationRecordService.saveAsync(record); |
| | | } |
| | | |
| | | /** |
| | | * è·åå½åç»å½ç¨æ· |
| | | */ |
| | | private User getLoginUser() { |
| | | Authentication subject = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (subject != null) { |
| | | Object object = subject.getPrincipal(); |
| | | if (object instanceof User) { |
| | | return (User) object; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±åæ° |
| | | * |
| | | * @param joinPoint JoinPoint |
| | | * @param request HttpServletRequest |
| | | * @return String |
| | | */ |
| | | private String getParams(JoinPoint joinPoint, HttpServletRequest request) { |
| | | String params; |
| | | |
| | | Map<String, String> paramsMap = new HashMap<>(); |
| | | |
| | | Map<String, String[]> map = Collections.unmodifiableMap(request.getParameterMap()); |
| | | for (Map.Entry<String, String[]> entry : map.entrySet()) { |
| | | paramsMap.put(entry.getKey(), Utils.join(entry.getValue(), ",")); |
| | | } |
| | | |
| | | if (paramsMap.keySet().size() > 0) { |
| | | params = JSON.toJSONString(paramsMap); |
| | | } else { |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (Object arg : joinPoint.getArgs()) { |
| | | if (null == arg |
| | | || arg instanceof MultipartFile |
| | | || arg instanceof HttpServletRequest |
| | | || arg instanceof HttpServletResponse) { |
| | | continue; |
| | | } |
| | | sb.append(JSON.toJSONString(arg)).append(" "); |
| | | } |
| | | params = sb.toString(); |
| | | } |
| | | return params; |
| | | } |
| | | |
| | | /** |
| | | * è·åæä½åè½ |
| | | * |
| | | * @param method Method |
| | | * @param ol OperationLog |
| | | * @return String |
| | | */ |
| | | private String getDescription(Method method, OperationLog ol) { |
| | | if (!Cools.isEmpty(ol.value())) { |
| | | return ol.value(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.config; |
| | | |
| | | import org.springframework.context.annotation.ComponentScan; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * Created by vincent on 12/19/2023 |
| | | */ |
| | | @Configuration |
| | | @ComponentScan(value = "com.zy.asrs.common.config") |
| | | public class BeanConfig { |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.config; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * ç³»ç»é
ç½®å±æ§ |
| | | * |
| | | * @author vincent |
| | | * @since 2021-08-30 17:58:16 |
| | | */ |
| | | @Data |
| | | @Configuration |
| | | @ConfigurationProperties(prefix = "config") |
| | | public class ConfigProperties { |
| | | |
| | | /** |
| | | * tokenè¿ææ¶é´, åä½ç§ |
| | | */ |
| | | private Long tokenExpireTime = 60 * 60 * 24L; |
| | | |
| | | /** |
| | | * tokenå¿«è¦è¿æèªå¨å·æ°æ¶é´, åä½åé |
| | | */ |
| | | private int tokenRefreshTime = 30; |
| | | |
| | | /** |
| | | * çætokençå¯é¥Keyçbase64å符 |
| | | */ |
| | | private String tokenKey; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.config; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import net.sf.jsqlparser.expression.Expression; |
| | | import net.sf.jsqlparser.expression.LongValue; |
| | | import net.sf.jsqlparser.expression.NullValue; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * MybatisPlusé
ç½® |
| | | * |
| | | * @author vincent |
| | | * @since 2018-02-22 11:29:28 |
| | | */ |
| | | @Configuration |
| | | public class MybatisPlusConfig { |
| | | |
| | | @Bean |
| | | public MybatisPlusInterceptor mybatisPlusInterceptor() { |
| | | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
| | | |
| | | TenantLineHandler tenantLineHandler = new TenantLineHandler() { |
| | | |
| | | @Override |
| | | public Expression getTenantId() { |
| | | return getLoginUserTenantId(); |
| | | } |
| | | |
| | | @Override |
| | | public String getTenantIdColumn() { |
| | | return "host_id"; |
| | | } |
| | | |
| | | @Override |
| | | public boolean ignoreTable(String tableName) { |
| | | return Arrays.asList( |
| | | "sys_host", |
| | | "sys_user_role", |
| | | "sys_role_menu" |
| | | ).contains(tableName); |
| | | } |
| | | |
| | | }; |
| | | TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(tenantLineHandler); |
| | | interceptor.addInnerInterceptor(tenantLineInnerInterceptor); |
| | | |
| | | PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); |
| | | interceptor.addInnerInterceptor(paginationInnerInterceptor); |
| | | |
| | | return interceptor; |
| | | } |
| | | |
| | | /** |
| | | * è·åå½åç»å½ç¨æ·çç§æ·id |
| | | * |
| | | * @return Integer |
| | | */ |
| | | public Expression getLoginUserTenantId() { |
| | | try { |
| | | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (authentication != null) { |
| | | Object object = authentication.getPrincipal(); |
| | | if (object instanceof User) { |
| | | return new LongValue(((User) object).getHostId()); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | System.out.println(e.getMessage()); |
| | | } |
| | | return new NullValue(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.config; |
| | | |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | import com.zy.asrs.wms.utils.Utils; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.servlet.AsyncHandlerInterceptor; |
| | | import org.springframework.web.servlet.config.annotation.CorsRegistry; |
| | | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; |
| | | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * Created by vincent on 2019-06-13 |
| | | */ |
| | | @Configuration |
| | | public class WebConfig implements WebMvcConfigurer { |
| | | |
| | | @Override |
| | | public void addInterceptors(InterceptorRegistry registry) { |
| | | registry.addInterceptor(getAsyncHandlerInterceptor()) |
| | | .addPathPatterns("/**") |
| | | ; |
| | | } |
| | | |
| | | @Bean |
| | | public AsyncHandlerInterceptor getAsyncHandlerInterceptor() { |
| | | return new AsyncHandlerInterceptor(){ |
| | | @Override |
| | | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { |
| | | Utils.cors(response); |
| | | return true; |
| | | } |
| | | }; |
| | | } |
| | | |
| | | @Override |
| | | public void addCorsMappings(CorsRegistry registry) { |
| | | registry.addMapping("/**") |
| | | .allowedOriginPatterns("*") |
| | | .allowedHeaders("*") |
| | | .exposedHeaders(Constants.TOKEN_HEADER_NAME) |
| | | .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH") |
| | | .allowCredentials(true) |
| | | .maxAge(3600); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.constant; |
| | | |
| | | /** |
| | | * ç³»ç»å¸¸é |
| | | * Created by vincent on 2019-10-29 15:55 |
| | | */ |
| | | public class Constants { |
| | | /** |
| | | * é»è®¤æåç |
| | | */ |
| | | public static final int RESULT_OK_CODE = 0; |
| | | |
| | | /** |
| | | * é»è®¤å¤±è´¥ç |
| | | */ |
| | | public static final int RESULT_ERROR_CODE = 1; |
| | | |
| | | /** |
| | | * é»è®¤æåä¿¡æ¯ |
| | | */ |
| | | public static final String RESULT_OK_MSG = "æä½æå"; |
| | | |
| | | /** |
| | | * é»è®¤å¤±è´¥ä¿¡æ¯ |
| | | */ |
| | | public static final String RESULT_ERROR_MSG = "æä½å¤±è´¥"; |
| | | |
| | | /** |
| | | * æ æéé误ç |
| | | */ |
| | | public static final int UNAUTHORIZED_CODE = 403; |
| | | |
| | | /** |
| | | * æ æéæç¤ºä¿¡æ¯ |
| | | */ |
| | | public static final String UNAUTHORIZED_MSG = "没æè®¿é®æé"; |
| | | |
| | | /** |
| | | * æªè®¤è¯é误ç |
| | | */ |
| | | public static final int UNAUTHENTICATED_CODE = 401; |
| | | |
| | | /** |
| | | * æªè®¤è¯æç¤ºä¿¡æ¯ |
| | | */ |
| | | public static final String UNAUTHENTICATED_MSG = "请å
ç»å½"; |
| | | |
| | | /** |
| | | * ç»å½è¿æé误ç |
| | | */ |
| | | public static final int TOKEN_EXPIRED_CODE = 401; |
| | | |
| | | /** |
| | | * ç»å½è¿ææç¤ºä¿¡æ¯ |
| | | */ |
| | | public static final String TOKEN_EXPIRED_MSG = "ç»å½å·²è¿æ"; |
| | | |
| | | /** |
| | | * éæ³tokené误ç |
| | | */ |
| | | public static final int BAD_CREDENTIALS_CODE = 401; |
| | | |
| | | /** |
| | | * éæ³tokenæç¤ºä¿¡æ¯ |
| | | */ |
| | | public static final String BAD_CREDENTIALS_MSG = "请éåºéæ°ç»å½"; |
| | | |
| | | /** |
| | | * 表示ååºçå¼ |
| | | */ |
| | | public static final String ORDER_ASC_VALUE = "asc"; |
| | | |
| | | /** |
| | | * 表示éåºçå¼ |
| | | */ |
| | | public static final String ORDER_DESC_VALUE = "desc"; |
| | | |
| | | /** |
| | | * tokenéè¿headerä¼ éçåç§° |
| | | */ |
| | | public static final String TOKEN_HEADER_NAME = "Authorization"; |
| | | |
| | | /** |
| | | * tokenéè¿åæ°ä¼ éçåç§° |
| | | */ |
| | | public static final String TOKEN_PARAM_NAME = "access_token"; |
| | | |
| | | /** |
| | | * token认è¯ç±»å |
| | | */ |
| | | public static final String TOKEN_TYPE = "Bearer"; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * Created by vincent on 2/13/2024 |
| | | */ |
| | | @Data |
| | | public class BaseParam implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @TableField(exist = false) |
| | | private Integer current; |
| | | |
| | | @TableField(exist = false) |
| | | private Integer pageSize; |
| | | |
| | | @TableField(exist = false) |
| | | private String timeStart; |
| | | |
| | | @TableField(exist = false) |
| | | private String timeEnd; |
| | | |
| | | @TableField(exist = false) |
| | | private String condition; |
| | | |
| | | @TableField(exist = false) |
| | | private Map<String, Object> map; |
| | | |
| | | public void syncMap(Map<String, Object> map) { |
| | | if (null == map) { |
| | | return; |
| | | } |
| | | if (null != map.get("current")) { |
| | | this.setCurrent(Integer.parseInt(String.valueOf(map.get("current")))); |
| | | map.remove("current"); |
| | | } |
| | | if (null != map.get("pageSize")) { |
| | | this.setPageSize(Integer.parseInt(String.valueOf(map.get("pageSize")))); |
| | | map.remove("pageSize"); |
| | | } |
| | | if (null != map.get("condition")) { |
| | | this.setCondition(String.valueOf(map.get("condition"))); |
| | | map.remove("condition"); |
| | | } |
| | | this.setMap(map); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.domain; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * Created by vincent on 2/16/2024 |
| | | */ |
| | | @Data |
| | | public class KeyValVo { |
| | | |
| | | private Object value; |
| | | |
| | | private Object label; |
| | | |
| | | public KeyValVo(Object value, Object label) { |
| | | this.value = value; |
| | | this.label = label; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.DateUtils; |
| | | import com.zy.asrs.wms.utils.Utils; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.lang.reflect.Modifier; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.function.Consumer; |
| | | |
| | | /** |
| | | * Created by vincent on 2/13/2024 |
| | | */ |
| | | public class PageParam<T, U extends BaseParam> extends Page<T> { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private final U where; |
| | | |
| | | /** |
| | | * æ¯å¦æå段å称驼峰转ä¸å线 |
| | | */ |
| | | private final boolean isToUnderlineCase; |
| | | |
| | | private final Class<T> cls; |
| | | |
| | | public PageParam() { |
| | | this(null); |
| | | } |
| | | |
| | | public PageParam(U where) { |
| | | this(where, true); |
| | | } |
| | | |
| | | public PageParam(U where, Class<T> cls) { |
| | | this(where, true, cls); |
| | | } |
| | | |
| | | public PageParam(U where, boolean isToUnderlineCase) { |
| | | this(where, isToUnderlineCase, null); |
| | | } |
| | | |
| | | |
| | | public PageParam(U where, boolean isToUnderlineCase, Class<T> cls) { |
| | | super(); |
| | | this.where = where; |
| | | this.isToUnderlineCase = isToUnderlineCase; |
| | | this.cls = cls; |
| | | if (where != null) { |
| | | if (where.getCurrent() != null) { |
| | | setCurrent(where.getCurrent()); |
| | | } |
| | | if (where.getPageSize() != null) { |
| | | setSize(where.getPageSize()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public QueryWrapper<T> buildWrapper() { |
| | | return this.buildWrapper(false); |
| | | } |
| | | |
| | | public QueryWrapper<T> buildWrapper(Consumer<QueryWrapper<T>> consumer) { |
| | | return this.buildWrapper(false, consumer); |
| | | } |
| | | |
| | | public QueryWrapper<T> buildWrapper(boolean like) { |
| | | return this.buildWrapper(like, null); |
| | | } |
| | | |
| | | @SuppressWarnings("all") |
| | | public QueryWrapper<T> buildWrapper(boolean like, Consumer<QueryWrapper<T>> consumer) { |
| | | QueryWrapper<T> queryWrapper = new QueryWrapper<>(); |
| | | Map<String, Object> map = where.getMap(); |
| | | for (String key : map.keySet()) { |
| | | Object val = map.get(key); |
| | | |
| | | if (key.contains("Range")) { |
| | | ArrayList<String> list = null; |
| | | if (val instanceof ArrayList) { |
| | | list = (ArrayList<String>) val; |
| | | } |
| | | if (null != list) { |
| | | key = key.replaceAll("Range", ""); |
| | | if (this.isToUnderlineCase) { |
| | | key = Utils.toSymbolCase(key, '_'); |
| | | } |
| | | queryWrapper.ge(key, DateUtils.convert(list.get(0))); |
| | | queryWrapper.le(key, DateUtils.convert(list.get(1))); |
| | | } |
| | | } else { |
| | | if (this.isToUnderlineCase) { |
| | | key = Utils.toSymbolCase(key, '_'); |
| | | } |
| | | if (like) { |
| | | queryWrapper.like(key, val); |
| | | } else { |
| | | queryWrapper.eq(key, val); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | if (null != consumer) { |
| | | consumer.accept(queryWrapper); |
| | | } |
| | | |
| | | Field[] fields = null; |
| | | if (!Cools.isEmpty(cls)) { |
| | | fields = Cools.getAllFields(cls); |
| | | for (Field field : fields) { |
| | | if ("createTime".equals(field.getName())) { |
| | | queryWrapper.orderByDesc(Utils.toSymbolCase(field.getName(), '_')); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (!Cools.isEmpty(where.getCondition()) && !Cools.isEmpty(fields)) { |
| | | List<String> columns = new ArrayList<>(); |
| | | for (Field field : fields){ |
| | | if (Modifier.isFinal(field.getModifiers()) |
| | | || Modifier.isStatic(field.getModifiers()) |
| | | || Modifier.isTransient(field.getModifiers())){ |
| | | continue; |
| | | } |
| | | |
| | | if (field.isAnnotationPresent(TableField.class)){ |
| | | TableField annotation = field.getAnnotation(TableField.class); |
| | | if (!annotation.exist()) { |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | String column = Utils.toSymbolCase(field.getName(), '_'); |
| | | columns.add(column); |
| | | } |
| | | if (!columns.isEmpty()) { |
| | | for (int i=0;i<columns.size();i++){ |
| | | String column = columns.get(i); |
| | | String condition = where.getCondition(); |
| | | |
| | | if (i == 0) { |
| | | queryWrapper.and(wrapper -> wrapper.like(column, condition)); |
| | | } else { |
| | | queryWrapper.or().like(column, condition); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return queryWrapper; |
| | | } |
| | | |
| | | public Map<String, Object> pickOutMap() { |
| | | return pickOutMap(false); |
| | | } |
| | | |
| | | public Map<String, Object> pickOutMap(boolean mergeCondition) { |
| | | Map<String, Object> map = where.getMap(); |
| | | if (mergeCondition) { |
| | | if (!Cools.isEmpty(where.getCondition())) { |
| | | map.put("condition", where.getCondition()); |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.domain; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author vincent |
| | | * @since 2017-06-10 10:10:02 |
| | | */ |
| | | @Data |
| | | public class PageResult<T> implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private List<T> records; |
| | | |
| | | private Long total; |
| | | |
| | | public PageResult() { |
| | | } |
| | | |
| | | public PageResult(List<T> records) { |
| | | this(records, null); |
| | | } |
| | | |
| | | public PageResult(List<T> records, Long total) { |
| | | this.records = records; |
| | | this.total = total; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.security; |
| | | |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wms.common.config.ConfigProperties; |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import com.zy.asrs.wms.system.entity.UserLogin; |
| | | import com.zy.asrs.wms.system.service.UserLoginService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import com.zy.asrs.wms.utils.HttpUtils; |
| | | import com.zy.asrs.wms.utils.JwtUtil; |
| | | import io.jsonwebtoken.Claims; |
| | | import io.jsonwebtoken.ExpiredJwtException; |
| | | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.security.core.userdetails.UsernameNotFoundException; |
| | | import org.springframework.security.web.util.matcher.AntPathRequestMatcher; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.filter.OncePerRequestFilter; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.FilterChain; |
| | | import javax.servlet.ServletException; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * å¤çæºå¸¦tokenç请æ±è¿æ»¤å¨ |
| | | * |
| | | */ |
| | | @Component |
| | | public class JwtAuthenticationFilter extends OncePerRequestFilter { |
| | | |
| | | public static final ArrayList<String> WHITE_LIST = new ArrayList<String>(){ |
| | | private static final long serialVersionUID = 1L; |
| | | { |
| | | add("xltys1995"); |
| | | } |
| | | }; |
| | | |
| | | @Resource |
| | | private ConfigProperties configProperties; |
| | | @Resource |
| | | private UserService userService; |
| | | @Resource |
| | | private UserLoginService userLoginService; |
| | | |
| | | @Override |
| | | protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { |
| | | String access_token = JwtUtil.getAccessToken(request); |
| | | for (String filterPath : SecurityConfig.FILTER_PATH) { |
| | | AntPathRequestMatcher antPathMatcher = new AntPathRequestMatcher(filterPath); |
| | | if (antPathMatcher.matches(request)) { |
| | | access_token = ""; |
| | | } |
| | | } |
| | | if (!Cools.isEmpty(access_token)) { |
| | | try { |
| | | User user; |
| | | // ç½åå |
| | | if (WHITE_LIST.contains(access_token)) { |
| | | user = userService.getByUsername("root", 1L); |
| | | if (user == null) { |
| | | throw new UsernameNotFoundException("Username not found"); |
| | | } |
| | | List<Menu> authorities = user.getAuthorities().stream() |
| | | .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList()); |
| | | UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( |
| | | user, null, authorities); |
| | | SecurityContextHolder.getContext().setAuthentication(authentication); |
| | | } else { |
| | | // è§£ætoken |
| | | Claims claims = JwtUtil.parseToken(access_token, configProperties.getTokenKey()); |
| | | JwtSubject jwtSubject = JwtUtil.getJwtSubject(claims); |
| | | user = userService.getByUsername(jwtSubject.getUsername(), jwtSubject.getHostId()); |
| | | if (user == null) { |
| | | throw new UsernameNotFoundException("Username not found"); |
| | | } |
| | | List<Menu> authorities = user.getAuthorities().stream() |
| | | .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList()); |
| | | UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( |
| | | user, null, authorities); |
| | | SecurityContextHolder.getContext().setAuthentication(authentication); |
| | | // tokenå°è¦è¿æç¾åæ°token, 鲿¢çªç¶éåºç»å½ |
| | | long expiration = (claims.getExpiration().getTime() - new Date().getTime()) / 1000 / 60; |
| | | if (expiration < configProperties.getTokenRefreshTime()) { |
| | | String token = JwtUtil.buildToken(jwtSubject, configProperties.getTokenExpireTime(), |
| | | configProperties.getTokenKey()); |
| | | response.addHeader(Constants.TOKEN_HEADER_NAME, token); |
| | | userLoginService.saveAsync(user.getId(), token, UserLogin.TYPE_REFRESH, user.getHostId(), null, request); |
| | | } |
| | | } |
| | | } catch (ExpiredJwtException e) { |
| | | e.printStackTrace(); |
| | | HttpUtils.responseError(response, Constants.TOKEN_EXPIRED_CODE, Constants.TOKEN_EXPIRED_MSG, |
| | | e.getMessage()); |
| | | return; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | HttpUtils.responseError(response, Constants.BAD_CREDENTIALS_CODE, Constants.BAD_CREDENTIALS_MSG, |
| | | e.toString()); |
| | | return; |
| | | } |
| | | } |
| | | chain.doFilter(request, response); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.security; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * Jwtè½½ä½ |
| | | * |
| | | * @author vincent |
| | | * @since 2021-09-03 00:11:12 |
| | | */ |
| | | @Data |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class JwtSubject implements Serializable { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * è´¦å· |
| | | */ |
| | | private String username; |
| | | |
| | | /** |
| | | * æºæ |
| | | */ |
| | | private Long hostId; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.security; |
| | | |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | import com.zy.asrs.wms.utils.HttpUtils; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.security.access.AccessDeniedException; |
| | | import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; |
| | | import org.springframework.security.config.annotation.web.builders.HttpSecurity; |
| | | import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; |
| | | import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; |
| | | import org.springframework.security.config.http.SessionCreationPolicy; |
| | | import org.springframework.security.core.AuthenticationException; |
| | | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
| | | import org.springframework.security.web.AuthenticationEntryPoint; |
| | | import org.springframework.security.web.access.AccessDeniedHandler; |
| | | import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * Spring Securityé
ç½® |
| | | * |
| | | */ |
| | | @Configuration |
| | | @EnableWebSecurity |
| | | @EnableGlobalMethodSecurity(prePostEnabled = true) |
| | | public class SecurityConfig extends WebSecurityConfigurerAdapter { |
| | | |
| | | public static final String[] FILTER_PATH = new String[]{ |
| | | "/api/auth/host", |
| | | "/test/**", |
| | | "/api/login", |
| | | "/druid/**", |
| | | "/swagger-ui.html", |
| | | "/swagger-resources/**", |
| | | "/webjars/**", |
| | | "/v2/api-docs", |
| | | "/v3/api-docs", |
| | | "/swagger-ui/**" |
| | | }; |
| | | |
| | | @Resource |
| | | private JwtAccessDeniedHandler jwtAccessDeniedHandler; |
| | | @Resource |
| | | private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; |
| | | @Resource |
| | | private JwtAuthenticationFilter jwtAuthenticationFilter; |
| | | |
| | | @Override |
| | | protected void configure(HttpSecurity http) throws Exception { |
| | | http.authorizeRequests() |
| | | .antMatchers(HttpMethod.OPTIONS, "/**") |
| | | .permitAll() |
| | | .antMatchers(HttpMethod.GET, "/api/file/**", "/api/captcha", "/") |
| | | .permitAll() |
| | | .antMatchers(FILTER_PATH) |
| | | .permitAll() |
| | | .anyRequest() |
| | | .authenticated() |
| | | .and() |
| | | .sessionManagement() |
| | | .sessionCreationPolicy(SessionCreationPolicy.STATELESS) |
| | | .and() |
| | | .csrf() |
| | | .disable() |
| | | .cors() |
| | | .and() |
| | | .logout() |
| | | .disable() |
| | | .headers() |
| | | .frameOptions() |
| | | .disable() |
| | | .and() |
| | | .exceptionHandling() |
| | | .accessDeniedHandler(jwtAccessDeniedHandler) |
| | | .authenticationEntryPoint(jwtAuthenticationEntryPoint) |
| | | .and() |
| | | .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); |
| | | } |
| | | |
| | | @Bean |
| | | public BCryptPasswordEncoder bCryptPasswordEncoder() { |
| | | return new BCryptPasswordEncoder(); |
| | | } |
| | | |
| | | // 没æè®¿é®æéå¼å¸¸å¤ç |
| | | @Component |
| | | static class JwtAccessDeniedHandler implements AccessDeniedHandler { |
| | | |
| | | @Override |
| | | public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) { |
| | | HttpUtils.responseError(response, Constants.UNAUTHORIZED_CODE, Constants.UNAUTHORIZED_MSG, e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | |
| | | // 没æç»å½å¼å¸¸å¤ç |
| | | @Component |
| | | static class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { |
| | | |
| | | @Override |
| | | public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { |
| | | HttpUtils.responseError(response, Constants.UNAUTHENTICATED_CODE, Constants.UNAUTHENTICATED_MSG, |
| | | e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.common.security; |
| | | |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | import com.zy.asrs.wms.utils.HttpUtils; |
| | | import org.springframework.security.access.AccessDeniedException; |
| | | import org.springframework.web.bind.annotation.ExceptionHandler; |
| | | import org.springframework.web.bind.annotation.RestControllerAdvice; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * Created by vincent on 2/13/2024 |
| | | */ |
| | | @RestControllerAdvice |
| | | public class SecurityExceptionHandler { |
| | | |
| | | @ExceptionHandler(AccessDeniedException.class) |
| | | public void accessDeniedExceptionHandler(AccessDeniedException e, HttpServletResponse response) { |
| | | HttpUtils.responseError(response, Constants.UNAUTHORIZED_CODE, Constants.UNAUTHORIZED_MSG, e.getMessage()); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.config.ConfigProperties; |
| | | import com.zy.asrs.wms.common.security.JwtSubject; |
| | | import com.zy.asrs.wms.system.controller.param.LoginParam; |
| | | import com.zy.asrs.wms.system.controller.param.UpdatePasswordParam; |
| | | import com.zy.asrs.wms.system.controller.result.LoginResult; |
| | | import com.zy.asrs.wms.system.entity.Host; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import com.zy.asrs.wms.system.entity.UserLogin; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.zy.asrs.wms.system.service.RoleMenuService; |
| | | import com.zy.asrs.wms.system.service.UserLoginService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import com.zy.asrs.wms.utils.JwtUtil; |
| | | import com.zy.asrs.wms.utils.Utils; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * è®¤è¯æ§å¶å¨ |
| | | * |
| | | * Created by vincent on 1/30/2024 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class AuthController extends BaseController { |
| | | |
| | | @Resource |
| | | private ConfigProperties configProperties; |
| | | @Resource |
| | | private UserService userService; |
| | | @Resource |
| | | private UserLoginService userLoginService; |
| | | @Resource |
| | | private RoleMenuService roleMenuService; |
| | | @Resource |
| | | private HostService hostService; |
| | | |
| | | @PostMapping("/login") |
| | | public R login(@RequestBody LoginParam param, HttpServletRequest request) { |
| | | String username = param.getUsername(); |
| | | Long hostId = param.getHostId(); |
| | | User user = userService.getByUsername(username, hostId); |
| | | if (user == null) { |
| | | return R.error("è´¦å·ä¸åå¨"); |
| | | } |
| | | if (!user.getStatus().equals(1)) { |
| | | return R.error("è´¦å·è¢«å»ç»"); |
| | | } |
| | | if (!userService.comparePassword(user.getPassword(), param.getPassword())) { |
| | | return R.error("å¯ç é误"); |
| | | } |
| | | String accessToken = JwtUtil.buildToken(new JwtSubject(username, user.getHostId()), |
| | | configProperties.getTokenExpireTime(), configProperties.getTokenKey()); |
| | | userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, hostId, null, request); |
| | | return R.ok("ç»å½æå").add(new LoginResult(accessToken, user)); |
| | | } |
| | | |
| | | @GetMapping("/auth/user") |
| | | public R userInfo() { |
| | | return R.ok(userService.getByIdRel(getLoginUserId())); |
| | | } |
| | | |
| | | @GetMapping("/auth/menu") |
| | | public R userMenu() { |
| | | List<Menu> menus = roleMenuService.listMenuByUserId(getLoginUserId(), Menu.TYPE_MENU); |
| | | return R.ok().add(Utils.toTreeData(menus, 0L, Menu::getParentId, Menu::getId, Menu::setChildren)); |
| | | } |
| | | |
| | | @GetMapping("/auth/host") |
| | | public R authHost() { |
| | | List<Host> list = hostService.list(); |
| | | return R.ok().add(list); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('sys:auth:user')") |
| | | @OperationLog |
| | | @PutMapping("/auth/user") |
| | | public R updateInfo(@RequestBody User user) { |
| | | user.setId(getLoginUserId()); |
| | | // ä¸è½ä¿®æ¹çåæ®µ |
| | | user.setUsername(null); |
| | | user.setPassword(null); |
| | | user.setEmailVerified(null); |
| | | user.setHostId(null); |
| | | user.setStatus(null); |
| | | if (userService.updateById(user)) { |
| | | return R.ok().add(userService.getByIdRel(user.getId())); |
| | | } |
| | | return R.error("ä¿å失败"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('sys:auth:password')") |
| | | @OperationLog |
| | | @PutMapping("/auth/password") |
| | | public R updatePassword(@RequestBody UpdatePasswordParam param) { |
| | | if (Cools.isEmpty(param.getOldPassword(), param.getPassword())) { |
| | | return R.error("åæ°ä¸è½ä¸ºç©º"); |
| | | } |
| | | Long userId = getLoginUserId(); |
| | | if (userId == null) { |
| | | return R.error("æªç»å½"); |
| | | } |
| | | if (!userService.comparePassword(userService.getById(userId).getPassword(), param.getOldPassword())) { |
| | | return R.error("åå¯ç è¾å
¥ä¸æ£ç¡®"); |
| | | } |
| | | User user = new User(); |
| | | user.setId(userId); |
| | | user.setPassword(userService.encodePassword(param.getPassword())); |
| | | if (userService.updateById(user)) { |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | return R.error("ä¿®æ¹å¤±è´¥"); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * Created by vincent on 1/30/2024 |
| | | */ |
| | | public class BaseController { |
| | | |
| | | public User getLoginUser() { |
| | | try { |
| | | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (authentication != null) { |
| | | Object object = authentication.getPrincipal(); |
| | | if (object instanceof User) { |
| | | return (User) object; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | System.out.println(e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public Long getLoginUserId() { |
| | | User loginUser = getLoginUser(); |
| | | return loginUser == null ? null : loginUser.getId(); |
| | | } |
| | | |
| | | public Long getHostId() { |
| | | User loginUser = getLoginUser(); |
| | | return loginUser == null ? null : loginUser.getHostId(); |
| | | } |
| | | |
| | | public <T extends BaseParam> T buildParam(Map<String, Object> map, Class<T> clz) { |
| | | T t = null; |
| | | try { |
| | | t = clz.getDeclaredConstructor().newInstance(); |
| | | t.syncMap(map); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return t; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.system.entity.Dept; |
| | | import com.zy.asrs.wms.system.service.DeptService; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import com.zy.asrs.wms.utils.NodeUtils; |
| | | import com.zy.asrs.wms.utils.Utils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.*; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class DeptController extends BaseController { |
| | | |
| | | @Autowired |
| | | private DeptService deptService; |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:list')") |
| | | @PostMapping("/dept/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<Dept, BaseParam> pageParam = new PageParam<>(baseParam, Dept.class); |
| | | return R.ok().add(deptService.page(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:list')") |
| | | @PostMapping("/dept/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(deptService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:list')") |
| | | @PostMapping("/dept/tree") |
| | | public R tree(@RequestBody Map<String, Object> map) { |
| | | // PageParam<Dept, BaseParam> param = new PageParam<>(buildParam(map, BaseParam.class), Dept.class); |
| | | // QueryWrapper<Dept> wrapper = param.buildWrapper(true, queryWrapper -> queryWrapper.orderByAsc("sort")); |
| | | List<Dept> deptList = deptService.list(new LambdaQueryWrapper<Dept>().orderByAsc(Dept::getSort)); |
| | | List<Dept> treeData = Utils.toTreeData(deptList, 0L, Dept::getParentId, Dept::getId, Dept::setChildren); |
| | | if (!Cools.isEmpty(map.get("condition"))) { |
| | | Utils.treeRemove(treeData, String.valueOf(map.get("condition")), Dept::getName, Dept::getChildren); |
| | | Utils.treeRemove(treeData, String.valueOf(map.get("condition")), Dept::getName, Dept::getChildren); |
| | | } |
| | | return R.ok().add(treeData); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:list')") |
| | | @GetMapping("/dept/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(deptService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:save')") |
| | | @OperationLog("æ·»å é¨é¨") |
| | | @PostMapping("/dept/save") |
| | | public R save(@RequestBody Dept dept) { |
| | | if (dept.getParentId() != null && dept.getParentId() > 0) { |
| | | Dept parent = deptService.getById(dept.getParentId()); |
| | | if (parent != null) { |
| | | dept.setParentName(parent.getName()); |
| | | } |
| | | } else { |
| | | dept.setParentId(0L); |
| | | } |
| | | |
| | | NodeUtils nodeUtils = new NodeUtils(); |
| | | nodeUtils.generatePath0(item -> deptService.getById(item.getParentId()), dept, Dept::getId, Dept::getName, Dept::getParentId); |
| | | dept.setPath(nodeUtils.path.toString()); |
| | | dept.setPathName(nodeUtils.pathName.toString()); |
| | | |
| | | dept.setCreateBy(getLoginUserId()); |
| | | dept.setCreateTime(new Date()); |
| | | dept.setUpdateBy(getLoginUserId()); |
| | | dept.setUpdateTime(new Date()); |
| | | if (!deptService.save(dept)) { |
| | | return R.error("æ·»å 失败"); |
| | | } |
| | | return R.ok("æ·»å æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:update')") |
| | | @OperationLog("ä¿®æ¹é¨é¨") |
| | | @PostMapping("/dept/update") |
| | | public R update(@RequestBody Dept dept) { |
| | | if (dept.getParentId() != null && dept.getParentId() > 0) { |
| | | Dept parent = deptService.getById(dept.getParentId()); |
| | | if (parent != null) { |
| | | dept.setParentName(parent.getName()); |
| | | } |
| | | } else { |
| | | dept.setParentId(0L); |
| | | } |
| | | |
| | | NodeUtils nodeUtils = new NodeUtils(); |
| | | nodeUtils.generatePath0(item -> deptService.getById(item.getParentId()), dept, Dept::getId, Dept::getName, Dept::getParentId); |
| | | dept.setPath(nodeUtils.path.toString()); |
| | | dept.setPathName(nodeUtils.pathName.toString()); |
| | | |
| | | dept.setUpdateBy(getLoginUserId()); |
| | | dept.setUpdateTime(new Date()); |
| | | if (!deptService.updateById(dept)) { |
| | | return R.error("ä¿®æ¹å¤±è´¥"); |
| | | } |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:remove')") |
| | | @OperationLog("å é¤é¨é¨") |
| | | @PostMapping("/dept/remove/{ids}") |
| | | public R remove(@PathVariable Long[] ids) { |
| | | if (!deptService.removeByIds(Arrays.asList(ids))) { |
| | | return R.error("å é¤å¤±è´¥"); |
| | | } |
| | | return R.ok("å 餿å"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:list')") |
| | | @PostMapping("/dept/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<Dept> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(Dept::getName, condition); |
| | | } |
| | | deptService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getName())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:dept:list')") |
| | | @PostMapping("/dept/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(deptService.list(), Dept.class), response); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.system.entity.Host; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.*; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class HostController extends BaseController { |
| | | |
| | | @Autowired |
| | | private HostService hostService; |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:list')") |
| | | @PostMapping("/host/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<Host, BaseParam> pageParam = new PageParam<>(baseParam, Host.class); |
| | | return R.ok().add(hostService.page(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:list')") |
| | | @PostMapping("/host/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(hostService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:list')") |
| | | @GetMapping("/host/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(hostService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:save')") |
| | | @OperationLog("æ·»å æºæ") |
| | | @PostMapping("/host/save") |
| | | public R save(@RequestBody Host host) { |
| | | host.setCreateTime(new Date()); |
| | | host.setUpdateTime(new Date()); |
| | | if (!hostService.save(host)) { |
| | | return R.error("æ·»å 失败"); |
| | | } |
| | | return R.ok("æ·»å æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:update')") |
| | | @OperationLog("ä¿®æ¹æºæ") |
| | | @PostMapping("/host/update") |
| | | public R update(@RequestBody Host host) { |
| | | host.setUpdateTime(new Date()); |
| | | if (!hostService.updateById(host)) { |
| | | return R.error("ä¿®æ¹å¤±è´¥"); |
| | | } |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:remove')") |
| | | @OperationLog("å 餿ºæ") |
| | | @PostMapping("/host/remove/{ids}") |
| | | public R remove(@PathVariable Long[] ids) { |
| | | if (!hostService.removeByIds(Arrays.asList(ids))) { |
| | | return R.error("å é¤å¤±è´¥"); |
| | | } |
| | | return R.ok("å 餿å"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:list')") |
| | | @PostMapping("/host/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<Host> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(Host::getName, condition); |
| | | } |
| | | hostService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getName())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:host:list')") |
| | | @PostMapping("/host/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(hostService.list(), Host.class), response); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.zy.asrs.wms.system.service.MenuService; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import com.zy.asrs.wms.utils.NodeUtils; |
| | | import com.zy.asrs.wms.utils.Utils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.*; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class MenuController extends BaseController { |
| | | |
| | | @Autowired |
| | | private MenuService menuService; |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:list')") |
| | | @PostMapping("/menu/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<Menu, BaseParam> pageParam = new PageParam<>(baseParam, Menu.class); |
| | | return R.ok().add(menuService.page(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:list')") |
| | | @PostMapping("/menu/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(menuService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:list')") |
| | | @PostMapping("/menu/tree") |
| | | public R tree(@RequestBody Map<String, Object> map) { |
| | | // PageParam<Menu, BaseParam> param = new PageParam<>(buildParam(map, BaseParam.class), Menu.class); |
| | | // QueryWrapper<Menu> wrapper = param.buildWrapper(true, queryWrapper -> queryWrapper.orderByAsc("sort")); |
| | | // List<Menu> menus = menuService.list(wrapper); |
| | | // return R.ok().add(Utils.toTreeData(menus, 0L, Menu::getParentId, Menu::getId, Menu::setChildren)); |
| | | List<Menu> menuList = menuService.list(new LambdaQueryWrapper<Menu>().orderByAsc(Menu::getSort)); |
| | | List<Menu> treeData = Utils.toTreeData(menuList, 0L, Menu::getParentId, Menu::getId, Menu::setChildren); |
| | | if (!Cools.isEmpty(map.get("condition"))) { |
| | | Utils.treeRemove(treeData, String.valueOf(map.get("condition")), Menu::getName, Menu::getChildren); |
| | | Utils.treeRemove(treeData, String.valueOf(map.get("condition")), Menu::getName, Menu::getChildren); |
| | | } |
| | | return R.ok().add(treeData); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:list')") |
| | | @GetMapping("/menu/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(menuService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:save')") |
| | | @OperationLog("æ·»å èå") |
| | | @PostMapping("/menu/save") |
| | | public R save(@RequestBody Menu menu) { |
| | | if (menu.getParentId() != null && menu.getParentId() > 0) { |
| | | Menu parent = menuService.getById(menu.getParentId()); |
| | | if (parent != null) { |
| | | menu.setParentName(parent.getName()); |
| | | } |
| | | } else { |
| | | menu.setParentId(0L); |
| | | } |
| | | |
| | | NodeUtils nodeUtils = new NodeUtils(); |
| | | nodeUtils.generatePath0(item -> menuService.getById(item.getParentId()), menu, Menu::getId, Menu::getName, Menu::getParentId); |
| | | menu.setPath(nodeUtils.path.toString()); |
| | | menu.setPathName(nodeUtils.pathName.toString()); |
| | | |
| | | menu.setCreateBy(getLoginUserId()); |
| | | menu.setCreateTime(new Date()); |
| | | menu.setUpdateBy(getLoginUserId()); |
| | | menu.setUpdateTime(new Date()); |
| | | if (!menuService.save(menu)) { |
| | | return R.error("æ·»å 失败"); |
| | | } |
| | | return R.ok("æ·»å æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:update')") |
| | | @OperationLog("ä¿®æ¹èå") |
| | | @PostMapping("/menu/update") |
| | | public R update(@RequestBody Menu menu) { |
| | | if (menu.getParentId() != null && menu.getParentId() > 0) { |
| | | Menu parent = menuService.getById(menu.getParentId()); |
| | | if (parent != null) { |
| | | menu.setParentName(parent.getName()); |
| | | } |
| | | } else { |
| | | menu.setParentId(0L); |
| | | } |
| | | |
| | | NodeUtils nodeUtils = new NodeUtils(); |
| | | nodeUtils.generatePath0(item -> menuService.getById(item.getParentId()), menu, Menu::getId, Menu::getName, Menu::getParentId); |
| | | menu.setPath(nodeUtils.path.toString()); |
| | | menu.setPathName(nodeUtils.pathName.toString()); |
| | | |
| | | menu.setUpdateBy(getLoginUserId()); |
| | | menu.setUpdateTime(new Date()); |
| | | if (!menuService.updateById(menu)) { |
| | | return R.error("ä¿®æ¹å¤±è´¥"); |
| | | } |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:remove')") |
| | | @OperationLog("å é¤èå") |
| | | @PostMapping("/menu/remove/{ids}") |
| | | public R remove(@PathVariable Long[] ids) { |
| | | if (!menuService.removeByIds(Arrays.asList(ids))) { |
| | | return R.error("å é¤å¤±è´¥"); |
| | | } |
| | | return R.ok("å 餿å"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:list')") |
| | | @PostMapping("/menu/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<Menu> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(Menu::getName, condition); |
| | | } |
| | | menuService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getName())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:menu:list')") |
| | | @PostMapping("/menu/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(menuService.list(), Menu.class), response); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.system.entity.OperationRecord; |
| | | import com.zy.asrs.wms.system.service.OperationRecordService; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class OperationRecordController extends BaseController { |
| | | |
| | | @Autowired |
| | | private OperationRecordService operationRecordService; |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:list')") |
| | | @PostMapping("/operationRecord/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<OperationRecord, BaseParam> pageParam = new PageParam<>(baseParam, OperationRecord.class); |
| | | return R.ok().add(operationRecordService.page(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:list')") |
| | | @PostMapping("/operationRecord/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(operationRecordService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:list')") |
| | | @GetMapping("/operationRecord/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(operationRecordService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:save')") |
| | | @OperationLog("æ·»å æä½æ¥å¿") |
| | | @PostMapping("/operationRecord/save") |
| | | public R save(@RequestBody OperationRecord operationRecord) { |
| | | if (!operationRecordService.save(operationRecord)) { |
| | | return R.error("æ·»å 失败"); |
| | | } |
| | | return R.ok("æ·»å æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:update')") |
| | | @OperationLog("ä¿®æ¹æä½æ¥å¿") |
| | | @PostMapping("/operationRecord/update") |
| | | public R update(@RequestBody OperationRecord operationRecord) { |
| | | if (!operationRecordService.updateById(operationRecord)) { |
| | | return R.error("ä¿®æ¹å¤±è´¥"); |
| | | } |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:remove')") |
| | | @OperationLog("å 餿使¥å¿") |
| | | @PostMapping("/operationRecord/remove/{ids}") |
| | | public R remove(@PathVariable Long[] ids) { |
| | | if (!operationRecordService.removeByIds(Arrays.asList(ids))) { |
| | | return R.error("å é¤å¤±è´¥"); |
| | | } |
| | | return R.ok("å 餿å"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:list')") |
| | | @PostMapping("/operationRecord/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<OperationRecord> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(OperationRecord::getNamespace, condition); |
| | | } |
| | | operationRecordService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getNamespace())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:operationRecord:list')") |
| | | @PostMapping("/operationRecord/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(operationRecordService.list(), OperationRecord.class), response); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.framework.exception.CoolException; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.system.controller.param.RoleScopeParam; |
| | | import com.zy.asrs.wms.system.entity.Role; |
| | | import com.zy.asrs.wms.system.entity.RoleMenu; |
| | | import com.zy.asrs.wms.system.service.RoleMenuService; |
| | | import com.zy.asrs.wms.system.service.RoleService; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * Created by vincent on 2/13/2024 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class RoleController extends BaseController { |
| | | |
| | | @Autowired |
| | | private RoleService roleService; |
| | | @Autowired |
| | | private RoleMenuService roleMenuService; |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:list')") |
| | | @PostMapping("/role/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<Role, BaseParam> pageParam = new PageParam<>(baseParam, Role.class); |
| | | return R.ok().add(roleService.page(pageParam, pageParam.buildWrapper(true, (wrapper) -> wrapper.orderByAsc("create_time")))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:list')") |
| | | @PostMapping("/role/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(roleService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:list')") |
| | | @GetMapping("/role/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(roleService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:save')") |
| | | @OperationLog("æ·»å è§è²") |
| | | @PostMapping("/role/save") |
| | | public R save(@RequestBody Role role) { |
| | | if (!Cools.isEmpty(role.getName()) |
| | | && roleService.count(new LambdaQueryWrapper<Role>().eq(Role::getName, role.getName())) > 0) { |
| | | return R.error("è§è²åç§°å·²åå¨"); |
| | | } |
| | | if (!Cools.isEmpty(role.getCode()) |
| | | && roleService.count(new LambdaQueryWrapper<Role>().eq(Role::getCode, role.getCode())) > 0) { |
| | | return R.error("è§è²æ è¯å·²åå¨"); |
| | | } |
| | | role.setCreateTime(new Date()); |
| | | role.setUpdateTime(new Date()); |
| | | if (!roleService.save(role)) { |
| | | return R.error("æ·»å 失败"); |
| | | } |
| | | return R.ok("æ·»å æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:update')") |
| | | @OperationLog("ä¿®æ¹è§è²") |
| | | @PostMapping("/role/update") |
| | | public R update(@RequestBody Role role) { |
| | | if (!Cools.isEmpty(role.getCode()) && roleService.count(new LambdaQueryWrapper<Role>() |
| | | .eq(Role::getCode, role.getCode()) |
| | | .ne(Role::getId, role.getId())) > 0) { |
| | | return R.error("è§è²æ è¯å·²åå¨"); |
| | | } |
| | | if (!Cools.isEmpty(role.getName()) && roleService.count(new LambdaQueryWrapper<Role>() |
| | | .eq(Role::getName, role.getName()) |
| | | .ne(Role::getId, role.getId())) > 0) { |
| | | return R.error("è§è²åç§°å·²åå¨"); |
| | | } |
| | | role.setUpdateTime(new Date()); |
| | | if (!roleService.updateById(role)) { |
| | | return R.error("ä¿®æ¹å¤±è´¥"); |
| | | } |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:remove')") |
| | | @OperationLog("å é¤è§è²") |
| | | @PostMapping("/role/remove/{ids}") |
| | | @Transactional |
| | | public R remove(@PathVariable Long[] ids) { |
| | | for (Long roleId : ids) { |
| | | if (!roleService.removeById(roleId)) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | if (!roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId))) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | } |
| | | return R.ok("å 餿å"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:list')") |
| | | @PostMapping("/role/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<Role> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(Role::getName, condition); |
| | | } |
| | | roleService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getName())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:list')") |
| | | @PostMapping("/role/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(roleService.list(), Role.class), response); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:list')") |
| | | @GetMapping("/role/scope/list") |
| | | public R scopeList(@RequestParam Long roleId) { |
| | | // List<RoleMenu> list = roleMenuService.list(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId)); |
| | | // if (!Cools.isEmpty(list)) { |
| | | // return R.ok().add(list.stream().map(RoleMenu::getMenuId).collect(Collectors.toList())); |
| | | // } |
| | | return R.ok().add(roleMenuService.listStrictlyMenuByRoleId(roleId)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:update')") |
| | | @OperationLog("åé
æé") |
| | | @PostMapping("/role/scope/update") |
| | | @Transactional |
| | | public R scopeUpdate(@RequestBody RoleScopeParam param) { |
| | | Long roleId = param.getId(); |
| | | List<Long> menuIds = new ArrayList<>(param.getMenuIds().getChecked()); |
| | | menuIds.addAll(param.getMenuIds().getHalfChecked()); |
| | | roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId)); |
| | | for (Long menuId : menuIds) { |
| | | if (!roleMenuService.save(new RoleMenu(roleId, menuId))) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | } |
| | | return R.ok("åé
æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:role:list')") |
| | | @GetMapping("/role/list/name/{ids}") |
| | | public R listName(@PathVariable Long[] ids) { |
| | | List<String> nameList = new ArrayList<>(); |
| | | for (Long id : ids) { |
| | | nameList.add(roleService.getById(id).getName()); |
| | | } |
| | | return R.ok().add(nameList); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.framework.exception.CoolException; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.system.controller.param.ResetPwdParam; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import com.zy.asrs.wms.system.entity.UserRole; |
| | | import com.zy.asrs.wms.system.service.UserRoleService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class UserController extends BaseController { |
| | | |
| | | public static final String COMMON_PASSWORD = "123456"; |
| | | |
| | | @Autowired |
| | | private UserService userService; |
| | | @Autowired |
| | | private UserRoleService userRoleService; |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:list')") |
| | | @PostMapping("/user/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<User, BaseParam> pageParam = new PageParam<>(baseParam, User.class); |
| | | return R.ok().add(userService.page(pageParam, pageParam.buildWrapper(true, wrapper -> wrapper.orderByAsc("create_time")))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:list')") |
| | | @PostMapping("/user/page1") |
| | | public R page1(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<User, BaseParam> pageParam = new PageParam<>(baseParam, User.class); |
| | | return R.ok().add(userService.pageRel(pageParam)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:list')") |
| | | @PostMapping("/user/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(userService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:list')") |
| | | @GetMapping("/user/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(userService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:save')") |
| | | @OperationLog("æ·»å ç¨æ·") |
| | | @PostMapping("/user/save") |
| | | @Transactional |
| | | public R save(@RequestBody User user) { |
| | | if (!Cools.isEmpty(user.getUsername()) |
| | | && userService.count(new LambdaQueryWrapper<User>().eq(User::getUsername, user.getUsername())) > 0) { |
| | | return R.error("ç»å½è´¦å·å·²åå¨"); |
| | | } |
| | | if (!Cools.isEmpty(user.getNickname()) |
| | | && userService.count(new LambdaQueryWrapper<User>().eq(User::getNickname, user.getNickname())) > 0) { |
| | | return R.error("ç¨æ·åç§°å·²åå¨"); |
| | | } |
| | | if (!Cools.isEmpty(user.getPhone()) |
| | | && userService.count(new LambdaQueryWrapper<User>().eq(User::getPhone, user.getPhone())) > 0) { |
| | | return R.error("ææºå·å·²åå¨"); |
| | | } |
| | | |
| | | user.setPassword(userService.encodePassword(COMMON_PASSWORD)); |
| | | |
| | | user.setCreateBy(getLoginUserId()); |
| | | user.setCreateTime(new Date()); |
| | | user.setUpdateBy(getLoginUserId()); |
| | | user.setUpdateTime(new Date()); |
| | | |
| | | if (!userService.save(user)) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | |
| | | userRoleService.remove(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, user.getId())); |
| | | for (Long roleId : user.getRoleIds()) { |
| | | if (!userRoleService.save(new UserRole(user.getId(), roleId))) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | } |
| | | |
| | | return R.ok("æ·»å æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:update')") |
| | | @OperationLog("ä¿®æ¹ç¨æ·") |
| | | @PostMapping("/user/update") |
| | | @Transactional |
| | | public R update(@RequestBody User user) { |
| | | if (!Cools.isEmpty(user.getUsername()) && userService.count(new LambdaQueryWrapper<User>() |
| | | .eq(User::getUsername, user.getUsername()) |
| | | .ne(User::getId, user.getId())) > 0) { |
| | | return R.error("ç»å½è´¦å·å·²åå¨"); |
| | | } |
| | | if (!Cools.isEmpty(user.getNickname()) && userService.count(new LambdaQueryWrapper<User>() |
| | | .eq(User::getNickname, user.getNickname()) |
| | | .ne(User::getId, user.getId())) > 0) { |
| | | return R.error("ç¨æ·åç§°å·²åå¨"); |
| | | } |
| | | if (!Cools.isEmpty(user.getPhone()) && userService.count(new LambdaQueryWrapper<User>() |
| | | .eq(User::getPhone, user.getPhone()) |
| | | .ne(User::getId, user.getId())) > 0) { |
| | | return R.error("ææºå·å·²åå¨"); |
| | | } |
| | | |
| | | if (!Cools.isEmpty(user.getPassword())) { |
| | | user.setPassword(userService.encodePassword(user.getPassword())); |
| | | } |
| | | |
| | | user.setUpdateBy(getLoginUserId()); |
| | | user.setUpdateTime(new Date()); |
| | | |
| | | if (!userService.updateById(user)) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | |
| | | if (user.getRoleIds() != null && user.getRoleIds().length > 0) { |
| | | userRoleService.remove(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, user.getId())); |
| | | for (Long roleId : user.getRoleIds()) { |
| | | if (!userRoleService.save(new UserRole(user.getId(), roleId))) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:remove')") |
| | | @OperationLog("å é¤ç¨æ·") |
| | | @PostMapping("/user/remove/{ids}") |
| | | @Transactional |
| | | public R remove(@PathVariable Long[] ids) { |
| | | for (Long userId : ids) { |
| | | if (!userService.removeById(userId)) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | if (!userRoleService.remove(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, userId))) { |
| | | throw new CoolException("æå¡å¨å
é¨é误"); |
| | | } |
| | | } |
| | | return R.ok("å 餿å"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:list')") |
| | | @PostMapping("/user/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(User::getNickname, condition); |
| | | } |
| | | userService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getNickname())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:list')") |
| | | @PostMapping("/user/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(userService.list(), User.class), response); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:user:update')") |
| | | @OperationLog("éç½®å¯ç ") |
| | | @PostMapping("/user/reset/pwd") |
| | | public R resetPwd(@RequestBody ResetPwdParam param) { |
| | | User user = userService.getById(param.getId()); |
| | | if (!Cools.isEmpty(param.getOldPwd())) { |
| | | if (!userService.comparePassword(user.getPassword(), param.getOldPwd())) { |
| | | return R.error("å½åå¯ç é误"); |
| | | } |
| | | } |
| | | if (!Cools.isEmpty(param.getPassword())) { |
| | | user.setPassword(userService.encodePassword(param.getPassword())); |
| | | } |
| | | user.setUpdateBy(getLoginUserId()); |
| | | user.setUpdateTime(new Date()); |
| | | if (!userService.updateById(user)) { |
| | | return R.error("é置失败"); |
| | | } |
| | | return R.ok("éç½®æå"); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.system.entity.UserLogin; |
| | | import com.zy.asrs.wms.system.service.UserLoginService; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class UserLoginController extends BaseController { |
| | | |
| | | @Autowired |
| | | private UserLoginService userLoginService; |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:list')") |
| | | @PostMapping("/userLogin/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<UserLogin, BaseParam> pageParam = new PageParam<>(baseParam, UserLogin.class); |
| | | return R.ok().add(userLoginService.page(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:list')") |
| | | @PostMapping("/userLogin/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(userLoginService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:list')") |
| | | @GetMapping("/userLogin/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(userLoginService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:save')") |
| | | @OperationLog("æ·»å ç»å½æ¥å¿") |
| | | @PostMapping("/userLogin/save") |
| | | public R save(@RequestBody UserLogin userLogin) { |
| | | if (!userLoginService.save(userLogin)) { |
| | | return R.error("æ·»å 失败"); |
| | | } |
| | | return R.ok("æ·»å æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:update')") |
| | | @OperationLog("ä¿®æ¹ç»å½æ¥å¿") |
| | | @PostMapping("/userLogin/update") |
| | | public R update(@RequestBody UserLogin userLogin) { |
| | | if (!userLoginService.updateById(userLogin)) { |
| | | return R.error("ä¿®æ¹å¤±è´¥"); |
| | | } |
| | | return R.ok("ä¿®æ¹æå"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:remove')") |
| | | @OperationLog("å é¤ç»å½æ¥å¿") |
| | | @PostMapping("/userLogin/remove/{ids}") |
| | | public R remove(@PathVariable Long[] ids) { |
| | | if (!userLoginService.removeByIds(Arrays.asList(ids))) { |
| | | return R.error("å é¤å¤±è´¥"); |
| | | } |
| | | return R.ok("å 餿å"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:list')") |
| | | @PostMapping("/userLogin/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<UserLogin> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(UserLogin::getToken, condition); |
| | | } |
| | | userLoginService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getToken())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:userLogin:list')") |
| | | @PostMapping("/userLogin/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(userLoginService.list(), UserLogin.class), response); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * Created by vincent on 1/30/2024 |
| | | */ |
| | | @Data |
| | | public class LoginParam implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private String username; |
| | | |
| | | private String password; |
| | | |
| | | private Long hostId; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * Created by vincent on 2/28/2024 |
| | | */ |
| | | @Data |
| | | public class ResetPwdParam { |
| | | |
| | | private Long id; |
| | | |
| | | private String oldPwd; |
| | | |
| | | private String password; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Created by vincent on 2/16/2024 |
| | | */ |
| | | @Data |
| | | public class RoleScopeParam { |
| | | |
| | | private Long id; |
| | | |
| | | private MenuIds menuIds; |
| | | |
| | | @Data |
| | | public static class MenuIds { |
| | | |
| | | private List<Long> checked; |
| | | |
| | | private List<Long> halfChecked; |
| | | |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | public class UpdatePasswordParam implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private String oldPassword; |
| | | |
| | | private String password; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.controller.result; |
| | | |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * Created by vincent on 1/30/2024 |
| | | */ |
| | | @Data |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class LoginResult implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private String accessToken; |
| | | |
| | | private User user; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @TableName("sys_dept") |
| | | public class Dept implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | @ApiModelProperty(value= "åç§°") |
| | | private String name; |
| | | |
| | | /** |
| | | * ä¸çº§é¨é¨ |
| | | */ |
| | | @ApiModelProperty(value= "ä¸çº§é¨é¨") |
| | | private Long parentId; |
| | | |
| | | /** |
| | | * ä¸çº§é¨é¨å |
| | | */ |
| | | @ApiModelProperty(value= "ä¸çº§é¨é¨å") |
| | | private String parentName; |
| | | |
| | | /** |
| | | * å
³èè·¯å¾ |
| | | */ |
| | | @ApiModelProperty(value= "å
³èè·¯å¾") |
| | | private String path; |
| | | |
| | | /** |
| | | * å
³èè·¯å¾å |
| | | */ |
| | | @ApiModelProperty(value= "å
³èè·¯å¾å") |
| | | private String pathName; |
| | | |
| | | /** |
| | | * å
¨ç§° |
| | | */ |
| | | @ApiModelProperty(value= "å
¨ç§°") |
| | | private String fullName; |
| | | |
| | | /** |
| | | * ç®è¿° |
| | | */ |
| | | @ApiModelProperty(value= "ç®è¿°") |
| | | private String brief; |
| | | |
| | | /** |
| | | * æ è¯ |
| | | */ |
| | | @ApiModelProperty(value= "æ è¯") |
| | | private String code; |
| | | |
| | | /** |
| | | * ç±»å |
| | | */ |
| | | @ApiModelProperty(value= "ç±»å") |
| | | private Integer type; |
| | | |
| | | /** |
| | | * è´è´£äºº |
| | | */ |
| | | @ApiModelProperty(value= "è´è´£äºº") |
| | | private String leader; |
| | | |
| | | /** |
| | | * æ°é |
| | | */ |
| | | @ApiModelProperty(value= "æ°é") |
| | | private Integer count; |
| | | |
| | | /** |
| | | * æåº |
| | | */ |
| | | @ApiModelProperty(value= "æåº") |
| | | private Integer sort; |
| | | |
| | | /** |
| | | * æå±æºæ |
| | | */ |
| | | @ApiModelProperty(value= "æå±æºæ") |
| | | private Long hostId; |
| | | |
| | | /** |
| | | * ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ |
| | | */ |
| | | @ApiModelProperty(value= "ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ ") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * æ¯å¦å é¤ 1: æ¯ 0: å¦ |
| | | */ |
| | | @ApiModelProperty(value= "æ¯å¦å é¤ 1: æ¯ 0: å¦ ") |
| | | @TableLogic |
| | | private Integer deleted; |
| | | |
| | | /** |
| | | * æ·»å æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æ·»å 人å |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å 人å") |
| | | private Long createBy; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹äººå |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹äººå") |
| | | private Long updateBy; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ApiModelProperty(value= "夿³¨") |
| | | private String memo; |
| | | |
| | | @TableField(exist = false) |
| | | private List<Dept> children; |
| | | |
| | | public Dept() {} |
| | | |
| | | public Dept(String name,Long parentId,String parentName,String path,String pathName,String fullName,String brief,String code,Integer type,String leader,Integer count,Integer sort,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) { |
| | | this.name = name; |
| | | this.parentId = parentId; |
| | | this.parentName = parentName; |
| | | this.path = path; |
| | | this.pathName = pathName; |
| | | this.fullName = fullName; |
| | | this.brief = brief; |
| | | this.code = code; |
| | | this.type = type; |
| | | this.leader = leader; |
| | | this.count = count; |
| | | this.sort = sort; |
| | | this.hostId = hostId; |
| | | this.status = status; |
| | | this.deleted = deleted; |
| | | this.createTime = createTime; |
| | | this.createBy = createBy; |
| | | this.updateTime = updateTime; |
| | | this.updateBy = updateBy; |
| | | this.memo = memo; |
| | | } |
| | | |
| | | // Dept dept = new Dept( |
| | | // null, // åç§°[é空] |
| | | // null, // ä¸çº§é¨é¨ |
| | | // null, // ä¸çº§é¨é¨å |
| | | // null, // å
³èè·¯å¾ |
| | | // null, // å
³èè·¯å¾å |
| | | // null, // å
¨ç§° |
| | | // null, // ç®è¿° |
| | | // null, // æ è¯ |
| | | // null, // ç±»å |
| | | // null, // è´è´£äºº |
| | | // null, // æ°é |
| | | // null, // æåº |
| | | // null, // æå±æºæ |
| | | // null, // ç¶æ |
| | | // null, // æ¯å¦å é¤ |
| | | // null, // æ·»å æ¶é´ |
| | | // null, // æ·»å 人å |
| | | // null, // ä¿®æ¹æ¶é´ |
| | | // null, // ä¿®æ¹äººå |
| | | // null // 夿³¨ |
| | | // ); |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | | Host host = service.getById(this.hostId); |
| | | if (!Cools.isEmpty(host)){ |
| | | return String.valueOf(host.getId()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getStatus$(){ |
| | | if (null == this.status){ return null; } |
| | | switch (this.status){ |
| | | case 1: |
| | | return "æ£å¸¸"; |
| | | case 0: |
| | | return "ç¦ç¨"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | | } |
| | | |
| | | public String getDeleted$(){ |
| | | if (null == this.deleted){ return null; } |
| | | switch (this.deleted){ |
| | | case 1: |
| | | return "æ¯"; |
| | | case 0: |
| | | return "å¦"; |
| | | default: |
| | | return String.valueOf(this.deleted); |
| | | } |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | public String getCreateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.createBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getUpdateTime$(){ |
| | | if (Cools.isEmpty(this.updateTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); |
| | | } |
| | | |
| | | public String getUpdateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.updateBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @TableName("sys_host") |
| | | public class Host implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | @ApiModelProperty(value= "åç§°") |
| | | private String name; |
| | | |
| | | /** |
| | | * ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ |
| | | */ |
| | | @ApiModelProperty(value= "ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ ") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * æ¯å¦å é¤ 1: æ¯ 0: å¦ |
| | | */ |
| | | @ApiModelProperty(value= "æ¯å¦å é¤ 1: æ¯ 0: å¦ ") |
| | | @TableLogic |
| | | private Integer deleted; |
| | | |
| | | /** |
| | | * æ·»å æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ApiModelProperty(value= "夿³¨") |
| | | private String memo; |
| | | |
| | | public Host() {} |
| | | |
| | | public Host(String name,Integer status,Integer deleted,Date createTime,Date updateTime,String memo) { |
| | | this.name = name; |
| | | this.status = status; |
| | | this.deleted = deleted; |
| | | this.createTime = createTime; |
| | | this.updateTime = updateTime; |
| | | this.memo = memo; |
| | | } |
| | | |
| | | // Host host = new Host( |
| | | // null, // åç§°[é空] |
| | | // null, // ç¶æ |
| | | // null, // æ¯å¦å é¤ |
| | | // null, // æ·»å æ¶é´ |
| | | // null, // ä¿®æ¹æ¶é´ |
| | | // null // 夿³¨ |
| | | // ); |
| | | |
| | | public String getStatus$(){ |
| | | if (null == this.status){ return null; } |
| | | switch (this.status){ |
| | | case 1: |
| | | return "æ£å¸¸"; |
| | | case 0: |
| | | return "ç¦ç¨"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | | } |
| | | |
| | | public String getDeleted$(){ |
| | | if (null == this.deleted){ return null; } |
| | | switch (this.deleted){ |
| | | case 1: |
| | | return "æ¯"; |
| | | case 0: |
| | | return "å¦"; |
| | | default: |
| | | return String.valueOf(this.deleted); |
| | | } |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | public String getUpdateTime$(){ |
| | | if (Cools.isEmpty(this.updateTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import org.springframework.security.core.GrantedAuthority; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @TableName("sys_menu") |
| | | public class Menu implements Serializable, GrantedAuthority { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public static final int TYPE_MENU = 0; // èåç±»å |
| | | public static final int TYPE_BTN = 1; // æé®ç±»å |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | @ApiModelProperty(value= "åç§°") |
| | | private String name; |
| | | |
| | | /** |
| | | * ä¸çº§èå |
| | | */ |
| | | @ApiModelProperty(value= "ä¸çº§èå") |
| | | private Long parentId; |
| | | |
| | | /** |
| | | * ä¸çº§èåå |
| | | */ |
| | | @ApiModelProperty(value= "ä¸çº§èåå") |
| | | private String parentName; |
| | | |
| | | /** |
| | | * å
³èè·¯å¾ |
| | | */ |
| | | @ApiModelProperty(value= "å
³èè·¯å¾") |
| | | private String path; |
| | | |
| | | /** |
| | | * å
³èè·¯å¾å |
| | | */ |
| | | @ApiModelProperty(value= "å
³èè·¯å¾å") |
| | | private String pathName; |
| | | |
| | | /** |
| | | * è·¯ç±å°å |
| | | */ |
| | | @ApiModelProperty(value= "è·¯ç±å°å") |
| | | private String route; |
| | | |
| | | /** |
| | | * 页é¢ç»ä»¶ |
| | | */ |
| | | @ApiModelProperty(value= "页é¢ç»ä»¶") |
| | | private String component; |
| | | |
| | | /** |
| | | * ç®è¿° |
| | | */ |
| | | @ApiModelProperty(value= "ç®è¿°") |
| | | private String brief; |
| | | |
| | | /** |
| | | * æ è¯ |
| | | */ |
| | | @ApiModelProperty(value= "æ è¯") |
| | | private String code; |
| | | |
| | | /** |
| | | * ç±»å 0: èå 1: æé® |
| | | */ |
| | | @ApiModelProperty(value= "ç±»å 0: èå 1: æé® ") |
| | | private Integer type; |
| | | |
| | | /** |
| | | * æéæ è¯ |
| | | */ |
| | | @ApiModelProperty(value= "æéæ è¯") |
| | | private String authority; |
| | | |
| | | /** |
| | | * èå徿 |
| | | */ |
| | | @ApiModelProperty(value= "èå徿 ") |
| | | private String icon; |
| | | |
| | | /** |
| | | * æåº |
| | | */ |
| | | @ApiModelProperty(value= "æåº") |
| | | private Integer sort; |
| | | |
| | | /** |
| | | * å
ä¿¡æ¯ |
| | | */ |
| | | @ApiModelProperty(value= "å
ä¿¡æ¯") |
| | | private String meta; |
| | | |
| | | /** |
| | | * æå±æºæ |
| | | */ |
| | | @ApiModelProperty(value= "æå±æºæ") |
| | | private Long hostId; |
| | | |
| | | /** |
| | | * ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ |
| | | */ |
| | | @ApiModelProperty(value= "ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ ") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * æ¯å¦å é¤ 1: æ¯ 0: å¦ |
| | | */ |
| | | @ApiModelProperty(value= "æ¯å¦å é¤ 1: æ¯ 0: å¦ ") |
| | | @TableLogic |
| | | private Integer deleted; |
| | | |
| | | /** |
| | | * æ·»å æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æ·»å 人å |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å 人å") |
| | | private Long createBy; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹äººå |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹äººå") |
| | | private Long updateBy; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ApiModelProperty(value= "夿³¨") |
| | | private String memo; |
| | | |
| | | @TableField(exist = false) |
| | | private List<Menu> children; |
| | | |
| | | public Menu() {} |
| | | |
| | | public Menu(String name, Long parentId, String parentName, String path, String pathName, String route, String component, String brief, String code, Integer type, String authority, String icon, Integer sort, String meta, Long hostId, Integer status, Integer deleted, Date createTime, Long createBy, Date updateTime, Long updateBy, String memo) { |
| | | this.name = name; |
| | | this.parentId = parentId; |
| | | this.parentName = parentName; |
| | | this.path = path; |
| | | this.pathName = pathName; |
| | | this.route = route; |
| | | this.component = component; |
| | | this.brief = brief; |
| | | this.code = code; |
| | | this.type = type; |
| | | this.authority = authority; |
| | | this.icon = icon; |
| | | this.sort = sort; |
| | | this.meta = meta; |
| | | this.hostId = hostId; |
| | | this.status = status; |
| | | this.deleted = deleted; |
| | | this.createTime = createTime; |
| | | this.createBy = createBy; |
| | | this.updateTime = updateTime; |
| | | this.updateBy = updateBy; |
| | | this.memo = memo; |
| | | } |
| | | |
| | | // Menu menu = new Menu( |
| | | // null, // åç§°[é空] |
| | | // null, // ä¸çº§èå |
| | | // null, // ä¸çº§èåå |
| | | // null, // å
³èè·¯å¾ |
| | | // null, // å
³èè·¯å¾å |
| | | // null, // è·¯ç±å°å |
| | | // null, // ç®è¿° |
| | | // null, // æ è¯ |
| | | // null, // ç±»å |
| | | // null, // æéæ è¯ |
| | | // null, // èå徿 |
| | | // null, // æåº |
| | | // null, // å
ä¿¡æ¯ |
| | | // null, // æå±æºæ |
| | | // null, // ç¶æ |
| | | // null, // æ¯å¦å é¤ |
| | | // null, // æ·»å æ¶é´ |
| | | // null, // æ·»å 人å |
| | | // null, // ä¿®æ¹æ¶é´ |
| | | // null, // ä¿®æ¹äººå |
| | | // null // 夿³¨ |
| | | // ); |
| | | |
| | | public String getType$(){ |
| | | if (null == this.type){ return null; } |
| | | switch (this.type){ |
| | | case 0: |
| | | return "èå"; |
| | | case 1: |
| | | return "æé®"; |
| | | default: |
| | | return String.valueOf(this.type); |
| | | } |
| | | } |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | | Host host = service.getById(this.hostId); |
| | | if (!Cools.isEmpty(host)){ |
| | | return String.valueOf(host.getId()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getStatus$(){ |
| | | if (null == this.status){ return null; } |
| | | switch (this.status){ |
| | | case 1: |
| | | return "æ£å¸¸"; |
| | | case 0: |
| | | return "ç¦ç¨"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | | } |
| | | |
| | | public String getDeleted$(){ |
| | | if (null == this.deleted){ return null; } |
| | | switch (this.deleted){ |
| | | case 1: |
| | | return "æ¯"; |
| | | case 0: |
| | | return "å¦"; |
| | | default: |
| | | return String.valueOf(this.deleted); |
| | | } |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | public String getCreateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.createBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getUpdateTime$(){ |
| | | if (Cools.isEmpty(this.updateTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); |
| | | } |
| | | |
| | | public String getUpdateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.updateBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @TableName("sys_operation_record") |
| | | public class OperationRecord implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * åç§°ç©ºé´ |
| | | */ |
| | | @ApiModelProperty(value= "å称空é´") |
| | | private String namespace; |
| | | |
| | | /** |
| | | * æ¥å£å°å |
| | | */ |
| | | @ApiModelProperty(value= "æ¥å£å°å") |
| | | private String url; |
| | | |
| | | /** |
| | | * å¹³å°å¯é¥ |
| | | */ |
| | | @ApiModelProperty(value= "å¹³å°å¯é¥") |
| | | private String appkey; |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @ApiModelProperty(value= "æ¶é´æ³") |
| | | private String timestamp; |
| | | |
| | | /** |
| | | * 客æ·ç«¯IP |
| | | */ |
| | | @ApiModelProperty(value= "客æ·ç«¯IP") |
| | | private String clientIp; |
| | | |
| | | /** |
| | | * 请æ±å
容 |
| | | */ |
| | | @ApiModelProperty(value= "请æ±å
容") |
| | | private String request; |
| | | |
| | | /** |
| | | * ååºå
容 |
| | | */ |
| | | @ApiModelProperty(value= "ååºå
容") |
| | | private String response; |
| | | |
| | | /** |
| | | * æ¶èæ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ¶èæ¶é´") |
| | | private Integer spendTime; |
| | | |
| | | /** |
| | | * å¼å¸¸å
容 |
| | | */ |
| | | @ApiModelProperty(value= "å¼å¸¸å
容") |
| | | private String err; |
| | | |
| | | /** |
| | | * ç»æ 1: æå 0: 失败 |
| | | */ |
| | | @ApiModelProperty(value= "ç»æ 1: æå 0: 失败 ") |
| | | private Integer result; |
| | | |
| | | /** |
| | | * ç¨æ· |
| | | */ |
| | | @ApiModelProperty(value= "ç¨æ·") |
| | | private Long userId; |
| | | |
| | | /** |
| | | * æå±æºæ |
| | | */ |
| | | @ApiModelProperty(value= "æå±æºæ") |
| | | private Long hostId; |
| | | |
| | | /** |
| | | * æ·»å æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ApiModelProperty(value= "夿³¨") |
| | | private String memo; |
| | | |
| | | public OperationRecord() {} |
| | | |
| | | public OperationRecord(String namespace, String url, String appkey, String timestamp, String clientIp, String request, String response, Integer spendTime, String err, Integer result, Long userId, Long hostId, Date createTime, String memo) { |
| | | this.namespace = namespace; |
| | | this.url = url; |
| | | this.appkey = appkey; |
| | | this.timestamp = timestamp; |
| | | this.clientIp = clientIp; |
| | | this.request = request; |
| | | this.response = response; |
| | | this.spendTime = spendTime; |
| | | this.err = err; |
| | | this.result = result; |
| | | this.userId = userId; |
| | | this.hostId = hostId; |
| | | this.createTime = createTime; |
| | | this.memo = memo; |
| | | } |
| | | |
| | | // OperationRecord operationRecord = new OperationRecord( |
| | | // null, // åç§°ç©ºé´ |
| | | // null, // æ¥å£å°å |
| | | // null, // å¹³å°å¯é¥ |
| | | // null, // æ¶é´æ³ |
| | | // null, // 客æ·ç«¯IP |
| | | // null, // 请æ±å
容 |
| | | // null, // ååºå
容 |
| | | // null, // å¼å¸¸å
容 |
| | | // null, // ç»æ |
| | | // null, // ç¨æ· |
| | | // null, // æå±æºæ |
| | | // null, // æ·»å æ¶é´ |
| | | // null // 夿³¨ |
| | | // ); |
| | | |
| | | public String getResult$(){ |
| | | if (null == this.result){ return null; } |
| | | switch (this.result){ |
| | | case 1: |
| | | return "æå"; |
| | | case 0: |
| | | return "失败"; |
| | | default: |
| | | return String.valueOf(this.result); |
| | | } |
| | | } |
| | | |
| | | public String getUserId$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.userId); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | | Host host = service.getById(this.hostId); |
| | | if (!Cools.isEmpty(host)){ |
| | | return String.valueOf(host.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @TableName("sys_role") |
| | | public class Role implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | @ApiModelProperty(value= "åç§°") |
| | | private String name; |
| | | |
| | | /** |
| | | * æ è¯ |
| | | */ |
| | | @ApiModelProperty(value= "æ è¯") |
| | | private String code; |
| | | |
| | | /** |
| | | * æå±æºæ |
| | | */ |
| | | @ApiModelProperty(value= "æå±æºæ") |
| | | private Long hostId; |
| | | |
| | | /** |
| | | * ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ |
| | | */ |
| | | @ApiModelProperty(value= "ç¶æ") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * æ¯å¦å é¤ 1: æ¯ 0: å¦ |
| | | */ |
| | | @ApiModelProperty(value= "æ¯å¦å é¤") |
| | | @TableLogic |
| | | private Integer deleted; |
| | | |
| | | /** |
| | | * æ·»å æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ApiModelProperty(value= "夿³¨") |
| | | private String memo; |
| | | |
| | | public Role() {} |
| | | |
| | | public Role(String name,String code,Long hostId,Integer status,Integer deleted,Date createTime,Date updateTime,String memo) { |
| | | this.name = name; |
| | | this.code = code; |
| | | this.hostId = hostId; |
| | | this.status = status; |
| | | this.deleted = deleted; |
| | | this.createTime = createTime; |
| | | this.updateTime = updateTime; |
| | | this.memo = memo; |
| | | } |
| | | |
| | | // Role role = new Role( |
| | | // null, // åç§°[é空] |
| | | // null, // æ è¯ |
| | | // null, // æå±æºæ |
| | | // null, // ç¶æ |
| | | // null, // æ¯å¦å é¤ |
| | | // null, // æ·»å æ¶é´ |
| | | // null, // ä¿®æ¹æ¶é´ |
| | | // null // 夿³¨ |
| | | // ); |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | | Host host = service.getById(this.hostId); |
| | | if (!Cools.isEmpty(host)){ |
| | | return String.valueOf(host.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getStatus$(){ |
| | | if (null == this.status){ return null; } |
| | | switch (this.status){ |
| | | case 1: |
| | | return "æ£å¸¸"; |
| | | case 0: |
| | | return "ç¦ç¨"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | | } |
| | | |
| | | public String getDeleted$(){ |
| | | if (null == this.deleted){ return null; } |
| | | switch (this.deleted){ |
| | | case 1: |
| | | return "æ¯"; |
| | | case 0: |
| | | return "å¦"; |
| | | default: |
| | | return String.valueOf(this.deleted); |
| | | } |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | public String getUpdateTime$(){ |
| | | if (Cools.isEmpty(this.updateTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @TableName("sys_role_menu") |
| | | public class RoleMenu implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | private Long roleId; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | private Long menuId; |
| | | |
| | | public RoleMenu() {} |
| | | |
| | | public RoleMenu(Long roleId,Long menuId) { |
| | | this.roleId = roleId; |
| | | this.menuId = menuId; |
| | | } |
| | | |
| | | // RoleMenu roleMenu = new RoleMenu( |
| | | // null, // [é空] |
| | | // null // [é空] |
| | | // ); |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wms.system.service.DeptService; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.zy.asrs.wms.system.service.UserRoleService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import org.springframework.security.core.userdetails.UserDetails; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @TableName("sys_user") |
| | | public class User implements Serializable, UserDetails { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * è´¦å· |
| | | */ |
| | | @ApiModelProperty(value= "è´¦å·") |
| | | private String username; |
| | | |
| | | /** |
| | | * å¯ç |
| | | */ |
| | | @ApiModelProperty(value= "å¯ç ") |
| | | private String password; |
| | | |
| | | /** |
| | | * æµç§° |
| | | */ |
| | | @ApiModelProperty(value= "æµç§°") |
| | | private String nickname; |
| | | |
| | | /** |
| | | * 头å |
| | | */ |
| | | @ApiModelProperty(value= "头å") |
| | | private String avatar; |
| | | |
| | | /** |
| | | * å·¥å· |
| | | */ |
| | | @ApiModelProperty(value= "å·¥å·") |
| | | private String code; |
| | | |
| | | /** |
| | | * æ§å« 0: æªç¥ 1: ç· 2: 女 |
| | | */ |
| | | @ApiModelProperty(value= "æ§å« 0: æªç¥ 1: ç· 2: 女 ") |
| | | private Integer sex; |
| | | |
| | | /** |
| | | * ææºå· |
| | | */ |
| | | @ApiModelProperty(value= "ææºå·") |
| | | private String phone; |
| | | |
| | | /** |
| | | * é®ç®± |
| | | */ |
| | | @ApiModelProperty(value= "é®ç®±") |
| | | private String email; |
| | | |
| | | /** |
| | | * é®ç®±éªè¯ 0: å¦ 1: æ¯ |
| | | */ |
| | | @ApiModelProperty(value= "é®ç®±éªè¯ 0: å¦ 1: æ¯ ") |
| | | private Integer emailVerified; |
| | | |
| | | /** |
| | | * æå±é¨é¨ |
| | | */ |
| | | @ApiModelProperty(value= "æå±é¨é¨") |
| | | private Long deptId; |
| | | |
| | | /** |
| | | * çå®å§å |
| | | */ |
| | | @ApiModelProperty(value= "çå®å§å") |
| | | private String realName; |
| | | |
| | | /** |
| | | * 身份è¯å· |
| | | */ |
| | | @ApiModelProperty(value= "身份è¯å·") |
| | | private String idCard; |
| | | |
| | | /** |
| | | * åºçæ¥æ |
| | | */ |
| | | @ApiModelProperty(value= "åºçæ¥æ") |
| | | private String birthday; |
| | | |
| | | /** |
| | | * 个人ç®ä» |
| | | */ |
| | | @ApiModelProperty(value= "个人ç®ä»") |
| | | private String introduction; |
| | | |
| | | /** |
| | | * æå±æºæ |
| | | */ |
| | | @ApiModelProperty(value= "æå±æºæ") |
| | | private Long hostId; |
| | | |
| | | /** |
| | | * ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ |
| | | */ |
| | | @ApiModelProperty(value= "ç¶æ 1: æ£å¸¸ 0: ç¦ç¨ ") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * æ¯å¦å é¤ 1: æ¯ 0: å¦ |
| | | */ |
| | | @ApiModelProperty(value= "æ¯å¦å é¤ 1: æ¯ 0: å¦ ") |
| | | @TableLogic |
| | | private Integer deleted; |
| | | |
| | | /** |
| | | * æ·»å æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æ·»å 人å |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å 人å") |
| | | private Long createBy; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹äººå |
| | | */ |
| | | @ApiModelProperty(value= "ä¿®æ¹äººå") |
| | | private Long updateBy; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ApiModelProperty(value= "夿³¨") |
| | | private String memo; |
| | | |
| | | @TableField(exist = false) |
| | | private Long[] roleIds; |
| | | |
| | | @TableField(exist = false) |
| | | private List<Role> roles; |
| | | |
| | | @TableField(exist = false) |
| | | private List<Menu> authorities; |
| | | |
| | | public User() {} |
| | | |
| | | public User(String username,String password,String nickname,String avatar,String code,Integer sex,String phone,String email,Integer emailVerified,Long deptId,String realName,String idCard,String birthday,String introduction,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) { |
| | | this.username = username; |
| | | this.password = password; |
| | | this.nickname = nickname; |
| | | this.avatar = avatar; |
| | | this.code = code; |
| | | this.sex = sex; |
| | | this.phone = phone; |
| | | this.email = email; |
| | | this.emailVerified = emailVerified; |
| | | this.deptId = deptId; |
| | | this.realName = realName; |
| | | this.idCard = idCard; |
| | | this.birthday = birthday; |
| | | this.introduction = introduction; |
| | | this.hostId = hostId; |
| | | this.status = status; |
| | | this.deleted = deleted; |
| | | this.createTime = createTime; |
| | | this.createBy = createBy; |
| | | this.updateTime = updateTime; |
| | | this.updateBy = updateBy; |
| | | this.memo = memo; |
| | | } |
| | | |
| | | // User user = new User( |
| | | // null, // è´¦å·[é空] |
| | | // null, // å¯ç |
| | | // null, // æµç§° |
| | | // null, // 头å |
| | | // null, // å·¥å· |
| | | // null, // æ§å« |
| | | // null, // ææºå· |
| | | // null, // é®ç®± |
| | | // null, // é®ç®±éªè¯ |
| | | // null, // æå±é¨é¨ |
| | | // null, // çå®å§å |
| | | // null, // 身份è¯å· |
| | | // null, // åºçæ¥æ |
| | | // null, // 个人ç®ä» |
| | | // null, // æå±æºæ |
| | | // null, // ç¶æ |
| | | // null, // æ¯å¦å é¤ |
| | | // null, // æ·»å æ¶é´ |
| | | // null, // æ·»å 人å |
| | | // null, // ä¿®æ¹æ¶é´ |
| | | // null, // ä¿®æ¹äººå |
| | | // null // 夿³¨ |
| | | // ); |
| | | |
| | | public String getSex$(){ |
| | | if (null == this.sex){ return null; } |
| | | switch (this.sex){ |
| | | case 0: |
| | | return "æªç¥"; |
| | | case 1: |
| | | return "ç·"; |
| | | case 2: |
| | | return "女"; |
| | | default: |
| | | return String.valueOf(this.sex); |
| | | } |
| | | } |
| | | |
| | | public String getEmailVerified$(){ |
| | | if (null == this.emailVerified){ return null; } |
| | | switch (this.emailVerified){ |
| | | case 0: |
| | | return "å¦"; |
| | | case 1: |
| | | return "æ¯"; |
| | | default: |
| | | return String.valueOf(this.emailVerified); |
| | | } |
| | | } |
| | | |
| | | public String getDeptId$(){ |
| | | DeptService service = SpringUtils.getBean(DeptService.class); |
| | | Dept dept = service.getById(this.deptId); |
| | | if (!Cools.isEmpty(dept)){ |
| | | return String.valueOf(dept.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | | Host host = service.getById(this.hostId); |
| | | if (!Cools.isEmpty(host)){ |
| | | return String.valueOf(host.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getStatus$(){ |
| | | if (null == this.status){ return null; } |
| | | switch (this.status){ |
| | | case 1: |
| | | return "æ£å¸¸"; |
| | | case 0: |
| | | return "ç¦ç¨"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | | } |
| | | |
| | | public String getDeleted$(){ |
| | | if (null == this.deleted){ return null; } |
| | | switch (this.deleted){ |
| | | case 1: |
| | | return "æ¯"; |
| | | case 0: |
| | | return "å¦"; |
| | | default: |
| | | return String.valueOf(this.deleted); |
| | | } |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | public String getCreateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.createBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getUpdateTime$(){ |
| | | if (Cools.isEmpty(this.updateTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); |
| | | } |
| | | |
| | | public String getUpdateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.updateBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public Long[] getRoleIds() { |
| | | return this.roleIds; |
| | | } |
| | | |
| | | public Long[] getUserRoleIds() { |
| | | UserRoleService service = SpringUtils.getBean(UserRoleService.class); |
| | | List<UserRole> list = service.list(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, this.id)); |
| | | return list.stream().map(UserRole::getRoleId).toArray(Long[]::new); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isAccountNonExpired() { |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isAccountNonLocked() { |
| | | return this.status != null && this.status == 1; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isCredentialsNonExpired() { |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isEnabled() { |
| | | return true; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @TableName("sys_user_login") |
| | | public class UserLogin implements Serializable { |
| | | |
| | | public static final int TYPE_LOGIN = 0; // ç»å½æå |
| | | public static final int TYPE_ERROR = 1; // ç»å½å¤±è´¥ |
| | | public static final int TYPE_LOGOUT = 2; // éåºç»å½ |
| | | public static final int TYPE_REFRESH = 3; // ç»ç¾token |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * ç¨æ· |
| | | */ |
| | | @ApiModelProperty(value= "ç¨æ·") |
| | | private Long userId; |
| | | |
| | | /** |
| | | * æå±æºæ |
| | | */ |
| | | @ApiModelProperty(value= "æå±æºæ") |
| | | private Long hostId; |
| | | |
| | | /** |
| | | * å¯é¥ |
| | | */ |
| | | @ApiModelProperty(value= "å¯é¥") |
| | | private String token; |
| | | |
| | | /** |
| | | * ç»å½ip |
| | | */ |
| | | @ApiModelProperty(value= "ç»å½ip") |
| | | private String ip; |
| | | |
| | | /** |
| | | * ç±»å |
| | | */ |
| | | @ApiModelProperty(value= "ç±»å") |
| | | private Integer type; |
| | | |
| | | |
| | | /** |
| | | * æ·»å æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value= "æ·»å æ¶é´") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * ç»å½ç³»ç» |
| | | */ |
| | | @ApiModelProperty(value= "ç»å½ç³»ç»") |
| | | private String system; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ApiModelProperty(value= "夿³¨") |
| | | private String memo; |
| | | |
| | | public String getUserId$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.userId); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | | Host host = service.getById(this.hostId); |
| | | if (!Cools.isEmpty(host)){ |
| | | return String.valueOf(host.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @TableName("sys_user_role") |
| | | public class UserRole implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | private Long userId; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | private Long roleId; |
| | | |
| | | public UserRole() {} |
| | | |
| | | public UserRole(Long userId,Long roleId) { |
| | | this.userId = userId; |
| | | this.roleId = roleId; |
| | | } |
| | | |
| | | // UserRole userRole = new UserRole( |
| | | // null, // [é空] |
| | | // null // [é空] |
| | | // ); |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.zy.asrs.wms.system.entity.Dept; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface DeptMapper extends BaseMapper<Dept> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.zy.asrs.wms.system.entity.Host; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface HostMapper extends BaseMapper<Host> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface MenuMapper extends BaseMapper<Menu> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.zy.asrs.wms.system.entity.OperationRecord; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface OperationRecordMapper extends BaseMapper<OperationRecord> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.zy.asrs.wms.system.entity.Role; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface RoleMapper extends BaseMapper<Role> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.zy.asrs.wms.system.entity.RoleMenu; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface RoleMenuMapper extends BaseMapper<RoleMenu> { |
| | | |
| | | @InterceptorIgnore(tenantLine = "true") |
| | | List<Menu> listMenuByUserId(@Param("userId") Long userId, @Param("type") Integer menuType); |
| | | |
| | | List<Long> listStrictlyMenuByRoleId(@Param("roleId") Long roleId); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.zy.asrs.wms.system.entity.UserLogin; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface UserLoginMapper extends BaseMapper<UserLogin> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface UserMapper extends BaseMapper<User> { |
| | | |
| | | List<User> selectPageRel(@Param("page") IPage<User> page, @Param("param") Map<String, Object> param); |
| | | |
| | | @InterceptorIgnore(tenantLine = "true") |
| | | User selectByUsername(@Param("username") String username, @Param("hostId") Long hostId); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.zy.asrs.wms.system.entity.Role; |
| | | import com.zy.asrs.wms.system.entity.UserRole; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface UserRoleMapper extends BaseMapper<UserRole> { |
| | | |
| | | List<Role> selectByUserId(@Param("userId") Long userId); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.Dept; |
| | | |
| | | public interface DeptService extends IService<Dept> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.Host; |
| | | |
| | | public interface HostService extends IService<Host> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | |
| | | public interface MenuService extends IService<Menu> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.OperationRecord; |
| | | |
| | | public interface OperationRecordService extends IService<OperationRecord> { |
| | | |
| | | void saveAsync(OperationRecord operationRecord); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.zy.asrs.wms.system.entity.RoleMenu; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface RoleMenuService extends IService<RoleMenu> { |
| | | |
| | | List<Menu> listMenuByUserId(Long userId, Integer menuType); |
| | | |
| | | List<Long> listStrictlyMenuByRoleId(Long roleId); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.Role; |
| | | |
| | | public interface RoleService extends IService<Role> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.UserLogin; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | public interface UserLoginService extends IService<UserLogin> { |
| | | |
| | | void saveAsync(Long userId, String token, Integer type, Long hostId, String memo, HttpServletRequest request); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.system.entity.Role; |
| | | import com.zy.asrs.wms.system.entity.UserRole; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface UserRoleService extends IService<UserRole> { |
| | | |
| | | List<Role> listByUserId(Long userId); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.common.domain.PageResult; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | |
| | | public interface UserService extends IService<User> { |
| | | |
| | | PageResult<User> pageRel(PageParam<User, BaseParam> pageParam); |
| | | |
| | | User getByUsername(String username, Long hostId); |
| | | |
| | | User getByIdRel(Long userId); |
| | | |
| | | boolean comparePassword(String dbPassword, String inputPassword); |
| | | |
| | | String encodePassword(String password); |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.zy.asrs.wms.system.mapper.DeptMapper; |
| | | import com.zy.asrs.wms.system.entity.Dept; |
| | | import com.zy.asrs.wms.system.service.DeptService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service("deptService") |
| | | public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.zy.asrs.wms.system.mapper.HostMapper; |
| | | import com.zy.asrs.wms.system.entity.Host; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service("hostService") |
| | | public class HostServiceImpl extends ServiceImpl<HostMapper, Host> implements HostService { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.zy.asrs.wms.system.mapper.MenuMapper; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.zy.asrs.wms.system.service.MenuService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service("menuService") |
| | | public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.zy.asrs.wms.system.mapper.OperationRecordMapper; |
| | | import com.zy.asrs.wms.system.entity.OperationRecord; |
| | | import com.zy.asrs.wms.system.service.OperationRecordService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service("operationRecordService") |
| | | public class OperationRecordServiceImpl extends ServiceImpl<OperationRecordMapper, OperationRecord> implements OperationRecordService { |
| | | |
| | | @Async |
| | | @Override |
| | | public void saveAsync(OperationRecord operationRecord) { |
| | | baseMapper.insert(operationRecord); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.zy.asrs.wms.system.entity.Menu; |
| | | import com.zy.asrs.wms.system.entity.RoleMenu; |
| | | import com.zy.asrs.wms.system.mapper.RoleMenuMapper; |
| | | import com.zy.asrs.wms.system.service.RoleMenuService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Service("roleMenuService") |
| | | public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService { |
| | | |
| | | @Override |
| | | public List<Menu> listMenuByUserId(Long userId, Integer menuType) { |
| | | return baseMapper.listMenuByUserId(userId, menuType); |
| | | } |
| | | |
| | | @Override |
| | | public List<Long> listStrictlyMenuByRoleId(Long roleId) { |
| | | return baseMapper.listStrictlyMenuByRoleId(roleId); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.zy.asrs.wms.system.mapper.RoleMapper; |
| | | import com.zy.asrs.wms.system.entity.Role; |
| | | import com.zy.asrs.wms.system.service.RoleService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service("roleService") |
| | | public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.zy.asrs.common.utils.IpTools; |
| | | import com.zy.asrs.wms.system.mapper.UserLoginMapper; |
| | | import com.zy.asrs.wms.system.entity.UserLogin; |
| | | import com.zy.asrs.wms.system.service.UserLoginService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | @Service("userLoginService") |
| | | public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin> implements UserLoginService { |
| | | |
| | | @Async |
| | | @Override |
| | | public void saveAsync(Long userId, String token, Integer type, Long hostId, String memo, HttpServletRequest request) { |
| | | if (userId == null) { |
| | | return; |
| | | } |
| | | UserLogin userLogin = new UserLogin(); |
| | | userLogin.setUserId(userId); |
| | | userLogin.setToken(token); |
| | | userLogin.setType(type); |
| | | userLogin.setIp(IpTools.gainRealIp(request)); |
| | | userLogin.setMemo(memo); |
| | | baseMapper.insert(userLogin); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.zy.asrs.wms.system.entity.Role; |
| | | import com.zy.asrs.wms.system.entity.UserRole; |
| | | import com.zy.asrs.wms.system.mapper.UserRoleMapper; |
| | | import com.zy.asrs.wms.system.service.UserRoleService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Service("userRoleService") |
| | | public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService { |
| | | |
| | | @Override |
| | | public List<Role> listByUserId(Long userId) { |
| | | return baseMapper.selectByUserId(userId); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.system.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.common.domain.PageResult; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import com.zy.asrs.wms.system.mapper.UserMapper; |
| | | import com.zy.asrs.wms.system.service.RoleMenuService; |
| | | import com.zy.asrs.wms.system.service.UserRoleService; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | @Service("userService") |
| | | public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { |
| | | |
| | | @Resource |
| | | private UserRoleService userRoleService; |
| | | @Resource |
| | | private RoleMenuService roleMenuService; |
| | | @Resource |
| | | private BCryptPasswordEncoder bCryptPasswordEncoder; |
| | | |
| | | @Override |
| | | public PageResult<User> pageRel(PageParam<User, BaseParam> pageParam) { |
| | | return new PageResult<>(this.baseMapper.selectPageRel(pageParam, pageParam.pickOutMap(true)), pageParam.getTotal()); |
| | | } |
| | | |
| | | @Override |
| | | public User getByUsername(String username, Long hostId) { |
| | | if (Cools.isEmpty(username)) { |
| | | return null; |
| | | } |
| | | User user = baseMapper.selectByUsername(username, hostId); |
| | | if (user != null) { |
| | | user.setRoles(userRoleService.listByUserId(user.getId())); |
| | | user.setAuthorities(roleMenuService.listMenuByUserId(user.getId(), null)); |
| | | } |
| | | return user; |
| | | } |
| | | |
| | | @Override |
| | | public User getByIdRel(Long userId) { |
| | | User user = this.getById(userId); |
| | | if (user != null) { |
| | | user.setRoles(userRoleService.listByUserId(user.getId())); |
| | | user.setAuthorities(roleMenuService.listMenuByUserId(user.getId(), null)); |
| | | } |
| | | return user; |
| | | } |
| | | |
| | | @Override |
| | | public boolean comparePassword(String dbPassword, String inputPassword) { |
| | | return bCryptPasswordEncoder.matches(inputPassword, dbPassword); |
| | | } |
| | | |
| | | @Override |
| | | public String encodePassword(String password) { |
| | | return password == null ? null : bCryptPasswordEncoder.encode(password); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | |
| | | import com.zy.asrs.framework.generators.CoolGenerator; |
| | | import com.zy.asrs.framework.generators.BetterGenerator; |
| | | import com.zy.asrs.framework.generators.constant.SqlOsType; |
| | | |
| | | /** |
| | |
| | | public class CodeBuilder { |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | CoolGenerator generator = new CoolGenerator(); |
| | | // mysql |
| | | // generator.url="localhost:3306/cool"; |
| | | // generator.username="root"; |
| | | // generator.password="xltys1995"; |
| | | // generator.table="sys_host"; |
| | | // sqlserver |
| | | generator.sqlOsType = SqlOsType.SQL_SERVER; |
| | | generator.backendPrefixPath = "zy-asrs-common/"; |
| | | generator.frontendPrefixPath = "zy-asrs-wms/"; |
| | | BetterGenerator generator = new BetterGenerator(); |
| | | generator.backendPrefixPath = "zy-asrs-wms/"; |
| | | generator.frontendPrefixPath = "zy-asrs-flow/"; |
| | | |
| | | generator.url="47.97.1.152:51433;databasename=jkasrs"; |
| | | generator.username="sa"; |
| | | generator.password="Zoneyung@zy56$"; |
| | | generator.table="wms_loc_main"; |
| | | generator.packagePath="com.zy.asrs.common.wms"; |
| | | // generator.js = false; |
| | | // generator.html = false; |
| | | // generator.sql = false; |
| | | // generator.controller = false; |
| | | generator.sqlOsType = SqlOsType.MYSQL; |
| | | generator.url="localhost:3306/asrs"; |
| | | generator.username="root"; |
| | | generator.password="xltys1995"; |
| | | // generator.url="47.97.1.152:51433;databasename=jkasrs"; |
| | | // generator.username="sa"; |
| | | // generator.password="Zoneyung@zy56$"; |
| | | |
| | | generator.table="sys_operation_record"; |
| | | generator.tableName="æä½æ¥å¿"; |
| | | generator.packagePath="com.zy.asrs.wms.system"; |
| | | |
| | | generator.build(); |
| | | } |
| | | |
| New file |
| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.apache.poi.hssf.usermodel.HSSFWorkbook; |
| | | import org.apache.poi.ss.usermodel.Row; |
| | | import org.apache.poi.ss.usermodel.Sheet; |
| | | import org.apache.poi.ss.usermodel.Workbook; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.lang.reflect.Field; |
| | | import java.lang.reflect.Modifier; |
| | | import java.net.URLEncoder; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Created by vincent on 2/17/2024 |
| | | */ |
| | | public class ExcelUtil { |
| | | |
| | | public static void build(Workbook workbook, HttpServletResponse response) { |
| | | response.reset(); |
| | | Utils.cors(response); |
| | | response.setContentType("application/octet-stream; charset=utf-8"); |
| | | try { |
| | | response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export", "UTF-8")); |
| | | workbook.write(response.getOutputStream()); |
| | | } catch (IOException ignore) {} |
| | | } |
| | | |
| | | public static <T> Workbook create(List<T> list, Class<T> clz) { |
| | | HSSFWorkbook workbook = new HSSFWorkbook(); |
| | | Sheet sheet = workbook.createSheet(clz.getSimpleName()); |
| | | |
| | | Row header = sheet.createRow(0); |
| | | Field[] fields = Cools.getAllFields(clz); |
| | | int headerIdx = 0; |
| | | for (Field field : fields) { |
| | | if (Modifier.isFinal(field.getModifiers()) |
| | | || Modifier.isStatic(field.getModifiers()) |
| | | || Modifier.isTransient(field.getModifiers())) { |
| | | continue; |
| | | } |
| | | String memo = "æªç¥"; |
| | | if (field.isAnnotationPresent(ApiModelProperty.class)) { |
| | | memo = field.getAnnotation(ApiModelProperty.class).value(); |
| | | } |
| | | header.createCell(headerIdx).setCellValue(memo); |
| | | headerIdx++; |
| | | } |
| | | |
| | | int rowIndex = 1; |
| | | for (T t : list) { |
| | | Row row = sheet.createRow(rowIndex++); |
| | | |
| | | int cellIndex = 0; |
| | | for (Field field : fields) { |
| | | if (Modifier.isFinal(field.getModifiers()) |
| | | || Modifier.isStatic(field.getModifiers()) |
| | | || Modifier.isTransient(field.getModifiers())) { |
| | | continue; |
| | | } |
| | | |
| | | field.setAccessible(true); // æ¤è¡å¾éè¦ï¼ç¹å«æ¯å段为privateæ¶ |
| | | Object value = null; |
| | | try { |
| | | value = field.get(t); |
| | | } catch (IllegalAccessException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | if (value != null) { |
| | | if (value instanceof Date) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | row.createCell(cellIndex).setCellValue(sdf.format((Date) value)); |
| | | } else { |
| | | row.createCell(cellIndex).setCellValue(value.toString()); |
| | | } |
| | | } |
| | | cellIndex++; |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i <= fields.length; i++) { |
| | | sheet.autoSizeColumn(i); |
| | | } |
| | | |
| | | return workbook; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.asrs.framework.common.R; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.io.PrintWriter; |
| | | |
| | | /** |
| | | * Created by vincent on 1/29/2024 |
| | | */ |
| | | public class HttpUtils { |
| | | |
| | | public static void responseError(HttpServletResponse response, Integer code, String message, String error) { |
| | | response.setContentType("application/json;charset=UTF-8"); |
| | | try { |
| | | PrintWriter out = response.getWriter(); |
| | | out.write(JSON.toJSONString(R.parse(code + "-" + message))); |
| | | out.flush(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | import com.zy.asrs.wms.common.security.JwtSubject; |
| | | import io.jsonwebtoken.Claims; |
| | | import io.jsonwebtoken.Jwts; |
| | | import io.jsonwebtoken.SignatureAlgorithm; |
| | | import io.jsonwebtoken.io.Decoders; |
| | | import io.jsonwebtoken.io.Encoders; |
| | | import io.jsonwebtoken.security.Keys; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.security.Key; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * JWTå·¥å
·ç±» |
| | | * |
| | | * @author vincent |
| | | * @since 2018-01-21 16:30:59 |
| | | */ |
| | | public class JwtUtil { |
| | | |
| | | /** |
| | | * è·å请æ±ä¸çaccess_token |
| | | * |
| | | * @param request HttpServletRequest |
| | | * @return String |
| | | */ |
| | | public static String getAccessToken(HttpServletRequest request) { |
| | | String access_token = request.getHeader(Constants.TOKEN_HEADER_NAME); |
| | | if (!Cools.isEmpty(access_token)) { |
| | | if (access_token.startsWith(Constants.TOKEN_TYPE)) { |
| | | access_token = Utils.removePrefix(access_token, Constants.TOKEN_TYPE).trim(); |
| | | } |
| | | } else { |
| | | access_token = request.getParameter(Constants.TOKEN_PARAM_NAME); |
| | | } |
| | | return access_token; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * çætoken |
| | | * |
| | | * @param subject è½½ä½ |
| | | * @param expire è¿ææ¶é´ |
| | | * @param base64EncodedKey base64ç¼ç çKey |
| | | * @return token |
| | | */ |
| | | public static String buildToken(JwtSubject subject, Long expire, String base64EncodedKey) { |
| | | return buildToken(JSON.toJSONString(subject), expire, decodeKey(base64EncodedKey)); |
| | | } |
| | | |
| | | /** |
| | | * çætoken |
| | | * |
| | | * @param subject è½½ä½ |
| | | * @param expire è¿ææ¶é´ |
| | | * @param key å¯é¥ |
| | | * @return token |
| | | */ |
| | | public static String buildToken(String subject, Long expire, Key key) { |
| | | Date expireDate = new Date(new Date().getTime() + 1000 * expire); |
| | | return Jwts.builder() |
| | | .setSubject(subject) |
| | | .setExpiration(expireDate) |
| | | .setIssuedAt(new Date()) |
| | | .signWith(key) |
| | | .compact(); |
| | | } |
| | | |
| | | /** |
| | | * è§£ætoken |
| | | * |
| | | * @param token token |
| | | * @param base64EncodedKey base64ç¼ç çKey |
| | | * @return Claims |
| | | */ |
| | | public static Claims parseToken(String token, String base64EncodedKey) { |
| | | return parseToken(token, decodeKey(base64EncodedKey)); |
| | | } |
| | | |
| | | /** |
| | | * è§£ætoken |
| | | * |
| | | * @param token token |
| | | * @param key å¯é¥ |
| | | * @return Claims |
| | | */ |
| | | public static Claims parseToken(String token, Key key) { |
| | | return Jwts.parserBuilder() |
| | | .setSigningKey(key) |
| | | .build() |
| | | .parseClaimsJws(token) |
| | | .getBody(); |
| | | } |
| | | |
| | | /** |
| | | * è·åJwtSubject |
| | | * |
| | | * @param claims Claims |
| | | * @return JwtSubject |
| | | */ |
| | | public static JwtSubject getJwtSubject(Claims claims) { |
| | | return JSON.parseObject(claims.getSubject(), JwtSubject.class); |
| | | } |
| | | |
| | | /** |
| | | * çæKey |
| | | * |
| | | * @return Key |
| | | */ |
| | | public static Key randomKey() { |
| | | return Keys.secretKeyFor(SignatureAlgorithm.HS256); |
| | | } |
| | | |
| | | /** |
| | | * base64ç¼ç key |
| | | * |
| | | * @return String |
| | | */ |
| | | public static String encodeKey(Key key) { |
| | | return Encoders.BASE64.encode(key.getEncoded()); |
| | | } |
| | | |
| | | /** |
| | | * base64ç¼ç Key |
| | | * |
| | | * @param base64EncodedKey base64ç¼ç çkey |
| | | * @return Key |
| | | */ |
| | | public static Key decodeKey(String base64EncodedKey) { |
| | | if (Cools.isEmpty(base64EncodedKey)) { |
| | | return null; |
| | | } |
| | | return Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64EncodedKey)); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.function.Function; |
| | | |
| | | /** |
| | | * Created by vincent on 2021/1/19 |
| | | */ |
| | | public class NodeUtils { |
| | | |
| | | public StringBuilder path = new StringBuilder(); |
| | | |
| | | public StringBuilder pathName = new StringBuilder(); |
| | | |
| | | public interface NodeSupport<T> { |
| | | T query(T t); |
| | | } |
| | | |
| | | public <T, R extends Serializable> void generatePath0( |
| | | NodeSupport<T> support |
| | | , T t |
| | | , Function<? super T, ? extends Long> idMapper |
| | | , Function<? super T, ? extends String> nameMapper |
| | | , Function<? super T, ? extends Long> parentIdMapper) { |
| | | T parent = support.query(t); |
| | | if (null != parent) { |
| | | path.insert(0, idMapper.apply(parent)).insert(0,","); |
| | | pathName.insert(0, nameMapper.apply(parent)).insert(0,","); |
| | | if (parentIdMapper.apply(parent) != null && parentIdMapper.apply(parent) != 0) { |
| | | generatePath0(support, parent, idMapper, nameMapper, parentIdMapper); |
| | | } else { |
| | | path.deleteCharAt(0); |
| | | pathName.deleteCharAt(0); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.function.BiConsumer; |
| | | import java.util.function.Function; |
| | | |
| | | /** |
| | | * Created by vincent on 2023/3/14 |
| | | */ |
| | | public class Utils { |
| | | |
| | | /** |
| | | * List转为æ å½¢ç»æ |
| | | * |
| | | * @param data List |
| | | * @param parentId 顶级çparentId |
| | | * @param parentIdMapper è·åparentIdçFunction |
| | | * @param idMapper è·åidçFunction |
| | | * @param consumer èµå¼childrençConsumer |
| | | * @param <T> æ°æ®çç±»å |
| | | * @param <R> parentIdçç±»å |
| | | * @return List<T> |
| | | */ |
| | | public static <T, R> List<T> toTreeData(List<T> data, |
| | | R parentId, |
| | | Function<? super T, ? extends R> parentIdMapper, |
| | | Function<? super T, ? extends R> idMapper, |
| | | BiConsumer<T, List<T>> consumer) { |
| | | List<T> result = new ArrayList<>(); |
| | | for (T d : data) { |
| | | R dParentId = parentIdMapper.apply(d); |
| | | if (parentId.equals(dParentId)) { |
| | | R dId = idMapper.apply(d); |
| | | List<T> children = toTreeData(data, dId, parentIdMapper, idMapper, consumer); |
| | | if(children.size() > 0) { |
| | | consumer.accept(d, children); |
| | | } |
| | | result.add(d); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | // public static <T> List<T> treeRemove(List<T> data, String condition, |
| | | // Function<? super T, ? extends String> fetcher, |
| | | // Function<T, List<T>> childrenGetter, |
| | | // BiConsumer<T, List<T>> childrenSetter) { |
| | | // List<T> result = new ArrayList<>(); |
| | | // for (T node : data) { |
| | | // List<T> children = childrenGetter.apply(node); |
| | | // |
| | | // if (children != null && !children.isEmpty()) { |
| | | // List<T> newChildren = treeRemove(children, condition, fetcher, childrenGetter, childrenSetter); |
| | | // childrenSetter.accept(node, newChildren); |
| | | // } |
| | | // |
| | | // if (fetcher.apply(node).contains(condition)) { |
| | | // result.add(node); |
| | | // } |
| | | // } |
| | | // return result; |
| | | // } |
| | | |
| | | public static <T> void treeRemove(List<T> list, String condition, Function<? super T, ? extends String> fetcher, Function<T, List<T>> childrenGetter) { |
| | | Iterator<T> iterator = list.iterator(); |
| | | while (iterator.hasNext()) { |
| | | T next = iterator.next(); |
| | | List<T> children = childrenGetter.apply(next); |
| | | if (children != null && !children.isEmpty()) { |
| | | treeRemove(children, condition, fetcher, childrenGetter); |
| | | } else { |
| | | if (!fetcher.apply(next).contains(condition)) { |
| | | iterator.remove(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ°ç»ååº |
| | | * @param bytes |
| | | * @param <T> |
| | | */ |
| | | public static <T> byte[] reverse(byte[] bytes) { |
| | | if (bytes == null) return null; |
| | | for (int start = 0, end = bytes.length - 1; start < end; start++, end--) { |
| | | byte temp = bytes[end]; |
| | | bytes[end] = bytes[start]; |
| | | bytes[start] = temp; |
| | | } |
| | | return bytes; |
| | | } |
| | | |
| | | /** |
| | | * æªåæ°ç» |
| | | * @param bytes åæ°ç» |
| | | * @param pos å®ä½ï¼æªååå
å«å®ä½ç¹æ°æ®ï¼ |
| | | * @param len é¿åº¦ |
| | | * @return new arr |
| | | */ |
| | | public static byte[] slice(byte[] bytes, int pos, int len) { |
| | | if (bytes == null || bytes.length == 0 || len == 0) { |
| | | return new byte[0]; |
| | | } |
| | | if (pos + len > bytes.length) { |
| | | throw new RuntimeException("com.zy.acs.common.utils ArrayIndexOutOfBoundsException\n" + |
| | | "åæ°ç» bytes é¿åº¦ä¸º " + bytes.length + "ï¼æªåé¿åº¦è¶
è¿åæ°ç»ï¼"); |
| | | } |
| | | byte[] arr = new byte[len]; |
| | | System.arraycopy(bytes, pos, arr, 0, len); |
| | | return arr; |
| | | } |
| | | |
| | | public static byte[] sliceWithReverse(byte[] bytes, int pos, int len) { |
| | | byte[] slice = slice(bytes, pos, len); |
| | | reverse(slice); |
| | | return slice; |
| | | } |
| | | |
| | | public static byte[] merge(Object... objects) { |
| | | int len = 0; |
| | | for (Object object : objects) { |
| | | if (object instanceof byte[]) { |
| | | byte[] bytes = (byte[]) object; |
| | | len += bytes.length; |
| | | } |
| | | if (object instanceof Byte) { |
| | | len++; |
| | | } |
| | | } |
| | | byte[] arr = new byte[len]; |
| | | int idx = 0; |
| | | for (Object object : objects) { |
| | | if (object instanceof byte[]) { |
| | | byte[] bytes = (byte[]) object; |
| | | System.arraycopy(bytes, 0, arr, idx, bytes.length); |
| | | idx += bytes.length; |
| | | } |
| | | if (object instanceof Byte) { |
| | | byte[] bytes = new byte[] {(Byte) object}; |
| | | System.arraycopy(bytes, 0, arr, idx, bytes.length); |
| | | idx += bytes.length; |
| | | } |
| | | } |
| | | return arr; |
| | | } |
| | | |
| | | public static <T> String join(T[] array, String seq) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | if (array != null) { |
| | | for (int i = 0; i < array.length; i++) { |
| | | sb.append(array[i]); |
| | | if (i < array.length - 1) { |
| | | sb.append(seq); |
| | | } |
| | | } |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public static String zeroFill(String msg, Integer len) { |
| | | len = Optional.ofNullable(len).orElse(16); |
| | | if (msg.length() == len){ |
| | | return msg; |
| | | } else if (msg.length() > len){ |
| | | return msg.substring(0, 16); |
| | | } else { |
| | | StringBuilder msgBuilder = new StringBuilder(msg); |
| | | for (int i = 0; i<len-msg.length(); i++){ |
| | | msgBuilder.insert(0,"0"); |
| | | } |
| | | return msgBuilder.toString(); |
| | | } |
| | | } |
| | | |
| | | public static String removePrefix(String str, String prefix) { |
| | | if (!Cools.isEmpty(str) && !Cools.isEmpty(prefix)) { |
| | | if (str.startsWith(prefix)) { |
| | | return str.substring(prefix.length()); |
| | | } else { |
| | | return str; |
| | | } |
| | | } else { |
| | | return str; |
| | | } |
| | | } |
| | | |
| | | public static String removeSuffix(String str, String suffix) { |
| | | if (!Cools.isEmpty(str) && !Cools.isEmpty(suffix)) { |
| | | if (str.endsWith(suffix)) { |
| | | return str.substring(0, str.indexOf(suffix)); |
| | | } else { |
| | | return str; |
| | | } |
| | | } else { |
| | | return str; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 大驼峰 转 symbolå°é©¼å³° |
| | | */ |
| | | public static String toSymbolCase(String str, char symbol) { |
| | | if (str == null) { |
| | | return null; |
| | | } else { |
| | | int length = str.length(); |
| | | StringBuilder sb = new StringBuilder(); |
| | | |
| | | for(int i = 0; i < length; ++i) { |
| | | char c = str.charAt(i); |
| | | if (Character.isUpperCase(c)) { |
| | | Character preChar = i > 0 ? str.charAt(i - 1) : null; |
| | | Character nextChar = i < str.length() - 1 ? str.charAt(i + 1) : null; |
| | | if (null != preChar) { |
| | | if (symbol == preChar) { |
| | | if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } else if (Character.isLowerCase(preChar)) { |
| | | sb.append(symbol); |
| | | if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } else if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | sb.append(symbol); |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } else if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } |
| | | |
| | | sb.append(c); |
| | | } |
| | | |
| | | return sb.toString(); |
| | | } |
| | | } |
| | | |
| | | public static String toCamelCase(CharSequence name) { |
| | | if (null == name) { |
| | | return null; |
| | | } else { |
| | | String name2 = name.toString(); |
| | | if (name2.contains("_")) { |
| | | int length = name2.length(); |
| | | StringBuilder sb = new StringBuilder(length); |
| | | boolean upperCase = false; |
| | | |
| | | for(int i = 0; i < length; ++i) { |
| | | char c = name2.charAt(i); |
| | | if (c == '_') { |
| | | upperCase = true; |
| | | } else if (upperCase) { |
| | | sb.append(Character.toUpperCase(c)); |
| | | upperCase = false; |
| | | } else { |
| | | sb.append(Character.toLowerCase(c)); |
| | | } |
| | | } |
| | | |
| | | return sb.toString(); |
| | | } else { |
| | | return name2; |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static String sub(String str, Integer maxLen) { |
| | | if (str.length() > maxLen) { |
| | | return str.substring(0, maxLen); |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | public static String generateSeqNum(String lastSeqNum) { |
| | | if (Cools.isEmpty(lastSeqNum)) { |
| | | return zeroFill("1", 4); |
| | | } else { |
| | | int i = Integer.parseInt(lastSeqNum); |
| | | if (i >= 9999) { |
| | | return zeroFill("1", 4); |
| | | } else { |
| | | return zeroFill(String.valueOf(i+1), 4); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static void cors(HttpServletResponse response){ |
| | | // è·¨å设置 |
| | | response.setHeader("Access-Control-Max-Age", "3600"); |
| | | response.setHeader("Access-Control-Allow-Origin", "*"); |
| | | response.setHeader("Access-Control-Allow-Methods", "*"); |
| | | response.setHeader("Access-Control-Allow-Headers", "*"); |
| | | response.setHeader("Access-Control-Expose-Headers", Constants.TOKEN_HEADER_NAME); |
| | | } |
| | | |
| | | } |
| | |
| | | url: jdbc:mysql://127.0.0.1:3306/wms_dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai |
| | | username: root |
| | | password: root |
| | | # datasource: |
| | | # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver |
| | | # url: jdbc:sqlserver://localhost:1433;databasename=jmasrs |
| | | # url: jdbc:sqlserver://47.97.1.152:51433;databasename=jkasrs |
| | | # username: sa |
| | | # password: sa@123 |
| | | # password: Zoneyung@zy56$ |
| | | mvc: |
| | | static-path-pattern: /** |
| | | servlet: |
| | |
| | | |
| | | super: |
| | | pwd: xltys1995 |
| | | |
| | | config: |
| | | token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2 |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.DeptMapper"> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.HostMapper"> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.MenuMapper"> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.OperationRecordMapper"> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.RoleMapper"> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.RoleMenuMapper"> |
| | | |
| | | <select id="listMenuByUserId" resultType="com.zy.asrs.wms.system.entity.Menu"> |
| | | select * from sys_menu |
| | | where 1=1 |
| | | <if test="type != null"> |
| | | AND type = #{type} |
| | | </if> |
| | | and deleted = 0 |
| | | and id in ( |
| | | select menu_id from sys_role_menu |
| | | where role_id in ( |
| | | select sur.role_id from sys_user_role sur |
| | | left join sys_role sr on sur.role_id = sr.id |
| | | where 1=1 |
| | | and sur.user_id = #{userId} |
| | | and sr.deleted = 0 |
| | | ) |
| | | ) |
| | | order by sort |
| | | </select> |
| | | |
| | | <select id="listStrictlyMenuByRoleId" resultType="java.lang.Long"> |
| | | select sm.id |
| | | from sys_menu sm |
| | | left join sys_role_menu srm on sm.id = srm.menu_id |
| | | where 1=1 |
| | | and sm.deleted = 0 |
| | | and srm.role_id = #{roleId} |
| | | and sm.id not in ( |
| | | select sm.parent_id |
| | | from sys_menu sm |
| | | inner join sys_role_menu srm on sm.id = srm.menu_id |
| | | and srm.role_id = #{roleId} |
| | | ) |
| | | order by sm.sort |
| | | </select> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.UserLoginMapper"> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.UserMapper"> |
| | | |
| | | <!-- æ ¹æ®è´¦å·æ¥è¯¢ --> |
| | | <select id="selectByUsername" resultType="com.zy.asrs.wms.system.entity.User"> |
| | | select * from sys_user |
| | | where 1=1 |
| | | and deleted = 0 |
| | | and username = #{username} |
| | | <if test="hostId != null"> |
| | | AND host_id = #{hostId} |
| | | </if> |
| | | </select> |
| | | |
| | | <select id="selectPageRel" resultType="com.zy.asrs.wms.system.entity.User"> |
| | | select |
| | | su.* |
| | | from sys_user su |
| | | left join sys_dept sd on su.dept_id = sd.id |
| | | where 1=1 |
| | | and su.deleted = 0 |
| | | <if test="param.deptId != null"> |
| | | and (FIND_IN_SET(#{param.deptId}, sd.`path`) OR sd.`id` = #{param.deptId}) |
| | | </if> |
| | | <if test="param.username != null"> |
| | | and su.username like concat('%',#{param.username},'%') |
| | | </if> |
| | | <if test="param.nickname != null"> |
| | | and su.nickname like concat('%',#{param.nickname},'%') |
| | | </if> |
| | | <if test="param.phone != null"> |
| | | and su.phone like concat('%',#{param.phone},'%') |
| | | </if> |
| | | <if test="param.sex != null"> |
| | | and su.sex = #{param.sex} |
| | | </if> |
| | | <if test="param.status != null"> |
| | | and su.status = #{param.status} |
| | | </if> |
| | | <if test="param.condition != null"> |
| | | and ( |
| | | su.username like concat('%',#{param.condition},'%') |
| | | or su.nickname like concat('%',#{param.condition},'%') |
| | | or su.phone like concat('%',#{param.condition},'%') |
| | | ) |
| | | </if> |
| | | order by su.create_time |
| | | </select> |
| | | |
| | | </mapper> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.system.mapper.UserRoleMapper"> |
| | | |
| | | <select id="selectByUserId" resultType="com.zy.asrs.wms.system.entity.Role"> |
| | | select * |
| | | from sys_role |
| | | where 1=1 |
| | | and id in ( |
| | | select role_id |
| | | from sys_user_role |
| | | where user_id = #{userId} |
| | | ) |
| | | and deleted = 0 |
| | | </select> |
| | | </mapper> |
| | |
| | | /**, *::before, *::after {*/ |
| | | /* -webkit-box-sizing: border-box;*/ |
| | | /* box-sizing: border-box;*/ |
| | | /* margin: 0;*/ |
| | | /* padding: 0;*/ |
| | | /*}*/ |
| | | |
| | | /* ç»ä¸å¤ç */ |
| | | *, *::before, *::after { |
| | | -webkit-box-sizing: border-box; |
| | | box-sizing: border-box; |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | html { |
| | | line-height: 1.5; |
| | | font-size: 15px; |
| | | font-family: sans-serif; |
| | | height: 100%; |
| | | } |
| | | body { |
| | | background-color: #fff; |
| | | height: 100%; |
| | | } |
| | | |
| | | input::placeholder { |
| | | color: #b4b4b4; |
| | | } |
| | | input::-webkit-input-placeholder { /* WebKit browsers éé
è°·æ */ |
| | | color: #b4b4b4; |
| | | } |
| | | .layui-input input:-moz-placeholder { /* Mozilla Firefox 4 to 18 éé
ç«ç */ |
| | | color: #b4b4b4; |
| | | } |
| | | .layui-input input::-moz-placeholder { /* Mozilla Firefox 19+ éé
ç«ç */ |
| | | color: #b4b4b4; |
| | | } |
| | | .layui-input input:-ms-input-placeholder { /* Internet Explorer 10+ éé
ie*/ |
| | | color: #b4b4b4; |
| | | } |
| | | |
| | | /* layuiä¼å */ |
| | | .layui-form-label { |
| | | /*color: #595959;*/ |
| | | } |
| | | .layui-input:focus { |
| | | border-color: #007bff !important; |
| | | } |
| | | /*æç´¢æ */ |
| | | .layui-form.layui-card-header { |
| | | padding: 20px 0 5px 0; |
| | | height: auto; |
| | | } |
| | | #search-box { |
| | | margin-left: 10px; |
| | | z-index: 999; |
| | | position: relative; |
| | | padding: 30px 30px 10px 30px; |
| | | } |
| | | #search-box .layui-inline{ |
| | | margin-bottom: 10px; |
| | | margin-right: 5px; |
| | | } |
| | | #search-box .layui-input-inline { |
| | | width: 150px; |
| | | } |
| | | .layui-form-label{ |
| | | font-size: 100%; |
| | | padding: 13px 0 9px 5px; |
| | | text-align: right; |
| | | } |
| | | #data-search-btn { |
| | | display: inline-block; |
| | | margin: 8px 0 0 10px; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | #data-search-btn.layui-btn-container .layui-btn{ |
| | | margin-right: 20px; |
| | | } |
| | | |
| | | /*头工å
·æ */ |
| | | .layui-table-tool-temp { |
| | | padding-right: 70px; |
| | | } |
| | | .layui-btn .layui-icon { |
| | | margin: 1px 5px; |
| | | } |
| | | #btn-add{ |
| | | background: #007DDB |
| | | } |
| | | #btn-delete{ |
| | | background: #ff5722 |
| | | } |
| | | #btn-export{ |
| | | float: right; |
| | | } |
| | | |
| | | /*è¡¨æ ¼*/ |
| | | .layui-table thead th { |
| | | font-weight: bold; |
| | | text-align: center; |
| | | } |
| | | div .layui-table-tool .layui-table-tool-self .layui-inline[title='导åº']{ |
| | | display: none; |
| | | } |
| | | .layui-form.layui-border-box.layui-table-view{ |
| | | margin: 15px 0 35px 0; |
| | | width: 100%; |
| | | iframe { |
| | | border-width: 0; |
| | | } |
| | | .layui-table-box{ |
| | | padding-bottom: 10px; |
| | | } |
| | | /*.layui-table-body.layui-table-main{*/ |
| | | /* overflow: hidden;*/ |
| | | /*}*/ |
| | | .layui-table-page{ |
| | | border-width: 0; |
| | | } |
| | | .layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) { |
| | | background-color: #f9f9f9; |
| | | } |
| | | .layui-table-tool { |
| | | /*background-color: #fff;*/ |
| | | } |
| | | /* table ï¼æ¢è¡/详æ
ï¼æ¾ç¤ºæ§å¶ */ |
| | | /*.layui-table-cell {*/ |
| | | /*font-size:14px;*/ |
| | | /*padding:0 5px;*/ |
| | | /*height:auto;*/ |
| | | /*overflow:visible;*/ |
| | | /*text-overflow:inherit;*/ |
| | | /*white-space:normal;*/ |
| | | /*word-break: break-all;*/ |
| | | /*}*/ |
| | | /*.layui-table-grid-down {*/ |
| | | /*display: none;*/ |
| | | /*}*/ |
| | | |
| | | /*详æ
*/ |
| | | #detail .layui-form-label{ |
| | | white-space: nowrap; |
| | | font-size: 100%; |
| | | padding: 9px 0 9px 5px; |
| | | text-align: right; |
| | | /* å¸å± */ |
| | | .row::after, .row::before { |
| | | content: ""; |
| | | display: table; |
| | | clear: both; |
| | | } |
| | | #detail { |
| | | padding: 25px 0; |
| | | margin: 0 20px 0 30px; |
| | | } |
| | | #detail .layui-inline { |
| | | margin: 10px 15px 15px 0; |
| | | } |
| | | #detail .layui-input-inline { |
| | | margin-right: 40px; |
| | | margin-left: 95px; |
| | | display: block; |
| | | } |
| | | .layui-bg-gray { |
| | | margin-top: 40px; |
| | | } |
| | | #prompt { |
| | | margin-top: 20px; |
| | | width: 90%; |
| | | text-indent: 40px; |
| | | color: #505050; |
| | | } |
| | | #data-detail-btn { |
| | | padding-top: 25px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | #data-detail-btn.layui-btn-container .layui-btn{ |
| | | margin-right: 30px; |
| | | } |
| | | .not-null { |
| | | color:red; |
| | | } |
| | | |
| | | #detail .layui-form-checkbox { |
| | | top: 10px; |
| | | } |
| | | |
| | | /*å¾ç*/ |
| | | .cool-img { |
| | | cursor:pointer; |
| | | width: 200px; |
| | | height: 200px; |
| | | } |
| | | |
| | | /* |
| | | å¸å± |
| | | */ |
| | | .col:empty{min-height:32px;height: inherit;z-index:1;position:relative;box-sizing: border-box;} |
| | | .col:empty:after{ |
| | | z-index:0;display:flex;align-items: center;justify-content: center; |
| | | clear: both;content:attr(title);position:absolute; |
| | | background:rgba(0,0,0,0.04);top:2px;left:2px;right:2px;bottom:2px; |
| | | text-align:center;color:rgba(0,0,0,0.1); border-radius: inherit; |
| | | } |
| | | .col{ |
| | | .col-md3:empty { |
| | | background:rgba(0,0,0,0.04); |
| | | border: 1px solid rgba(0,0,0,.3); |
| | | min-height:32px; |
| | | height: inherit; |
| | | z-index:1; |
| | | } |
| | | |
| | | /*æé*/ |
| | | #btn-add { |
| | | display: none; |
| | | .col-md1,.col-md10,.col-md11,.col-md12,.col-md2,.col-md3,.col-md4,.col-md5,.col-md6,.col-md7,.col-md8,.col-md9{ |
| | | float:left; |
| | | } |
| | | .btn-edit { |
| | | display: none; |
| | | } |
| | | #btn-delete { |
| | | display: none; |
| | | } |
| | | #btn-export { |
| | | display: none; |
| | | } |
| | | #btn-into { |
| | | display: none; |
| | | } |
| | | |
| | | /*ä¿®æ¹å¤éæ¡é¢è²*/ |
| | | /*.layui-form-checked[lay-skin=primary] i {*/ |
| | | /*border-color: #4c95b8!important;*/ |
| | | /*background-color: #4c95b8;*/ |
| | | /*color: #fff;*/ |
| | | /*}*/ |
| | | /*.layui-form-checkbox[lay-skin=primary]:hover i {*/ |
| | | /*border-color: #4c95b8;*/ |
| | | /*color: #fff;*/ |
| | | /*}*/ |
| | | |
| | | /* åªä½æ¥è¯¢ ââ ååºå¸å± */ |
| | | /* åååºå¼å¸å±æ¶ï¼ä¸å»ºè®®ç¨åºå®å°ºå¯¸ï¼å°½éç¨% */ |
| | | @media only screen and (max-width: 800px) { |
| | | |
| | | } |
| | | .col-md1{width:8.33333333%} |
| | | .col-md2{width:16.66666667%} |
| | | .col-md3{width:25%} |
| | | .col-md4{width:33.33333333%} |
| | | .col-md5{width:41.66666667%} |
| | | .col-md6{width:50%} |
| | | .col-md7{width:58.33333333%} |
| | | .col-md8{width:66.66666667%} |
| | | .col-md9{width:75%} |
| | | .col-md10{width:83.33333333%} |
| | | .col-md11{width:91.66666667%} |
| | | .col-md12{width:100%} |
| | |
| | | body { |
| | | display : none; |
| | | * { |
| | | margin: 0; |
| | | overflow: hidden; |
| | | } |
| | | html,body { |
| | | height: 100%; |
| | | } |
| | | |
| | | /* ç¨æ·åè½æ */ |
| | | .layui-side.layui-bg-black.layui-side-menu::-webkit-scrollbar { |
| | | width: 0 !important |
| | | .sidebar { |
| | | width: 8%; |
| | | height: 40%; |
| | | line-height: 5.625em; |
| | | position: fixed; |
| | | top: 50%; |
| | | transform: translateY(-50%); |
| | | } |
| | | #person { |
| | | .nav ul { |
| | | font-size: 1.25em; |
| | | font-weight: 500; |
| | | padding-left: 5%; |
| | | } |
| | | .nav a { |
| | | position: relative; |
| | | z-index:2; |
| | | margin: 40px 0; |
| | | text-align: center |
| | | text-decoration: none; |
| | | margin-left: 0.625em; |
| | | font-weight: 500; |
| | | } |
| | | #person-username { |
| | | font-size: large; |
| | | top: 35px; |
| | | left: 70px; |
| | | .nav a:hover { |
| | | color: #fff; |
| | | } |
| | | .dropdown-list { |
| | | display: inline-block |
| | | /* Effect 4: bottom border enlarge */ |
| | | .cl-effect-4 a { |
| | | padding: 0 0 0.625em; |
| | | } |
| | | .dropdown-item { |
| | | background:transparent; |
| | | |
| | | .cl-effect-4 a::after { |
| | | position: absolute; |
| | | width: 100%; |
| | | left: 0; |
| | | } |
| | | #person:hover dd { |
| | | display: block; |
| | | } |
| | | #person:hover dt { |
| | | transform: rotate(180deg) translate(0, 4px); |
| | | } |
| | | /*å°ç®å¤´*/ |
| | | .dropdown-list dt { |
| | | border-left: 6px solid transparent; |
| | | border-right: 6px solid transparent; |
| | | border-top: 6px solid; |
| | | border-top-color: rgba(255,255,255,.7); |
| | | padding-top: 3px; |
| | | } |
| | | /*é项*/ |
| | | #person dd { |
| | | top: 100%; |
| | | left: 0; |
| | | width:100%; |
| | | position: absolute; |
| | | line-height: 32px; |
| | | display: none; |
| | | padding-top: 3px; |
| | | z-index:999; |
| | | width: 100%; |
| | | height: 0.0625em; |
| | | background: #fff; |
| | | content: ''; |
| | | opacity: 0; |
| | | -webkit-transition: height 0.3s, opacity 0.3s, -webkit-transform 0.3s; |
| | | -moz-transition: height 0.3s, opacity 0.3s, -moz-transform 0.3s; |
| | | transition: height 0.3s, opacity 0.3s, transform 0.3s; |
| | | -webkit-transform: translateY(-0.625em); |
| | | -moz-transform: translateY(-0.625em); |
| | | transform: translateY(-0.625em); |
| | | } |
| | | .dropdown-item ul { |
| | | width:80%; |
| | | margin:0 auto; |
| | | background:#222; |
| | | box-shadow: 0 0 5px rgba(200,200,200,0.03); |
| | | border-radius: 5px; |
| | | letter-spacing: 2px; |
| | | |
| | | .cl-effect-4 a:hover::after, |
| | | .cl-effect-4 a:focus::after { |
| | | height: 0.3125em; |
| | | opacity: 1; |
| | | -webkit-transform: translateY(0px); |
| | | -moz-transform: translateY(0px); |
| | | transform: translateY(0px); |
| | | } |
| | | .dropdown-item ul li a { |
| | | color:#555; |
| | | /* Effect 4: bottom border enlarge */ |
| | | /* .sidebar ul { |
| | | font-size: 20px; |
| | | font-weight: 500; |
| | | padding-left: 5%; |
| | | |
| | | } |
| | | .sidebar a { |
| | | text-decoration: none; |
| | | } |
| | | |
| | | .sidebar a:hover { |
| | | color: rgb(255, 148, 111); |
| | | } */ |
| | | |
| | | |
| | | |
| | | .nav-unselect { |
| | | color: #FFFFFF; |
| | | } |
| | | .nav-select { |
| | | font-weight: 900; |
| | | color: #fff; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /*ä¾§è¾¹èåæ */ |
| | | #cool-menu-tree li { |
| | | cursor:pointer; |
| | | } |
| | | .site-active { |
| | | text-indent: 1em; |
| | | } |
| | | |
| | | .layui-side.layui-bg-black.layui-side-menu { |
| | | position: absolute; |
| | | top: 0; |
| | | z-index: 1; |
| | | } |
| | | .layui-side-scroll { |
| | | height: auto; |
| | | } |
| | | |
| | | /* <!--å
容主ä½--> */ |
| | | .layui-tab-title { |
| | | box-sizing: border-box; |
| | | box-shadow: 0 1px 2px 0 rgba(0,0,0,.1); |
| | | } |
| | | .layui-layout-admin .layui-body { |
| | | position: absolute; |
| | | top: 0; |
| | | bottom: 0; |
| | | z-index: -1; |
| | | } |
| | | /*é项å¡*/ |
| | | .layui-body .layui-tab.layui-tab-card { |
| | | /* æ¶è®³ç¶ */ |
| | | iframe { |
| | | width: 100%; |
| | | height: 100%; |
| | | margin: 0; |
| | | border-width: 0; |
| | | } |
| | | /*é项塿 é¢*/ |
| | | .layui-tab-title { |
| | | border-bottom-width: 0px; |
| | | /* æ´æ¢å´ */ |
| | | footer { |
| | | /* border-top: 1px solid #e3e3e3; */ |
| | | position: fixed; |
| | | bottom: 0; |
| | | right: 0; |
| | | left: 0; |
| | | text-align: center; |
| | | font: 14px Helvetica Neue,Helvetica,PingFang SC,\5FAE\8F6F\96C5\9ED1,Tahoma,Arial,sans-serif; |
| | | box-shadow: 0 -1px 2px 0 rgba(0,0,0,.0); |
| | | box-sizing: border-box; |
| | | background-color: rgb(108,167,168); |
| | | z-index: 999; |
| | | height: 20px; |
| | | font-size: 13px; |
| | | line-height: 20px; |
| | | background-color: #f1f1f1; |
| | | opacity: .7; |
| | | } |
| | | /*é项å¡å
容*/ |
| | | .layui-tab-content { |
| | | position: absolute; |
| | | top: 40px; |
| | | bottom: 4px; |
| | | width: 100%; |
| | | padding: 0; |
| | | } |
| | | .layui-tab-item.layui-show { |
| | | height: 100%; |
| | | footer a { |
| | | color: #3573ab; |
| | | font-weight: bold; |
| | | text-decoration: none; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .site-active { |
| | | -moz-user-select:none;/*ç«ç*/ |
| | | -webkit-user-select:none;/*webkitæµè§å¨*/ |
| | | -ms-user-select:none;/*IE10*/ |
| | | -khtml-user-select:none;/*æ©ææµè§å¨*/ |
| | | user-select:none; |
| | | } |
| | | |
| | | |
| | |
| | | var baseUrl = "/wms"; |
| | | |
| | | // èµå¼ |
| | | function setVal(el, val) { |
| | | if (el.text() !== val){ |
| | | el.html(val); |
| | | } |
| | | } |
| | | |
| | | // 详æ
çªå£-é«åº¦ |
| | | var detailHeight = '80%'; |
| | | // 详æ
çªå£-宽度 |
| | |
| | | return typeof obj == "undefined" || obj == null || obj === ""; |
| | | } |
| | | |
| | | // let loadIndex = layer.msg('请æ±ä¸...', {icon: 16, shade: 0.01, time: false}); |
| | | // layer.close(loadIndex); |
| | | |
| | | // æ¶é´ ==>> å符串 |
| | | function dateToStr(date, millisecond) { |
| | | function dateToStr(date) { |
| | | var time = new Date(date); |
| | | var y = time.getFullYear(); |
| | | var M = time.getMonth() + 1; |
| | |
| | | m = m < 10 ? ("0" + m) : m; |
| | | var s = time.getSeconds(); |
| | | s = s < 10 ? ("0" + s) : s; |
| | | if (!millisecond) { |
| | | return y + "-" + M + "-" + d + " " + h + ":" + m + ":" + s; |
| | | } else { |
| | | var p = time.getMilliseconds(); |
| | | if (p < 10) { |
| | | p = "00" + p; |
| | | } |
| | | if (p < 100) { |
| | | p = "0" + p; |
| | | } |
| | | return y + "-" + M + "-" + d + " " + h + ":" + m + ":" + s + "," + p; |
| | | } |
| | | return y + "-" + M + "-" + d + " " + h + ":" + m + ":" + s; |
| | | } |
| | | |
| | | // å符串 ===>> æ¶é´ |
| | |
| | | } |
| | | var param = (child?parent.window:window).location.href.split("?")[1]; |
| | | if (null != param) { |
| | | var resourceId = getQueryVariable('resourceId') |
| | | if (resourceId == false) { |
| | | resourceId = param.split("=")[1]; |
| | | } |
| | | var resourceId = param.split("=")[1]; |
| | | $.ajax({ |
| | | url: baseUrl+"/power/menu/"+resourceId+"/auth", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | |
| | | (child?parent:window).$('.'+res.data[i].code).css("display", "inline-block"); |
| | | } |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | window.location.href = baseUrl; |
| | | } else { |
| | | layer.msg(res.msg) |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | // httpè¯·æ± |
| | |
| | | url: url, |
| | | data: data, |
| | | dataType: 'json', |
| | | header: {'token': localStorage.getItem('token')}, |
| | | header: {'Content-Type': 'application/json'}, |
| | | timeout: 10000, |
| | | cache: false, |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | callback(res); |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg); |
| | | } |
| | | success: function (result) { |
| | | callback(result); |
| | | }, |
| | | error: function (res, type) { |
| | | |
| | | } |
| | | }) |
| | | }, |
| | | // é»è®¤è¡¨å |
| | | post: function (url, param, callback, type) { |
| | | var headerType; |
| | | if (type === 'json') { |
| | |
| | | if (res.code === 200){ |
| | | callback(res); |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | parent.location.href = baseUrl+"/login"; |
| | | } else { |
| | | layer.msg(res.msg); |
| | | layer.msg(res.msg, {icon: 2}); |
| | | } |
| | | }, |
| | | error: function (res, type) { |
| | |
| | | }) |
| | | }, |
| | | }; |
| | | |
| | | |
| | | "function" == typeof define && define.amd ? define(function () { |
| | | return http |
| | | }) : "object" == typeof module && module.exports ? module.exports = http : n.http = http |
| | | }(this); |
| | | |
| | | /*************************************************************************************************************/ |
| | | /********************************************** ç©æä¸å¡æ½è±¡ ***************************************************/ |
| | | /*************************************************************************************************************/ |
| | | |
| | | function arrRemove(arr, key, val) { |
| | | for(var i=arr.length-1; i>=0; i--){ |
| | | if(arr[i][key] === val){ |
| | | arr.splice(i,1); |
| | | } |
| | | /** |
| | | * è·åurlé®å¼å¯¹ |
| | | */ |
| | | function getUrlVal(key) { |
| | | var reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)', 'i'); |
| | | var r = window.location.search.substr(1).match(reg); |
| | | if (r != null) { |
| | | return unescape(r[2]); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | var matCols = [ |
| | | {field: 'matnr', align: 'center',title: 'ååç¼å·', width: 180} |
| | | // {field: 'id', align: 'center',title: 'ID'} |
| | | // ,{field: 'uuid', align: 'center',title: 'ç¼å·'} |
| | | // ,{field: 'tagId$', align: 'center',title: 'æå±å½ç±»'} |
| | | ,{field: 'maktx', align: 'center',title: 'åååç§°', width: 200} |
| | | // ,{field: 'name', align: 'center',title: 'å«å'} |
| | | ,{field: 'specs', align: 'center',title: 'é
ç½®'} |
| | | ,{field: 'model', align: 'center',title: '代ç ', hide: false} |
| | | ,{field: 'color', align: 'center',title: 'é¢è²', hide: true} |
| | | ,{field: 'brand', align: 'center',title: 'åç', hide: true} |
| | | ,{field: 'unit', align: 'center',title: 'åä½', hide: true} |
| | | ,{field: 'price', align: 'center',title: 'åä»·', hide: true} |
| | | ,{field: 'sku', align: 'center',title: 'sku', hide: true} |
| | | ,{field: 'units', align: 'center',title: 'åä½é', hide: true} |
| | | ,{field: 'barcode', align: 'center',title: 'æ¡ç ', hide: true} |
| | | ,{field: 'origin', align: 'center',title: '产å°', hide: true} |
| | | ,{field: 'manu', align: 'center',title: 'åå®¶', hide: true} |
| | | ,{field: 'manuDate', align: 'center',title: 'çäº§æ¥æ', hide: true} |
| | | ,{field: 'itemNum', align: 'center',title: 'å项æ°', hide: true} |
| | | ,{field: 'safeQty', align: 'center',title: 'å®å
¨åºåé', hide: true} |
| | | ,{field: 'weight', align: 'center',title: 'åç®±åé', hide: false} |
| | | ,{field: 'length', align: 'center',title: 'åç®±æ¯é', hide: false} |
| | | ,{field: 'volume', align: 'center',title: 'åç®±ä½ç§¯', hide: false} |
| | | ,{field: 'threeCode', align: 'center',title: 'ç®±å尺寸', hide: false} |
| | | ,{field: 'supp', align: 'center',title: 'ä¾åºå', hide: true} |
| | | ,{field: 'suppCode', align: 'center',title: 'ä¾åºåç¼ç ', hide: true} |
| | | ,{field: 'beBatch$', align: 'center',title: 'æ¯å¦æ¹æ¬¡', hide: true} |
| | | ,{field: 'deadTime', align: 'center',title: 'ä¿è´¨æ', hide: true} |
| | | ,{field: 'deadWarn', align: 'center',title: 'é¢è¦å¤©æ°', hide: true} |
| | | ,{field: 'source$', align: 'center',title: 'å¶è´', hide: true} |
| | | ,{field: 'check$', align: 'center',title: 'è¦æ±æ£éª', hide: true} |
| | | ,{field: 'danger$', align: 'center',title: 'å±é©å', hide: true} |
| | | // ,{field: 'status$', align: 'center',title: 'ç¶æ'} |
| | | // ,{field: 'createBy$', align: 'center',title: 'æ·»å 人å'} |
| | | // ,{field: 'createTime$', align: 'center',title: 'æ·»å æ¶é´'} |
| | | ,{field: 'updateBy$', align: 'center',title: 'ä¿®æ¹äººå', hide: true} |
| | | ,{field: 'updateTime$', align: 'center',title: 'ä¿®æ¹æ¶é´', hide: true} |
| | | ,{field: 'memo', align: 'center',title: '夿³¨', hide: true} |
| | | ] |
| | | |
| | | var detlCols = [ |
| | | {field: 'matnr', align: 'center',title: 'ååç¼å·', sort:true} |
| | | ,{field: 'maktx', align: 'center',title: 'åååç§°', sort:true} |
| | | ,{field: 'orderNo', align: 'center',title: 'åæ®ç¼å·', hide: false} |
| | | ,{field: 'batch', align: 'center',title: 'åºåç ', width: 300, sort:true} |
| | | ,{field: 'anfme', align: 'center',title: 'æ°é'} |
| | | ,{field: 'zpallet', align: 'center',title: 'æçæ¡ç '} |
| | | |
| | | ,{field: 'specs', align: 'center',title: 'é
ç½®'} |
| | | ,{field: 'model', align: 'center',title: '代ç ', hide: false} |
| | | ,{field: 'color', align: 'center',title: 'é¢è²', hide: true} |
| | | ,{field: 'brand', align: 'center',title: 'åç', hide: true} |
| | | ,{field: 'unit', align: 'center',title: 'åä½', hide: true} |
| | | ,{field: 'price', align: 'center',title: 'åä»·', hide: true} |
| | | ,{field: 'sku', align: 'center',title: 'sku', hide: true} |
| | | ,{field: 'units', align: 'center',title: 'åä½é', hide: true} |
| | | ,{field: 'barcode', align: 'center',title: 'æ¡ç ', hide: true} |
| | | ,{field: 'origin', align: 'center',title: '产å°', hide: true} |
| | | ,{field: 'manu', align: 'center',title: 'åå®¶', hide: true} |
| | | ,{field: 'manuDate', align: 'center',title: 'çäº§æ¥æ', hide: true} |
| | | ,{field: 'itemNum', align: 'center',title: 'å项æ°', hide: true} |
| | | ,{field: 'safeQty', align: 'center',title: 'å®å
¨åºåé', hide: true} |
| | | ,{field: 'weight', align: 'center',title: 'åç®±åé', hide: false} |
| | | ,{field: 'length', align: 'center',title: 'åç®±æ¯é', hide: false} |
| | | ,{field: 'volume', align: 'center',title: 'åç®±ä½ç§¯', hide: false} |
| | | ,{field: 'threeCode', align: 'center',title: 'ç®±å尺寸', hide: false} |
| | | ,{field: 'supp', align: 'center',title: 'ä¾åºå', hide: true} |
| | | ,{field: 'suppCode', align: 'center',title: 'ä¾åºåç¼ç ', hide: true} |
| | | ,{field: 'beBatch$', align: 'center',title: 'æ¯å¦æ¹æ¬¡', hide: true} |
| | | ,{field: 'deadTime', align: 'center',title: 'ä¿è´¨æ', hide: true} |
| | | ,{field: 'deadWarn', align: 'center',title: 'é¢è¦å¤©æ°', hide: true} |
| | | ,{field: 'source$', align: 'center',title: 'å¶è´', hide: true} |
| | | ,{field: 'check$', align: 'center',title: 'è¦æ±æ£éª', hide: true} |
| | | ,{field: 'danger$', align: 'center',title: 'å±é©å', hide: true} |
| | | ] |
| | | |
| | | function getQueryVariable(variable) |
| | | { |
| | | var query = window.location.search.substring(1); |
| | | var vars = query.split("&"); |
| | | for (var i=0;i<vars.length;i++) { |
| | | var pair = vars[i].split("="); |
| | | if(pair[0] == variable){return pair[1];} |
| | | } |
| | | return(false); |
| | | function getDateFormat(value){ |
| | | var date = new Date();// è·åå½åæ¶é´ |
| | | date.setDate(date.getDate() + value);// è®¾ç½®å¤©æ° -1 天 |
| | | return date.Format("MM-dd"); |
| | | } |
| | | /** |
| | | * æ¥ææ ¼å¼å |
| | | */ |
| | | Date.prototype.Format = function (fmt) { |
| | | var o = { |
| | | "M+": this.getMonth() + 1, //æä»½ |
| | | "d+": this.getDate(), //æ¥ |
| | | "h+": this.getHours(), //å°æ¶ |
| | | "m+": this.getMinutes(), //å |
| | | "s+": this.getSeconds(), //ç§ |
| | | "q+": Math.floor((this.getMonth() + 3) / 3), //å£åº¦ |
| | | "S": this.getMilliseconds() //æ¯«ç§ |
| | | }; |
| | | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); |
| | | for (var k in o) |
| | | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); |
| | | return fmt; |
| | | } |
| | |
| | | } |
| | | selectDom.style.display='block'; |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | window.location.href = baseUrl; |
| | | } else { |
| | | layer.msg(res.msg) |
| | | } |
| | |
| | | return str; |
| | | } |
| | | |
| | | // 表å弿¸
空 |
| | | function clearFormVal(el) { |
| | | $(':input', el) |
| | | .val('') |
| | | .removeAttr('checked') |
| | | .removeAttr('selected'); |
| | | } |
| | | |
| | | var banMsg; |
| | | var tips; |
| | | // 䏻鮿 ¡éª |
| | |
| | | layer.close(tips); |
| | | banMsg = null; |
| | | } else if (res.code === 403) { |
| | | top.location.href = baseUrl+"/"; |
| | | window.location.href = baseUrl; |
| | | } else if (res.code === 407) { |
| | | banMsg = res.data + "ä¸å¯ç¨"; |
| | | tips = layer.tips( |
| | |
| | | /** layui-v2.5.8 MIT License By https://www.layui.com */ |
| | | .layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}a,body{color:#333}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-edge,hr{height:0;overflow:hidden}.layui-layout-body,.layui-side,.layui-side-scroll{overflow-x:hidden}.layui-edge,.layui-elip,hr{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:1.6;color:rgba(0,0,0,.85);font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{line-height:0;margin:10px 0;padding:0;border:none!important;border-bottom:1px solid #eee!important;clear:both;background:0 0}a{text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-btn,.layui-btn-group,.layui-edge{display:inline-block}.layui-edge{width:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-elip{text-overflow:ellipsis;white-space:nowrap}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-show-v{visibility:visible!important}.layui-hide-v{visibility:hidden!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=256);src:url(../font/iconfont.eot?v=256#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=256) format('woff2'),url(../font/iconfont.woff?v=256) format('woff'),url(../font/iconfont.ttf?v=256) format('truetype'),url(../font/iconfont.svg?v=256#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-share:before{content:"\e641"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-engine:before{content:"\e628"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-release:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-ok-circle:before{content:"\1005"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-table:before{content:"\e62d"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-edit:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-down:before{content:"\e61a"}.layui-icon-file:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-water:before{content:"\e636"}.layui-icon-username:before{content:"\e66f"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-up:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-date:before{content:"\e637"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-friends:before{content:"\e612"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-ok:before{content:"\e605"}.layui-icon-layer:before{content:"\e638"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-group:before{content:"\e613"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-link:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-log:before{content:"\e60e"}.layui-icon-key:before{content:"\e683"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-form:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-ios:before{content:"\e680"}.layui-icon-at:before{content:"\e687"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-addition:before{content:"\e624"}.layui-icon-home:before{content:"\e68e"}.layui-icon-time:before{content:"\e68d"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-voice:before{content:"\e688"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-logout:before{content:"\e682"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-next:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-android:before{content:"\e684"}.layui-icon-more:before{content:"\e65f"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-password:before{content:"\e673"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-service:before{content:"\e626"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-print:before{content:"\e66d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-export:before{content:"\e67d"}.layui-icon-rss:before{content:"\e808"}.layui-icon-slider:before{content:"\e714"}.layui-icon-email:before{content:"\e618"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-light:before{content:"\e748"}.layui-icon-gift:before{content:"\e627"}.layui-icon-mute:before{content:"\e685"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-music:before{content:"\e690"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px}.layui-side-scroll{position:relative;width:220px;height:100%}.layui-body{position:relative;left:200px;right:0;top:0;bottom:0;z-index:900;width:auto;box-sizing:border-box}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;right:0;background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:absolute;top:60px;padding-bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;z-index:990;height:44px;line-height:44px;padding:0 15px;box-shadow:-1px 0 4px rgb(0 0 0 / 12%);background-color:#FAFAFA}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px;box-shadow:0 1px 2px 0 rgb(0 0 0 / 15%)}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:"";display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:1.6;border-left:5px solid #5FB878;border-radius:0 2px 2px 0;background-color:#FAFAFA}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#eee}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#FAFAFA;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:1.6;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card-body,.layui-card-header,.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-panel,.layui-textarea{position:relative}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-form-select dl,.layui-panel{box-shadow:1px 1px 4px rgb(0 0 0 / 8%)}.layui-card:last-child{margin-bottom:0}.layui-card-header{height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-card-body{padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel{border-width:1px;border-style:solid;border-radius:2px;background-color:#fff;color:#666}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #eee;background-color:#fff}.layui-border,.layui-border-black,.layui-border-blue,.layui-border-cyan,.layui-border-green,.layui-border-orange,.layui-border-red{border-width:1px;border-style:solid}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#FAFAFA!important;color:#666!important}.layui-badge-rim,.layui-border,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-panel,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#eee}.layui-border{color:#666!important}.layui-border-red{border-color:#FF5722!important;color:#FF5722!important}.layui-border-orange{border-color:#FFB800!important;color:#FFB800!important}.layui-border-green{border-color:#009688!important;color:#009688!important}.layui-border-cyan{border-color:#2F4056!important;color:#2F4056!important}.layui-border-blue{border-color:#1E9FFF!important;color:#1E9FFF!important}.layui-border-black{border-color:#393D49!important;color:#393D49!important}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.6;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding-left:5px!important;padding-right:5px!important}.layui-text p{margin:10px 0}.layui-text p:first-child{margin-top:0}.layui-font-12{font-size:12px!important}.layui-font-14{font-size:14px!important}.layui-font-16{font-size:16px!important}.layui-font-18{font-size:18px!important}.layui-font-20{font-size:20px!important}.layui-font-red{color:#FF5722!important}.layui-font-orange{color:#FFB800!important}.layui-font-green{color:#009688!important}.layui-font-cyan{color:#2F4056!important}.layui-font-blue{color:#01AAED!important}.layui-font-black{color:#000!important}.layui-font-gray{color:#c2c2c2!important}.layui-btn{height:38px;line-height:38px;border:1px solid transparent;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{padding:0 2px;vertical-align:middle\9;vertical-align:bottom}.layui-btn-primary{border-color:#d2d2d2;background:0 0;color:#666}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border-color:#eee!important;background-color:#FBFBFB!important;color:#d2d2d2!important;cursor:not-allowed!important;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:12px!important}.layui-btn-group{vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#d2d2d2;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #d2d2d2}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;color:rgba(0,0,0,.85);border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#eee!important}.layui-input:focus,.layui-textarea:focus{border-color:#d2d2d2!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#F6F6F6;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disabled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2!important}.layui-checkbox-disabled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disabled,.layui-checkbox-disabled i{border-color:#eee!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disabled span{background-color:#eee!important}.layui-checkbox-disabled em{color:#d2d2d2!important}.layui-checkbox-disabled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio:hover *,.layui-form-radioed,.layui-form-radioed>i{color:#5FB878}.layui-radio-disabled>i{color:#eee!important}.layui-radio-disabled *{color:#c2c2c2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FAFAFA;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto!important;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #eee}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#eee;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #eee}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#FAFAFA}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#eee}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-menu li,.layui-menu-body-title a:hover,.layui-menu-body-title>.layui-icon:hover{transition:all .3s}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#F6F6F6}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:30px 15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#d2d2d2}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-colorpicker-alpha-slider,.layui-colorpicker-side-slider,.layui-menu,.layui-menu *,.layui-nav{box-sizing:border-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{max-width:200px;padding:0 10px;color:#999;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-btn-container .layui-upload-choose{padding-left:0}.layui-menu{position:relative;margin:5px 0;background-color:#fff}.layui-menu li,.layui-menu-body-title a{padding:5px 15px}.layui-menu li{position:relative;margin:1px 0;width:calc(100% + 1px);line-height:26px;color:rgba(0,0,0,.8);font-size:14px;white-space:nowrap;cursor:pointer}.layui-menu li:hover{background-color:#F6F6F6}.layui-menu-item-parent:hover>.layui-menu-body-panel{display:block;animation-name:layui-fadein;animation-duration:.3s;animation-fill-mode:both;animation-delay:.2s}.layui-menu-item-group .layui-menu-body-title,.layui-menu-item-parent .layui-menu-body-title{padding-right:25px}.layui-menu .layui-menu-item-divider:hover,.layui-menu .layui-menu-item-group:hover,.layui-menu .layui-menu-item-none:hover{background:0 0;cursor:default}.layui-menu .layui-menu-item-group>ul{margin:5px 0 -5px}.layui-menu .layui-menu-item-group>.layui-menu-body-title{color:rgba(0,0,0,.35);user-select:none}.layui-menu .layui-menu-item-none{color:rgba(0,0,0,.35);cursor:default;text-align:center}.layui-menu .layui-menu-item-divider{margin:5px 0;padding:0;height:0;line-height:0;border-bottom:1px solid #eee;overflow:hidden}.layui-menu .layui-menu-item-down:hover,.layui-menu .layui-menu-item-up:hover{cursor:pointer}.layui-menu .layui-menu-item-up>.layui-menu-body-title{color:rgba(0,0,0,.8)}.layui-menu .layui-menu-item-up>ul{visibility:hidden;height:0;overflow:hidden}.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon,.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon{color:rgba(0,0,0,1)}.layui-menu .layui-menu-item-down>ul{visibility:visible;height:auto}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}.layui-menu .layui-menu-item-checked,.layui-menu .layui-menu-item-checked2{background-color:#F6F6F6!important;color:#5FB878}.layui-menu .layui-menu-item-checked a,.layui-menu .layui-menu-item-checked2 a{color:#5FB878}.layui-menu .layui-menu-item-checked:after{position:absolute;right:0;top:0;bottom:0;border-right:3px solid #5FB878;content:""}.layui-menu-body-title{position:relative;overflow:hidden;text-overflow:ellipsis}.layui-menu-body-title a{display:block;margin:-5px -15px;color:rgba(0,0,0,.8)}.layui-menu-body-title>.layui-icon{position:absolute;right:0;top:0;font-size:14px}.layui-menu-body-title>.layui-icon-right{right:-1px}.layui-menu-body-panel{display:none;position:absolute;top:-7px;left:100%;z-index:1000;margin-left:13px;padding:5px 0}.layui-menu-body-panel:before{content:"";position:absolute;width:20px;left:-16px;top:0;bottom:0}.layui-menu-body-panel-left{left:auto;right:100%;margin:0 13px}.layui-menu-body-panel-left:before{left:auto;right:-16px}.layui-menu-lg li{line-height:32px}.layui-menu-lg .layui-menu-body-title a:hover,.layui-menu-lg li:hover{background:0 0;color:#5FB878}.layui-menu-lg li .layui-menu-body-panel{margin-left:14px}.layui-menu-lg li .layui-menu-body-panel-left{margin:0 15px}.layui-dropdown{position:absolute;left:-999999px;top:-999999px;z-index:66666666;margin:5px 0;min-width:100px}.layui-dropdown:before{content:"";position:absolute;width:100%;height:6px;left:0;top:-6px}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar{content:"";position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s;pointer-events:none}.layui-nav-bar{z-index:1000}.layui-nav[lay-bar=disabled] .layui-nav-bar{display:none}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{position:absolute;top:0;right:3px;left:auto!important;margin-top:0;font-size:12px;cursor:pointer;transition:all .2s;-webkit-transition:all .2s}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{transform:rotate(180deg)}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #eee;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#666;color:rgba(0,0,0,.8)}.layui-nav .layui-nav-child a:hover{background-color:#F6F6F6;color:rgba(0,0,0,.8)}.layui-nav-child dd{margin:1px 0;position:relative}.layui-nav-child dd.layui-this{background-color:#F6F6F6;color:#000}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-child-r{left:auto;right:0}.layui-nav-child-c{text-align:center}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:40px}.layui-nav-tree .layui-nav-item a{position:relative;height:40px;line-height:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item>a{padding-top:5px;padding-bottom:5px}.layui-nav-tree .layui-nav-more{right:15px}.layui-nav-tree .layui-nav-item>a .layui-nav-more{padding:5px 0}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-side .layui-nav-tree .layui-nav-bar{width:2px}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child dd{margin:0}.layui-nav-tree .layui-nav-child a{color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-itemed>.layui-nav-child{display:block;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block;padding:0 15px;margin:0 -15px}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:"";width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#eee;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:15px 0}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#FAFAFA}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:"";position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:first-child:before{display:block}.layui-timeline-item:last-child:before{display:none}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px;line-height:22px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-5px 6px 0}.layui-nav .layui-badge{margin-top:-10px}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#eee;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #eee;border-left-width:6px;background-color:#FAFAFA;color:#333;font-family:Courier New;font-size:12px}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#eee}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#eee;color:#d2d2d2}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#F6F6F6;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #eee;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;left:-999999px;top:-999999px;z-index:66666666;width:280px;margin:5px 0;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#eee;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:"";position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #eee;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-14px}.layui-slider-input-btn{position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #eee}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #eee}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:33px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:"";position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:"";position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:"";position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:both;animation-duration:.3s;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .2s;-webkit-transition:all .2s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,15px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,15px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@keyframes layui-down{0%{opacity:.3;transform:translate3d(0,-100%,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-down{animation-name:layui-down}@keyframes layui-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-downbit{animation-name:layui-downbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@keyframes layui-scalesmall{0%{opacity:.3;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall{animation-name:layui-scalesmall}@keyframes layui-scalesmall-spring{0%{opacity:.3;transform:scale(1.5)}80%{opacity:.8;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall-spring{animation-name:layui-scalesmall-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout} |
| | | |
| | | .layui-badge-blue { |
| | | color: #29a2ff; |
| | | background: rgba(219, 236, 252, 0.53); |
| | | border: 1px solid #8ac5ef; |
| | | } |
| | | .layui-badge-green { |
| | | color: #52c41a; |
| | | background: rgba(246, 255, 237, 0.59); |
| | | border: 1px solid #b7eb8f; |
| | | } |
| | | .layui-badge-gray { |
| | | color: #8c8c8c; |
| | | background: #fafafa; |
| | | border: 1px solid #ccc; |
| | | } |
| | | .layui-badge-red { |
| | | color: #f66868; |
| | | background: rgba(252, 242, 242, 0.56); |
| | | border: 1px solid #ffb0b0; |
| | | } |
| | | /** layui-v2.5.4 MIT License By https://www.layui.com */ |
| | | .layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-body,.layui-edge,.layui-elip{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-elip,.layui-form-checkbox span,.layui-form-pane .layui-form-label{text-overflow:ellipsis;white-space:nowrap}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-edge{display:inline-block;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=250);src:url(../font/iconfont.eot?v=250#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=250) format('woff2'),url(../font/iconfont.woff?v=250) format('woff'),url(../font/iconfont.ttf?v=250) format('truetype'),url(../font/iconfont.svg?v=250#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-share:before{content:"\e641"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-engine:before{content:"\e628"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-release:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-ok-circle:before{content:"\1005"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-table:before{content:"\e62d"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-edit:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-down:before{content:"\e61a"}.layui-icon-file:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-water:before{content:"\e636"}.layui-icon-username:before{content:"\e66f"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-up:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-date:before{content:"\e637"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-friends:before{content:"\e612"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-ok:before{content:"\e605"}.layui-icon-layer:before{content:"\e638"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-group:before{content:"\e613"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-link:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-log:before{content:"\e60e"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-form:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-home:before{content:"\e68e"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-voice:before{content:"\e688"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-next:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-more:before{content:"\e65f"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-password:before{content:"\e673"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-cols:before{content:"\e610"}.layui-icon-export:before{content:"\e67d"}.layui-icon-print:before{content:"\e66d"}.layui-icon-slider:before{content:"\e714"}.layui-icon-addition:before{content:"\e624"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-service:before{content:"\e626"}.layui-icon-transfer:before{content:"\e691"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:fixed;top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space3{margin:-1.5px}.layui-col-space3>*{padding:1.5px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space8{margin:-3.5px}.layui-col-space8>*{padding:3.5px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #E6E6E6;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-textarea{position:relative}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-badge-rim,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#e6e6e6}.layui-timeline-item:before,hr{background-color:#e6e6e6}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-sm i{font-size:16px!important}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disbaled,.layui-checkbox-disbaled i{border-color:#e2e2e2!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio>i:hover,.layui-form-radioed>i{color:#5FB878}.layui-radio-disbaled>i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#e6e6e6}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#f2f2f2}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:0 -1px 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#C9C9C9}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#e6e6e6}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#e6e6e6;color:#C9C9C9}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#f2f2f2;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:50%;right:3px;margin-top:-3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{margin-top:-9px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{position:relative;height:45px;line-height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{right:10px}.layui-nav-itemed>.layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-8px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #e6e6e6;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;z-index:66666666;width:280px;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#e2e2e2;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:'';position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #e6e6e6;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-15px}.layui-slider-input-btn{display:none;position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #d2d2d2}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #d2d2d2}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:34px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:'';position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:'';position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:'';position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .3s;-webkit-transition:all .3s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout} |
| | |
| | | /** layui-v2.5.4 MIT License By https://www.layui.com */ |
| | | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['<button class="layui-icon '+u+'" lay-type="sub">'+("updown"===n.anim?"":"")+"</button>",'<button class="layui-icon '+u+'" lay-type="add">'+("updown"===n.anim?"":"")+"</button>"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['<div class="'+c+'"><ul>',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("<li"+(n.index===e?' class="layui-this"':"")+"></li>")}),i.join("")}(),"</ul></div>"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a<n.index&&e.slide("sub",n.index-a)})},m.prototype.slide=function(e,i){var n=this,l=n.elemItem,u=n.config,c=u.index,m=u.elem.attr("lay-filter");n.haveSlide||("sub"===e?(n.subIndex(i),l.eq(u.index).addClass(d),setTimeout(function(){l.eq(c).addClass(r),l.eq(u.index).addClass(r)},50)):(n.addIndex(i),l.eq(u.index).addClass(s),setTimeout(function(){l.eq(c).addClass(o),l.eq(u.index).addClass(o)},50)),setTimeout(function(){l.removeClass(a+" "+d+" "+s+" "+o+" "+r),l.eq(u.index).addClass(a),n.haveSlide=!1},300),n.elemInd.find("li").eq(u.index).addClass(a).siblings().removeClass(a),n.haveSlide=!0,layui.event.call(this,t,"change("+m+")",{index:u.index,prevIndex:c,item:l.eq(u.index)}))},m.prototype.events=function(){var e=this,i=e.config;i.elem.data("haveEvents")||(i.elem.on("mouseenter",function(){clearInterval(e.timer)}).on("mouseleave",function(){e.autoplay()}),i.elem.data("haveEvents",!0))},n.render=function(e){var i=new m(e);return i},e(t,n)}); |
| | | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"100%",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['<button class="layui-icon '+u+'" lay-type="sub">'+("updown"===n.anim?"":"")+"</button>",'<button class="layui-icon '+u+'" lay-type="add">'+("updown"===n.anim?"":"")+"</button>"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['<div class="'+c+'"><ul>',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("<li"+(n.index===e?' class="layui-this"':"")+"></li>")}),i.join("")}(),"</ul></div>"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a<n.index&&e.slide("sub",n.index-a)})},m.prototype.slide=function(e,i){var n=this,l=n.elemItem,u=n.config,c=u.index,m=u.elem.attr("lay-filter");n.haveSlide||("sub"===e?(n.subIndex(i),l.eq(u.index).addClass(d),setTimeout(function(){l.eq(c).addClass(r),l.eq(u.index).addClass(r)},50)):(n.addIndex(i),l.eq(u.index).addClass(s),setTimeout(function(){l.eq(c).addClass(o),l.eq(u.index).addClass(o)},50)),setTimeout(function(){l.removeClass(a+" "+d+" "+s+" "+o+" "+r),l.eq(u.index).addClass(a),n.haveSlide=!1},300),n.elemInd.find("li").eq(u.index).addClass(a).siblings().removeClass(a),n.haveSlide=!0,layui.event.call(this,t,"change("+m+")",{index:u.index,prevIndex:c,item:l.eq(u.index)}))},m.prototype.events=function(){var e=this,i=e.config;i.elem.data("haveEvents")||(i.elem.on("mouseenter",function(){clearInterval(e.timer)}).on("mouseleave",function(){e.autoplay()}),i.elem.data("haveEvents",!0))},n.render=function(e){var i=new m(e);return i},e(t,n)}); |
| | |
| | | <!DOCTYPE html> |
| | | <html lang="en"> |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <title>䏿¬ - èªå¨åç«ä½ä»åº - AS / RS</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="icon" type="image/x-icon" href="../static/image/favicon.ico" /> |
| | | <link rel="stylesheet" href="../static/layui/css/layui.css" media="all"> |
| | | <link rel="stylesheet" href="../static/css/admin.css?v=318" media="all"> |
| | | <link rel="stylesheet" href="../static/css/loader.css" media="all"> |
| | | <link rel="stylesheet" href="../static/css/originTable.css" media="all"> |
| | | <style> |
| | | .layui-logo img { |
| | | width: 25px; |
| | | } |
| | | .layui-logo cite { |
| | | font-size: 18px; |
| | | font-weight: 400; |
| | | /*margin-left: 5px;*/ |
| | | } |
| | | </style> |
| | | <meta charset="utf-8"> |
| | | <title>èªå¨ä»åºWCSç³»ç»</title> |
| | | <link rel="stylesheet" href="../static/css/index.css"> |
| | | <link rel="stylesheet" href="../static/css/layx.min.css" type="text/css" /> |
| | | <script src="../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script src="../static/js/tools/layx.min.js"></script> |
| | | <style> |
| | | .layx-window.layx-skin-news .layx-control-bar { |
| | | background-color: #333333; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body class="layui-layout-body"> |
| | | <div class="layui-layout layui-layout-admin"> |
| | | <!-- å¤´é¨ --> |
| | | <div class="layui-header"> |
| | | <div class="layui-logo"> |
| | | <img src="../static/image/logo.png" style="display: inline-block; width: 60%;height: auto"> |
| | | <!-- <span style="margin-top: 0; letter-spacing: 10px">䏿¬ç«åº</span>--> |
| | | <!-- <img src="../static/image/logo.svg"/>--> |
| | | <!-- <cite>䏿¬ - Zoneyung</cite>--> |
| | | <body> |
| | | <!-- å¯¼èªæ --> |
| | | <div class="sidebar"> |
| | | <div class="nav"> |
| | | <ul class="cl-effect-4"> |
| | | <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">主æ§å¾</a></li> |
| | | <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">è¾é设å¤</a></li> |
| | | <li><a id="lift" onclick="nav(this.id)" class="nav-unselect" href="#">æåæº</a></li> |
| | | <!-- <li><a id="ste" onclick="nav(this.id)" class="nav-unselect" href="#">ç©¿æ¢è½¦</a></li>--> |
| | | <li><a id="shuttle" onclick="nav(this.id)" class="nav-unselect" href="#">ååç©¿æ¢è½¦</a></li> |
| | | </ul> |
| | | </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 id="hostName"></a> |
| | | </li> |
| | | <!-- <li class="layui-nav-item" lay-unselect>--> |
| | | <!-- <a ew-event="note" title="便ç¾"><i class="layui-icon layui-icon-note"></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> |
| | | <cite id="username" style="margin-right: 5px">管çå</cite> |
| | | </a> |
| | | <dl class="layui-nav-child"> |
| | | <dd lay-unselect><a ew-href="detail.html?resourceId=8">åºæ¬èµæ</a></dd> |
| | | <hr> |
| | | <dd lay-unselect><a id="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 id="menu-main" class="layui-nav layui-nav-tree arrow2" lay-filter="admin-side-nav" lay-shrink="_all"> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 主ä½é¨å --> |
| | | <div class="layui-body"></div> |
| | | <!-- åºé¨ --> |
| | | <div class="layui-footer layui-text"> |
| | | copyright © 2024 <a href="http://www.zoneyung.com" target="_blank">æµæ±ä¸æ¬ç«åºææ¯æéå
¬å¸</a> all rights reserved. |
| | | <span class="pull-right">Version 1.0.0</span> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <!--åå§åå è½½å±--> |
| | | <div class="layuimini-loader"> |
| | | <div class="layuimini-loader-inner"></div> |
| | | </div> |
| | | |
| | | <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script type="text/javascript" src="../static/layui/layui.js"></script> |
| | | <script type="text/javascript" src="../static/js/handlebars/handlebars-v4.5.3.js"></script> |
| | | <script type="text/javascript" src="../static/js/common.js"></script> |
| | | <script> |
| | | console.log('%c 䏿¬ç«åºå¹³å° %c 1.0.0','background-color:rgb(53,73,94);color: #fff;border-radius:2px 0 0 2px;padding:2px 4px;','background-color:rgb(25,190,107);color: #fff;border-radius:0 2px 2px 0;padding:2px 4px;font: 9pt "Apercu Regular", Georgia, "Times New Roman", Times, serif;'); |
| | | $(function () { |
| | | if ("" === localStorage.getItem('token')) { |
| | | top.location.href = baseUrl + "/login"; |
| | | } |
| | | }); |
| | | |
| | | layui.config({ |
| | | base: baseUrl + "/static/layui/lay/modules/" |
| | | }).extend({ |
| | | notice: 'notice/notice', |
| | | }).use(['index', 'element', 'layer', 'admin', 'notice', 'table'], function () { |
| | | var $ = layui.jquery; |
| | | var index = layui.index; |
| | | var element = layui.element; |
| | | var layer = layui.layer; |
| | | var admin = layui.admin; |
| | | var notice = layui.notice; |
| | | var table = layui.table; |
| | | |
| | | var easywebIframeMsg = localStorage.getItem("easyweb-iframe"); |
| | | if (!isEmpty(easywebIframeMsg)) { |
| | | var easywebIframeObj = JSON.parse(easywebIframeMsg); |
| | | if (easywebIframeObj.defaultTheme === undefined) { |
| | | admin.changeTheme("theme-colorful"); |
| | | } |
| | | } |
| | | |
| | | $.ajax({ |
| | | url: baseUrl + "/menu/auth", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'POST', |
| | | // async: false, |
| | | success: function (res) { |
| | | // å
³éå è½½å¨ç» |
| | | $('.layuimini-loader').fadeOut(); |
| | | if (res.code === 200) { |
| | | var tpl = $('#menuTpl').html(); |
| | | var template = Handlebars.compile(tpl); |
| | | var html = template(res); |
| | | $("#menu-main").html(html); |
| | | element.init(); |
| | | } else if (res.code === 403) { |
| | | top.location.href = baseUrl + "/login"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | // æ£æµæ¯å¦ä¸ºè¶
级管çå |
| | | $.ajax({ |
| | | url: baseUrl + "/show/host.action", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'GET', |
| | | success: function (res) { |
| | | if (res.code === 200) { |
| | | if (!isEmpty(res.data.hostName)) { |
| | | $('#hostName').text(res.data.hostName); |
| | | } |
| | | if (res.data.root) { |
| | | showHost(); |
| | | } |
| | | } else if (res.code === 403) { |
| | | top.location.href = baseUrl + "/login"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | // é»è®¤å 载主页 |
| | | index.loadHome({ |
| | | menuPath: baseUrl + '/views/home/navigation.html', |
| | | menuName: '<i class="layui-icon layui-icon-home"></i>' |
| | | }); |
| | | |
| | | $('#username').text(localStorage.getItem('username')); |
| | | |
| | | $(document).on('click', '#logout', function () { |
| | | window.location.href = "login.html"; |
| | | localStorage.removeItem('token'); |
| | | localStorage.removeItem('username'); |
| | | admin.closeAllTabs(); |
| | | }); |
| | | |
| | | // æ¿æ¢éåºæé®åé |
| | | var logout = document.getElementById('logout'); |
| | | var url = logout.getAttribute('href'); |
| | | logout.setAttribute('href', baseUrl + "/login"); |
| | | |
| | | // å¤ä»åºæ¨¡å¼ |
| | | function showHost() { |
| | | // var dele = layer.msg('æ£å¨å é¤', {icon: 16, time: 10000}, function(){ |
| | | // layer.msg('æåå é¤', {icon: 1}) |
| | | // }); |
| | | admin.open({ |
| | | type: 1, |
| | | title: 'ä»åºéæ©', |
| | | area: '250px', |
| | | offset: 'r', |
| | | shade: false, |
| | | shadeClose: true, |
| | | content: '<table id="originTable" lay-filter="originTable"></table>', |
| | | success: function (layero) { |
| | | var insTb = table.render({ |
| | | elem: '#originTable', |
| | | url: baseUrl + '/host/list/auth', |
| | | height: 'full-500', |
| | | headers: {token: localStorage.getItem('token')}, |
| | | request: { |
| | | pageName: 'curr', |
| | | pageSize: 'limit' |
| | | }, |
| | | parseData: function (res) { |
| | | return { |
| | | 'code': res.code, |
| | | 'msg': res.msg, |
| | | 'count': res.data.total, |
| | | 'data': res.data.records |
| | | } |
| | | }, |
| | | response: { |
| | | statusCode: 200 |
| | | }, |
| | | defaultToolbar: [], |
| | | cols: [[ |
| | | {field: 'id', title: 'ç¼å·', width: 70, align: 'center'}, |
| | | {field: 'name', title: '项ç®åç§°'} |
| | | ]], |
| | | done: function (res, curr, count) { |
| | | $('.layui-table, .layui-table-view').css("margin", 0); |
| | | // $('#originTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click'); |
| | | } |
| | | }); |
| | | /* çå¬è¡åå»äºä»¶ */ |
| | | table.on('row(originTable)', function (obj) { |
| | | obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click'); |
| | | // æ£æµæ¯å¦ä¸ºè¶
级管çå |
| | | $.ajax({ |
| | | url: baseUrl + "/root/change/host/auth?hostId=" + obj.data.id, |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'GET', |
| | | success: function (res) { |
| | | if (res.code === 200) { |
| | | window.location.reload(); |
| | | } else if (res.code === 403) { |
| | | top.location.href = baseUrl + "/login"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}); |
| | | } |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | }); |
| | | </script> |
| | | <script type="text/html" id="menuTpl"> |
| | | {{#each data}} |
| | | <li class="layui-nav-item"> |
| | | <a><i class="layui-icon {{this.menuIcon}}"></i> <cite>{{this.menu}}</cite></a> |
| | | <dl class="layui-nav-child"> |
| | | {{#each this.subMenu}} |
| | | <dd><a lay-href="{{this.code}}?resourceId={{this.id}}{{this.param}}">{{this.name}}</a></dd> |
| | | {{/each}} |
| | | </dl> |
| | | </li> |
| | | {{/each}} |
| | | </script> |
| | | <!-- 主ä½å
容 --> |
| | | <iframe id="content" src="console.html"></iframe> |
| | | <!-- å°¾é¨ --> |
| | | <footer class="footer"> |
| | | Copyright © 2015~2023 All Rights Reserved. æµæ±ä¸æ¬ç«åºææ¯æéå
¬å¸ ä¿çæææå© |
| | | </footer> |
| | | </body> |
| | | <script> |
| | | // å¯¼èªæ |
| | | function nav(id) { |
| | | $('.nav-select').attr("class", "nav-unselect"); |
| | | $('#'+id).attr("class", "nav-select"); |
| | | $('#content').attr("src", id+".html"); |
| | | } |
| | | |
| | | // ç³»ç»è¿è¡ç¶æ |
| | | var systemRunning = true; |
| | | |
| | | // news by http://chuange.gitee.io/vue-layx/ |
| | | news();layx.min('wcs-news'); |
| | | function news() { |
| | | layx.iframe( |
| | | 'wcs-news' // id |
| | | , 'ç³»ç»åææ¥å' |
| | | , "news.html" |
| | | , { |
| | | shadow:false |
| | | , storeStatus:false |
| | | // , skin: 'news' |
| | | , width:800 |
| | | , height:600 |
| | | , position:'rb' |
| | | // , control:false |
| | | , opacity:0.9 |
| | | , border:false |
| | | , icon:'<img src="../static/images/favicon.ico" style="height:22px;display:block;" alt=""/>' |
| | | , stickMenu:true |
| | | , maxMenu:false |
| | | , closeMenu:false |
| | | , moveLimit:{ |
| | | leftOut: false, |
| | | rightOut: false, |
| | | topOut: false, |
| | | bottomOut: false, |
| | | } |
| | | , minWidth:300 |
| | | , minHeight:300 |
| | | , borderRadius: '8px' |
| | | , shadeDestroy:true |
| | | , escKey: false |
| | | , event:{ |
| | | onmin: { |
| | | after: function () { |
| | | $('.layx-min-statu').css("left", "inherit").css("right", "10px") |
| | | } |
| | | } |
| | | , onrestore:{ |
| | | after: function () { |
| | | let win = layx.getFrameContext('wcs-news'); |
| | | win.autoScroll = true |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ); |
| | | } |
| | | |
| | | </script> |
| | | </html> |
| | | |
| | | |
| | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <title>䏿¬ â login of zoneyung WMS</title> |
| | | <style> |
| | | * { |
| | | padding: 0; |
| | | margin: 0; |
| | | } |
| | | <html lang="en"> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <title>ç³»ç»ç»å½</title> |
| | | <link rel="stylesheet" href="../static/layui/css/layui.css" media="all"> |
| | | <link rel="icon" type="image/x-icon" href="../static/images/wcs_logo.png" /> |
| | | <link rel="stylesheet" href="../static/css/animate.min.css"> |
| | | <script type="text/javascript" src="../static/layui/layui.js"></script> |
| | | <script type="text/javascript" src="../static/js/common.js"></script> |
| | | <style> |
| | | html{ |
| | | height: 100%; |
| | | } |
| | | body.login-bg { |
| | | color: #777; |
| | | height: 100%; |
| | | /*background-image: linear-gradient(to right, #ff9569 0%, #e92758 100%);*/ |
| | | /*background-image: linear-gradient(-90deg, #a2e7f3 0%, #98baee 100%);*/ |
| | | background-image: url("../static/images/login.png"); |
| | | /*background: -webkit-linear-gradient(red, blue); !* Safari 5.1 - 6.0 *!;*/ |
| | | /*background-image: url("../static/image/login_bg.jpg");*/ |
| | | /*background-repeat: no-repeat;*/ |
| | | /*background-size: cover;*/ |
| | | /*background-position: top center;*/ |
| | | } |
| | | |
| | | .container { |
| | | display: flex; |
| | | height: 100vh; |
| | | width: 100%; |
| | | } |
| | | #login-wrapper { |
| | | box-sizing:border-box; |
| | | background: #fff; |
| | | position: absolute; |
| | | top: 45%; |
| | | left: 50%; |
| | | margin-top: -210px; |
| | | margin-left: -220px; |
| | | width: 400px; |
| | | min-height: 380px; |
| | | padding: 50px; |
| | | text-align: center; |
| | | border-radius: 5px; |
| | | box-shadow: 0px 0px 10px rgb(168, 165, 165); |
| | | transform-origin: 50% 50%; |
| | | /*animation: loading 1s 0s forwards;*/ |
| | | transform: rotateX(0deg); |
| | | } |
| | | |
| | | .left-box { |
| | | height: 100%; |
| | | width: 70%; |
| | | } |
| | | #login-wrapper h2 { |
| | | color: rgba(64,158,255,0.9); |
| | | font-size: 26px; |
| | | font-weight: bold; |
| | | margin-bottom: 30px; |
| | | } |
| | | |
| | | .login-video { |
| | | height: 100%; |
| | | overflow: hidden; |
| | | } |
| | | .layadmin-user-login-body .layui-form-item { |
| | | margin-bottom: 20px; |
| | | position: relative; |
| | | } |
| | | .layadmin-user-login-body .layui-form-item .layui-input { |
| | | height: 42px; |
| | | padding-left: 40px; |
| | | font-size: 16px; |
| | | border: 1px solid #c8cccf; |
| | | color: inherit; |
| | | } |
| | | .login-submit { |
| | | margin-top: 30px; |
| | | } |
| | | .layadmin-user-login-icon { |
| | | position: absolute; |
| | | left: 1px; |
| | | top: 1px; |
| | | width: 38px; |
| | | line-height: 40px; |
| | | text-align: center; |
| | | color: #B2B2B2; |
| | | font-size: 18px; |
| | | } |
| | | .layui-btn-normal { |
| | | background-color: rgba(64,158,255,0.9); |
| | | font-size: 20px; |
| | | border-radius: 4px; |
| | | height: 52px; |
| | | } |
| | | #code-box { |
| | | position: relative; |
| | | height: 42px; |
| | | } |
| | | #code-label { |
| | | z-index: 999; |
| | | } |
| | | #code { |
| | | position: absolute; |
| | | left: 0; |
| | | top: 0; |
| | | display: inline-block; |
| | | width: 60%; |
| | | } |
| | | #codeImg { |
| | | border: 1px solid rgba(0,0,0,0.1); |
| | | position: absolute; |
| | | right: 5%; |
| | | top: 0; |
| | | width: 30%; |
| | | height: 90%; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body class="login-bg animsition"> |
| | | |
| | | .form-main { |
| | | width: 300px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | background-color: rgba(255, 255, 255, 0.6); |
| | | padding: 50px 30px 50px 30px; |
| | | border-radius: 20px; |
| | | box-shadow: 0px 0px 40px rgba(0, 0, 0, 0.062); |
| | | } |
| | | <div id="login-wrapper" class="animate__animated animate__bounceInDown"> |
| | | <header> |
| | | <h2>WCS ç³»ç»ç»å½</h2> |
| | | </header> |
| | | <div class="layui-form layadmin-user-login-body"> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-icon layui-icon-cellphone layadmin-user-login-icon"></label> |
| | | <input id="mobile" class="layui-input" type="text" name="mobile" lay-verify="mobile" placeholder="è´¦å·"> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-icon layui-icon-password layadmin-user-login-icon"></label> |
| | | <input id="password" class="layui-input" type="password" name="password" lay-verify="password" placeholder="å¯ç "> |
| | | </div> |
| | | <div id="code-box" class="layui-form-item" style=""> |
| | | <label id="code-label" class="layui-icon layui-icon-vercode layadmin-user-login-icon"></label> |
| | | <input id="code" class="layui-input" type="text" name="password" lay-verify="code" placeholder="éªè¯ç "> |
| | | <img id="codeImg" title="ç䏿¸
ï¼ç¹å»æ¢ä¸å¼ ã"> |
| | | </div> |
| | | <!--<div class="layui-form-item">--> |
| | | <!--<input id="rememberPwd" style="vertical-align: middle" type="checkbox" lay-filter="remPwd" lay-skin="switch" lay-text="å¼å¯|å
³é" title="è®°ä½å¯ç " checked="checked">--> |
| | | <!--<span style="vertical-align: middle;font-size: 15px">è®°ä½å¯ç </span>--> |
| | | <!--</div>--> |
| | | </div> |
| | | <div class="layui-form-item login-submit"> |
| | | <button id="login-button" class="layui-btn layui-btn-fluid layui-btn-normal" lay-submit="" lay-filter="login">ç»     å½</button> |
| | | </div> |
| | | </div> |
| | | |
| | | .heading { |
| | | font-size: 2.5em; |
| | | color: #2e2e2e; |
| | | font-weight: 700; |
| | | margin: 15px 0 0px 0; |
| | | } |
| | | </body> |
| | | <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script type="text/javascript" src="../static/js/tools/md5.js"></script> |
| | | <script type="text/javascript"> |
| | | |
| | | .inputContainer { |
| | | width: 100%; |
| | | position: relative; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | // éªè¯ç å¼å
³ |
| | | var codeSwitch = 'Y'; |
| | | $.ajax({ |
| | | url: baseUrl+"/code/switch.action", |
| | | async: false, |
| | | success: function (res) { |
| | | if (res.data === 'N'){ |
| | | codeSwitch = res.data; |
| | | $('#code-box').css("display", "none"); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | .inputIcon { |
| | | position: absolute; |
| | | left: 10px; |
| | | } |
| | | // åå§åéªè¯ç |
| | | initCode(); |
| | | $('#codeImg').click(function () { |
| | | initCode(); |
| | | }); |
| | | function initCode() { |
| | | var random = Math.random(); |
| | | $('#codeImg').attr("src", baseUrl+"/code.action?sd="+random); |
| | | setTimeout(function () { |
| | | $.ajax({ |
| | | url: baseUrl+"/code.do", |
| | | data: {sd: random}, |
| | | method: 'POST', |
| | | async: false, |
| | | success: function (code) { |
| | | sessionStorage.setItem("code", code); |
| | | } |
| | | }); |
| | | }, 100); |
| | | } |
| | | |
| | | .inputField { |
| | | width: 100%; |
| | | height: 40px; |
| | | background-color: transparent; |
| | | border: none; |
| | | border-bottom: 2px solid rgb(173, 173, 173); |
| | | border-radius: 30px; |
| | | margin: 10px 0; |
| | | color: black; |
| | | font-size: .8em; |
| | | font-weight: 500; |
| | | box-sizing: border-box; |
| | | padding-left: 30px; |
| | | } |
| | | layui.use(['form','layer'],function () { |
| | | var form = layui.form, |
| | | layer = layui.layer, |
| | | $ = layui.jquery; |
| | | |
| | | .inputField:focus { |
| | | outline: none; |
| | | border-bottom: 2px solid rgb(199, 114, 255); |
| | | } |
| | | form.on('submit(login)', function (data) { |
| | | var mobile = $("#mobile").val(); |
| | | if (mobile === "") { |
| | | layer.msg("请è¾å
¥è´¦å·", {offset: '150px'}); |
| | | return; |
| | | } |
| | | var password = $("#password").val(); |
| | | if (password === "") { |
| | | layer.msg("请è¾å
¥å¯ç ", {offset: '150px'}); |
| | | return; |
| | | } |
| | | var code = $("#code").val(); |
| | | if (code === "" && codeSwitch === 'Y') { |
| | | layer.msg("请è¾å
¥éªè¯ç ", {offset: '150px'}); |
| | | return; |
| | | } |
| | | if (sessionStorage.getItem("code").toUpperCase() !== code.toUpperCase()&&codeSwitch==='Y'){ |
| | | layer.msg("éªè¯ç é误", {offset: '150px'}); |
| | | return; |
| | | } |
| | | |
| | | .inputField::placeholder { |
| | | color: rgb(80, 80, 80); |
| | | font-size: 1em; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .login-box { |
| | | height: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | var user = { |
| | | mobile: mobile, |
| | | password: hex_md5(password) |
| | | }; |
| | | $.ajax({ |
| | | url: baseUrl+"/login.action", |
| | | data: user, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | localStorage.setItem("token", res.data.token); |
| | | localStorage.setItem("username", res.data.username); |
| | | window.location.href = "index.html"; |
| | | } else { |
| | | layer.msg(res.msg, {offset: '150px'}); |
| | | } |
| | | } |
| | | }); |
| | | return false; |
| | | }); |
| | | |
| | | .login-button { |
| | | position: relative; |
| | | width: 100%; |
| | | border: 2px solid #8000ff; |
| | | background-color: #8000ff; |
| | | height: 40px; |
| | | color: white; |
| | | font-size: .8em; |
| | | font-weight: 500; |
| | | letter-spacing: 1px; |
| | | border-radius: 30px; |
| | | margin: 10px; |
| | | cursor: pointer; |
| | | overflow: hidden; |
| | | } |
| | | $('body').keydown(function () { |
| | | if (event.keyCode === 13) { |
| | | $("#login-button").click(); |
| | | } |
| | | }); |
| | | |
| | | .login-button::after { |
| | | content: ""; |
| | | position: absolute; |
| | | background-color: rgba(255, 255, 255, 0.253); |
| | | height: 100%; |
| | | width: 150px; |
| | | top: 0; |
| | | left: -200px; |
| | | border-bottom-right-radius: 100px; |
| | | border-top-left-radius: 100px; |
| | | filter: blur(10px); |
| | | transition-duration: .5s; |
| | | } |
| | | |
| | | .login-button:hover::after { |
| | | transform: translateX(600px); |
| | | transition-duration: .5s; |
| | | } |
| | | |
| | | .right-box { |
| | | height: 100%; |
| | | width: 30%; |
| | | background: #f6f6f6; |
| | | position: relative; |
| | | } |
| | | |
| | | .login-copyright { |
| | | position: absolute; |
| | | bottom: 20px; |
| | | right: 20px; |
| | | font-size: 14px; |
| | | width: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | |
| | | .copyright-text { |
| | | margin-right: 20px; |
| | | } |
| | | |
| | | .copyright-img { |
| | | width: 40px; |
| | | height: 40px; |
| | | position: relative; |
| | | } |
| | | |
| | | .copyright-img > img { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .copyright-img-large { |
| | | width: 140px; |
| | | height: 140px; |
| | | position: absolute; |
| | | top: -140px; |
| | | left: -50px; |
| | | display: none; |
| | | } |
| | | |
| | | .copyright-img-large > img { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <div class="container"> |
| | | <div class="left-box"> |
| | | <div class="login-video"> |
| | | <!-- <video src="../static/image/banner.mp4" height="100%" loop autoplay muted="false"--> |
| | | <!-- controlslist="nodownload" disablepictureinpicture></video>--> |
| | | <img src="../static/image/bg1.png" height="100%"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="right-box"> |
| | | <div class="login-box"> |
| | | <div class="form-main"> |
| | | <p style="text-align: center;"><img class="loginLogoUrl" src="../static/image/logo.png" alt="" style="width: 80%"> |
| | | </p> |
| | | <p style="margin-top: -10px;"><span class="login100-form-title p-t-20 p-b-45" |
| | | style="color: #868686;font-size: 24px">WMS</span></p> |
| | | <div class="inputContainer"> |
| | | <svg viewBox="0 0 16 16" fill="#2e2e2e" height="16" width="16" |
| | | xmlns="http://www.w3.org/2000/svg" class="inputIcon"> |
| | | <path |
| | | d="M13.106 7.222c0-2.967-2.249-5.032-5.482-5.032-3.35 0-5.646 2.318-5.646 5.702 0 3.493 2.235 5.708 5.762 5.708.862 0 1.689-.123 2.304-.335v-.862c-.43.199-1.354.328-2.29.328-2.926 0-4.813-1.88-4.813-4.798 0-2.844 1.921-4.881 4.594-4.881 2.735 0 4.608 1.688 4.608 4.156 0 1.682-.554 2.769-1.416 2.769-.492 0-.772-.28-.772-.76V5.206H8.923v.834h-.11c-.266-.595-.881-.964-1.6-.964-1.4 0-2.378 1.162-2.378 2.823 0 1.737.957 2.906 2.379 2.906.8 0 1.415-.39 1.709-1.087h.11c.081.67.703 1.148 1.503 1.148 1.572 0 2.57-1.415 2.57-3.643zm-7.177.704c0-1.197.54-1.907 1.456-1.907.93 0 1.524.738 1.524 1.907S8.308 9.84 7.371 9.84c-.895 0-1.442-.725-1.442-1.914z"> |
| | | </path> |
| | | </svg> |
| | | <input placeholder="请è¾å
¥ç¨æ·å" id="username" name="username" class="inputField" type="text"> |
| | | </div> |
| | | |
| | | <div class="inputContainer"> |
| | | <svg viewBox="0 0 16 16" fill="#2e2e2e" height="16" width="16" |
| | | xmlns="http://www.w3.org/2000/svg" class="inputIcon"> |
| | | <path |
| | | d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2z"> |
| | | </path> |
| | | </svg> |
| | | <input placeholder="请è¾å
¥å¯ç " id="password" name="pass" class="inputField" type="password"> |
| | | </div> |
| | | |
| | | <input type="button" id="login-button" class="login-button" value="ç»å½"> |
| | | |
| | | <div style="display: none;margin-top: 5px;width: 100%;" id="updateLicense"> |
| | | <form enctype="multipart/form-data" style="display: none;"> |
| | | <input id="license" type="file" name="file" > |
| | | </form> |
| | | <input type="button" id="submitLicense" class="login-button" style="margin: 0;" value="æ´æ°è®¸å¯è¯"> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="login-copyright"> |
| | | <div class="copyright-text">Copyright ©2023 æµæ±ä¸æ¬ç«åºææ¯æéå
¬å¸çæææ</div> |
| | | <div id="copyright-img1" class="copyright-img"> |
| | | <img class="copyright-img-url" src="../static/image/weixin_qrcode.jpg" /> |
| | | <div id="copyright-img-large1" class="copyright-img-large"><img class="copyright-img-url" src="../static/image/weixin_qrcode.jpg" /></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script type="text/javascript" src="../static/js/tools/md5.js"></script> |
| | | <script type="text/javascript" src="../static/layer/layer.js"></script> |
| | | <script type="text/javascript" src="../static/js/common.js"></script> |
| | | <script> |
| | | // è·åä¿¡æ¯ |
| | | $(function () { |
| | | $.ajax({ |
| | | url: baseUrl+"/loginInformation", |
| | | data: {}, |
| | | method: 'GET', |
| | | success: function (res) { |
| | | var data = res.data |
| | | $(".copyright-text").text(data.loginCopyrightText); |
| | | $(".copyright-img-url").attr("src", data.loginCopyrightImg1); |
| | | $(".loginLogoUrl").attr("src", data.loginLogo); |
| | | |
| | | if (data.loginCopyrightImg1 == "") { |
| | | $(".copyright-img-url").hide() |
| | | } |
| | | } |
| | | }); |
| | | |
| | | var oldUserName = localStorage.getItem('oldUserName'); |
| | | var oldPass = localStorage.getItem('oldPass'); |
| | | if(oldUserName){ |
| | | $('#username').val(oldUserName); |
| | | } |
| | | if(oldPass){ |
| | | $('#password').val(oldPass); |
| | | } |
| | | }) |
| | | |
| | | window.onload = function(){document.getElementById("username").focus();} |
| | | |
| | | $(document).on('click','#login-button', function () { |
| | | let username = $("#username").val(); |
| | | if (username === "") { |
| | | layer.tips('请è¾å
¥ç»å½è´¦å·', '#username', {tips: [4, '#ff0000']}); |
| | | return; |
| | | } |
| | | let password = $("#password").val(); |
| | | if (password === "") { |
| | | layer.tips('请è¾å
¥å¯ç ', '#password', {tips: [4, '#ff0000']}); |
| | | return; |
| | | } |
| | | $.ajax({ |
| | | url: baseUrl+"/login.action", |
| | | data: { |
| | | username: username, |
| | | password: hex_md5(password), |
| | | wms: true |
| | | }, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | localStorage.setItem("token", res.data.token); |
| | | localStorage.setItem("username", res.data.username); |
| | | window.location.href = "index.html"; |
| | | } else if (res.code === 10001) { |
| | | layer.tips(res.msg, '#username', {tips: [4, '#ff0000']}); |
| | | } else if (res.code === 10002) { |
| | | layer.tips(res.msg, '#username', {tips: [4, '#ff0000']}); |
| | | } else if (res.code === 10003) { |
| | | layer.tips(res.msg, '#password', {tips: [4, '#ff0000']}); |
| | | } else if (res.code === 20001) { |
| | | layer.tips(res.msg, '#login-button', {tips: [3, '#ff0000']}); |
| | | $("#updateLicense").show() |
| | | } else { |
| | | layer.tips(res.msg, '#login-button', {tips: [3, '#ff0000']}); |
| | | } |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | $(document).keydown(function () { |
| | | if (event.keyCode === 13) { |
| | | $("#login-button").click(); |
| | | } |
| | | }); |
| | | |
| | | $("#copyright-img1").on("mouseover", () => { |
| | | $("#copyright-img-large1").show() |
| | | }) |
| | | |
| | | $("#copyright-img1").on("mouseout", () => { |
| | | $("#copyright-img-large1").hide() |
| | | }) |
| | | |
| | | //æ´æ°è®¸å¯è¯ |
| | | $("#submitLicense").on("click",() => { |
| | | $("#license").click() |
| | | }) |
| | | |
| | | //ä¸ä¼ å¹¶æ´æ°è®¸å¯è¯ |
| | | $("#license").on("change",(evt) => { |
| | | var files = evt.target.files; |
| | | console.log(files) |
| | | let formData = new FormData(); |
| | | formData.append("file", files[0]) |
| | | $.ajax({ |
| | | url: baseUrl+"/license/updateLicense", |
| | | data: formData, |
| | | method: 'POST', |
| | | cache: false, |
| | | processData: false, |
| | | contentType: false, |
| | | success: function (res) { |
| | | if (res.code == 200) { |
| | | layer.msg('æ´æ°æå', {time: 1000}, () => { |
| | | parent.location.reload() |
| | | }); |
| | | }else{ |
| | | layer.msg(res.msg,{time:2000},() => { |
| | | parent.location.reload() |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }) |
| | | </script> |
| | | </body> |
| | | </html> |
| | | }); |
| | | </script> |
| | | <script type></script> |
| | | </html> |